ivaneeo's blog

自由的力量,自由的生活。

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

#

     摘要: 环境准备 需要环境: PC-1  Suse Linux 9             10.192.1.1 PC-2  Suse Linux 9        &n...  阅读全文
posted @ 2011-01-21 18:39 ivaneeo 阅读(1013) | 评论 (0)编辑 收藏

     摘要: Hive HBase Integration Contents Hive HBase Integration Introduction Storage Handlers Usage Column Mapping Multiple Colu...  阅读全文
posted @ 2011-01-21 18:14 ivaneeo 阅读(1642) | 评论 (0)编辑 收藏

一、安装准备

1、下载HBASE 0.20.5版本:http://www.apache.org/dist/hbase/hbase-0.20.5/

2、JDK版本:jdk-6u20-linux-i586.bin

3、操作系统:Linux s132 2.6.9-78.8AXS2smp #1 SMP Tue Dec 16 02:42:55 EST 2008 x86_64 x86_64 x86_64 GNU/Linux

4、默认前提是安装完hadoop 0.20.2版本:

    192.168.3.131 namenode

    192.168.3.132 datanode

    192.168.3.133 datanode

二、操作步骤(默认在namenode上进行)

1、拷贝以上文件到Linux的“/root”目录下。同时新建目录“/jz”。

2、安装JDK,此步省略...

3、解压hbase到/jz目录下。tar -zxvf hbase-0.20.5.tar.gz -C /jz

4、修改/jz/hbase-0.20.5/conf/hbase-env.sh文件。指定本地的JDK安装路径:

export JAVA_HOME=/usr/java/jdk1.6.0_20
5、修改/jz/hbase-0.20.5/conf/hbase-site.xml。内容如下:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://m131:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master.port</name>
<value>60000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>m131,s132,s133</value>
</property>
</configuration>
6、修改/jz/hbase-0.20.5/conf/regionservers文件(同hadoop的slaves文件内容相同),内容如下:
s132
s133
7、 将 “/jz/hbase-0.20.5” 目录分别拷贝到192.168.3.132和192.168.3.133下。
8、修改/etc/profile文件,在文件末尾加上环境变量:
export HBASE_HOME=/jz/hbase-0.20.5
export PATH=$PATH:$HBASE_HOME/bin
将文件拷贝到192.168.3.132和192.168.3.133对应的目录下,分别在各个控制台输入:source /etc/profile,使之生效。
9、修改/etc/hosts文件,如下:
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost
192.168.3.131 m131
192.168.3.132 s132
192.168.3.133 s133
然后将文件拷贝到192.168.3.132和192.168.3.133对应的目录下
三、启动HBase
1、通过shell脚本启动hbase。
sh /jz/hbase-0.20.5/bin/start-hbase.sh

2、进入/jz/hbase-0.20.5/bin目录,执行hbsae shell命令,进入hbase控制台,显示如下。

[root@m131 conf]# hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Version: 0.20.5, r956266, Sat Jun 19 12:25:12 PDT 2010
hbase(main):001:0> 
3、在hbase控制台输入list命令,如果正常执行,表示hbase启动成功。如下:2
hbase(main):001:0> list
0 row(s) in 0.0610 seconds
hbase(main):002:0> 
4、WEB查看hbase
查看Master http://192.168.3.131:60010/master.jsp
查看Region Server http://192.168.3.132:60030/regionserver.jsp
查看ZK Tree http://192.168.3.131:60010/zk.jsp
 

四、一些异常的和注意事项

1、安装hbase 0.20.5版本自带了zookeeper-3.2.2,所以不需要单独安装zookeeper。

2、hbase默认通过zookeeper管理,配置项在/jz/hbase-0.20.5/conf/hbase-env.sh文件中:

# Tell HBase whether it should manage it's own instance of Zookeeper or not.
# export HBASE_MANAGES_ZK=true

如果需要采用自带安装的zookeeper,可以将注释取消,把true修改为false。否则启动hbase的时候将会提示地址被占用。不过不影响hbase正常使用。

3、通过shell控制台想hbase插入中文数据将会报错,这是由于hbase中只是存放字节,采用程序将汉字改为字节录入即可。

4、在hbase脚本中执行shell命令,如果出现以下错误,表示hbase中有节点不能正常运行。

NativeException: org.apache.hadoop.hbase.client.RetriesExhaustedException: Trying to contact region server 192.168.3.139:60020 for region .META.,,1, row '', but failed after 7 attempts.
5、有疑问或是写的不对的地方欢迎大家发邮件交流:dajuezhao@gmail.com
posted @ 2011-01-21 18:13 ivaneeo 阅读(2785) | 评论 (0)编辑 收藏

转:http://www.tech126.com/hadoop-hbase/

基于现有的Hadoop集群,来搭建Hbase的环境

整个过程还是比较简单的

1. 下载Hbase源码,并解压

cp hbase-0.20.6.tar.gz /opt/hadoop/
cd /opt/hadoop/
tar zxvf hbase-0.20.6.tar.gz
ln -s hbase-0.20.6 hbase

2.修改hbase-env.sh,加入java环境,并修改log位置

export JAVA_HOME=/opt/java/jdk
export HBASE_LOG_DIR=/opt/log/hbase
export HBASE_MANAGES_ZK=true

3. 修改hbase-site.xml,配置hbase

<property>
    <name>hbase.rootdir</name>
    <value>hdfs://zw-hadoop-master:9000/hbase</value>
    <description>The directory shared by region servers.</description>
</property>
<property>
            <name>hbase.cluster.distributed</name>
            <value>true</value>
            <description>The mode the cluster will be in. Possible values are
              false: standalone and pseudo-distributed setups with managed Zookeeper
              true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh)
            </description>
    </property>
<property>  
    <name>hbase.master</name>  
    <value>hdfs://zw-hadoop-master:60000</value>  
</property> 
<property>
    <name>hbase.zookeeper.quorum</name>        
    <value>zw-hadoop-slave225,zw-hadoop-slave226,zw-hadoop-slave227</value>
    <description>Comma separated list of servers in the ZooKeeper Quorum.      For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".      By default this is set to localhost for local and pseudo-distributed modes      of operation. For a fully-distributed setup, this should be set to a full      list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh      this is the list of servers which we will start/stop ZooKeeper on.      
    </description>
</property>
<property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/opt/log/zookeeper</value>
    <description>Property from ZooKeeper's config zoo.cfg.
        The directory where the snapshot is stored.
    </description>
</property>

几个配置的说明:

  • hbase.rootdir设置hbase在hdfs上的目录,主机名为hdfs的namenode节点所在的主机
  • hbase.cluster.distributed设置为true,表明是完全分布式的hbase集群
  • hbase.master设置hbase的master主机名和端口
  • hbase.zookeeper.quorum设置zookeeper的主机,官方推荐设置为3,5,7比较好

4. 编辑regionservers文件,设置regionservers的服务器,和hadoop的slaves一样即可

5. 启动Hbase

/opt/sohuhadoop/hbase/bin/start-hbase.sh 
/opt/sohuhadoop/hbase/bin/stop-hbase.sh

Hbase默认只有一个Master,我们可以也启动多个Master:

/opt/sohuhadoop/hbase/bin/hbase-daemon.sh start master

不过,其它的Master并不会工作,只有当主Master down掉后

其它的Master才会选择接管Master的工作

Hbase也有一个简单的web界面,来查看其状态

http://10.10.71.1:60010/master.jsp
http://10.10.71.1:60030/regionserver.jsp

http://10.10.71.1:60010/zk.jsp

    posted @ 2011-01-21 16:29 ivaneeo 阅读(2018) | 评论 (0)编辑 收藏

    参考:http://developer.yahoo.com/hadoop/tutorial/module2.html

    Rebalancing Blocks

    如何添加新节点到集群:

    New nodes can be added to a cluster in a straightforward manner. On the new node, the same Hadoop version and configuration ( conf/hadoop-site.xml ) as on the rest of the cluster should be installed. Starting the DataNode daemon on the machine will cause it to contact the NameNode and join the cluster. (The new node should be added to the slaves file on the master server as well, to inform the master how to invoke script-based commands on the new node.)

    如何在新的节点上平衡数据:

    But the new DataNode will have no data on board initially; it is therefore not alleviating space concerns on the existing nodes. New files will be stored on the new DataNode in addition to the existing ones, but for optimum usage, storage should be evenly balanced across all nodes.

    This can be achieved with the automatic balancer tool included with Hadoop. The Balancer class will intelligently balance blocks across the nodes to achieve an even distribution of blocks within a given threshold, expressed as a percentage. (The default is 10%.) Smaller percentages make nodes more evenly balanced, but may require more time to achieve this state. Perfect balancing (0%) is unlikely to actually be achieved.

    The balancer script can be run by starting bin/start-balancer.sh in the Hadoop directory. The script can be provided a balancing threshold percentage with the -threshold parameter;

    e.g., bin/start-balancer.sh -threshold 5 .

    The balancer will automatically terminate when it achieves its goal, or when an error occurs, or it cannot find more candidate blocks to move to achieve better balance. The balancer can always be terminated safely by the administrator by running bin/stop-balancer.sh .

    The balancing script can be run either when nobody else is using the cluster (e.g., overnight), but can also be run in an "online" fashion while many other jobs are on-going. To prevent the rebalancing process from consuming large amounts of bandwidth and significantly degrading the performance of other processes on the cluster, the dfs.balance.bandwidthPerSec configuration parameter can be used to limit the number of bytes/sec each node may devote to rebalancing its data store.

    Copying Large Sets of Files

    When migrating a large number of files from one location to another (either from one HDFS cluster to another, from S3 into HDFS or vice versa, etc), the task should be divided between multiple nodes to allow them all to share in the bandwidth required for the process. Hadoop includes a tool called distcp for this purpose.

    By invoking bin/hadoop distcp src dest , Hadoop will start a MapReduce task to distribute the burden of copying a large number of files from src to dest . These two parameters may specify a full URL for the the path to copy. e.g., "hdfs://SomeNameNode:9000/foo/bar/" and "hdfs://OtherNameNode:2000/baz/quux/"will copy the children of /foo/bar on one cluster to the directory tree rooted at /baz/quux on the other. The paths are assumed to be directories, and are copied recursively. S3 URLs can be specified withs3://bucket-name /key .

    Decommissioning Nodes

    如何从集群中删除节点:

    In addition to allowing nodes to be added to the cluster on the fly, nodes can also be removed from a cluster while it is running , without data loss. But if nodes are simply shut down "hard," data loss may occuras they may hold the sole copy of one or more file blocks.

    Nodes must be retired on a schedule that allows HDFS to ensure that no blocks are entirely replicated within the to-be-retired set of DataNodes.

    HDFS provides a decommissioning feature which ensures that this process is performed safely. To use it, follow the steps below:

    Step 1: Cluster configuration . If it is assumed that nodes may be retired in your cluster, then before it is started, an excludes file must be configured. Add a key named dfs.hosts.exclude to your conf/hadoop-site.xml file. The value associated with this key provides the full path to a file on the NameNode's local file system which contains a list of machines which are not permitted to connect to HDFS.

    Step 2: Determine hosts to decommission . Each machine to be decommissioned should be added to the file identified by dfs.hosts.exclude , one per line. This will prevent them from connecting to the NameNode.

    Step 3: Force configuration reload . Run the command bin/hadoop dfsadmin -refreshNodes . This will force the NameNode to reread its configuration, including the newly-updated excludes file. It will decommission the nodes over a period of time, allowing time for each node's blocks to be replicated onto machines which are scheduled to remain active.

    Step 4: Shutdown nodes . After the decommission process has completed, the decommissioned hardware can be safely shutdown for maintenance, etc. The bin/hadoop dfsadmin -report command will describe which nodes are connected to the cluster.

    Step 5: Edit excludes file again . Once the machines have been decommissioned, they can be removed from the excludes file. Running bin/hadoop dfsadmin -refreshNodes again will read the excludes file back into the NameNode, allowing the DataNodes to rejoin the cluster after maintenance has been completed, or additional capacity is needed in the cluster again, etc.

    Verifying File System Health

    After decommissioning nodes, restarting a cluster, or periodically during its lifetime, you may want to ensure that the file system is healthy--that files are not corrupted or under-replicated, and that blocks are not missing.

    Hadoop provides an fsck command to do exactly this. It can be launched at the command line like so:

      bin/hadoop fsck [path
    ] [options
    ]

    If run with no arguments, it will print usage information and exit. If run with the argument / , it will check the health of the entire file system and print a report. If provided with a path to a particular directory or file, it will only check files under that path. If an option argument is given but no path, it will start from the file system root (/ ). The options may include two different types of options:

    Action options specify what action should be taken when corrupted files are found. This can be -move , which moves corrupt files to /lost+found , or -delete , which deletes corrupted files.

    Information options specify how verbose the tool should be in its report. The -files option will list all files it checks as it encounters them. This information can be further expanded by adding the -blocks option, which prints the list of blocks for each file. Adding -locations to these two options will then print the addresses of the DataNodes holding these blocks. Still more information can be retrieved by adding -racksto the end of this list, which then prints the rack topology information for each location. (See the next subsection for more information on configuring network rack awareness.) Note that the later options do not imply the former; you must use them in conjunction with one another. Also, note that the Hadoop program uses -files in a "common argument parser" shared by the different commands such as dfsadmin , fsck ,dfs , etc. This means that if you omit a path argument to fsck, it will not receive the -files option that you intend. You can separate common options from fsck-specific options by using -- as an argument, like so:

      bin/hadoop fsck -- -files -blocks

    The -- is not required if you provide a path to start the check from, or if you specify another argument first such as -move .

    By default, fsck will not operate on files still open for write by another client. A list of such files can be produced with the -openforwrite option.

    posted @ 2011-01-21 14:18 ivaneeo 阅读(1016) | 评论 (0)编辑 收藏

         摘要: 一、分布式计算开源框架Hadoop实践 在SIP项目设计的过程中,对于它庞大的日志在开始时就考虑使用任务分解的多线程处理模式来分析统计,在我从前写的文章《Tiger Concurrent Practice --日志分析并行分解设计与实现》中有所提到。但是由于统计的内容暂时还是十分简单,所以就采用Memcache作为计数器,结合MySQL就完成了访问控制以及统计的工作。然而未来,对于海量日志分析的...  阅读全文
    posted @ 2011-01-19 15:50 ivaneeo 阅读(328) | 评论 (0)编辑 收藏

    引子

    作为企业架构师,我的职业习惯之一,就是不断的探求各种新的有前景的概念和思想,看其是否有潜力为我所服务的来自各行各业的企业客户带来价值。同样出于对这种理念的追求,我对NoSQL领域的关注了也有一段时间了,甚至从这个术语产生(或者错误的产生?)之前就开始了。Google首先在这方面点了一把火,发布了论文Big Table架构,对关系数据库是银弹这种普遍的信念提出了质疑,而Amazon关于Dynamo的论文则紧随其后。 过去的一年中我们见证了NoSQL强劲的势头,在这一领域有多达25种产品/解决方案发布,并且NoSQL的触角已经伸向了业界的各个角落。在此前提下,我最近考虑深入这一领域,评估一下我的客户究竟如何才能从这种NoSQL运动中获益。不仅如此,我还想探究对于企业来说,是否是到了该认真考虑采纳NoSQL的合适时机了。

    什么是NoSQL——快速回顾

    像许多关注这一领域的人一样,我不喜欢从本质上将SQL与NoSQL这一术语对立起来。同时我对该术语现有的解释"Not Only SQL"也不甚满意。对我来说,我们这里所讨论的并非是是否使用SQL。(相反的是,我们仍然可以选择类似SQL这样的查询接口(缺少对join等的支持)来与这些数据库交互,使用现有的资源和技术来管理开发伸缩性和可维护性。) 这一运动是要找到存储和检索数据的其他高效的途径,而不是盲目地在任何情况下都把关系数据库当作万金油。因此,我认为'Non Relational Database'(非关系型数据库)能够更好的表达这一思想。

    无论采用哪个名字,“非关系型数据库”这一范围所传达出来的“囊括所有”类型的意味,使得这一概念比较模糊(并且它还是否定型的)。这又使得人们(特别是企业中的决策者)对于哪些是属于这个范围,哪些不是,更重要的是,对他们来说这到底意味着什么,感到非常迷惑。

    为了解答这些疑问,我尝试通过以下几点特征的描述,来刻画“非关系型数据库”的内在本质。

    所谓“非关系型数据库”指的是

    1. 使用松耦合类型、可扩展的数据模式来对数据进行逻辑建模(Map,列,文档,图表等),而不是使用固定的关系模式元组来构建数据模型。
    2. 以遵循于CAP定理(能保证在一致性,可用性和分区容忍性三者中中达到任意两个)的跨多节点数据分布模型而设计,支持水平伸缩。这意味着对于多数据中心和动态供应(在生产集群中透明地加入/删除节点)的必要支持,也即弹性(Elasticity)。
    3. 拥有在磁盘或内存中,或者在这两者中都有的,对数据持久化的能力,有时候还可以使用可热插拔的定制存储。
    4. 支持多种的'Non-SQL'接口(通常多于一种)来进行数据访问。

    围绕着图中四个特征的(数据持久性、逻辑数据模型、数据分布模型和接口)“非关系型数据库”的各种变形,在最近的一些文章中有详尽的描述,并且在因特网上有着广泛的传播。所以我就不做过多繁复的描述,而是通过一些例子对关键的方向进行总结,供快速参考:

    接口——REST (HBase,CouchDB,Riak等),MapReduce (HBase,CouchDB,MongoDB,Hypertable等),Get/Put (Voldemort,Scalaris等),Thrift (HBase,Hypertable,Cassandra等),语言特定的API(MongoDB)。

    逻辑数据模型——面向键值对的(Voldemort,Dynomite 等),面向Column Family的(BigTable,HBase,Hypertable 等),面向文档的(Couch DB,MongoDB等),面向图的(Neo4j, Infogrid等)

    数据分布模型——一致性和可用性(HBase,Hypertable, MongoDB等), 可用性和可分区性(Cassandra等)。一致性和可分区性的组合会导致一些非额定的节点产生可用性的损失。有趣的是目前还没有一个“非关系型数据库”支持这一组合。

    数据持久性——基于内存的(如Redis,Scalaris, Terrastore),基于磁盘的(如MongoDB,Riak等),或内存及磁盘二者的结合(如HBase,Hypertable,Cassandra)。存储的类型有助于我们辨别该解决方案适用于哪种类型。然而,在大多数情况下人们发现基于组合方案的解决方案是最佳的选择。既能通过内存数据存储支持高性能,又能在写入足够多的数据后存储到磁盘来保证持续性。

    如何将其与企业IT融合

    如今的企业中,并非所有用例都直观地倾向于使用关系型数据库,或者都需要严格的ACID属性(特别是一致性和隔离性)。在80年代及90年代,绝大部分存储在企业数据库里的数据都是结构化的业务事务的“记录”,必须用受控的方式来生成或访问,而如今它已一去不复返了。无可争辩的是,仍有这一类型的数据在那里,并将继续也应该通过关系型数据库来建模,存储和访问。但对于过去15年以来,随着Web的发展,电子商务和社交计算的兴起所引起的企业里不受控的非结构化并且面向信息的数据大爆炸,该如何应对呢?企业确实不需要关系型数据库来管理这些数据,因为关系型数据库的特点决定了它不适用于这些数据的性质和使用方式。

    上图总结了现今以web为中心的企业中信息管理的新兴模式。而“非关系型数据库” 是处理这些趋势的最佳选择(较之关系型数据库来说),提供了对非结构化数据的支持,拥有支持分区的水平伸缩性,支持高可用性等等。

    以下是支持这一观点的一些实际应用场景:

    日志挖掘——集群里的多个节点都会产生服务器日志、应用程序日志和用户活动日志等。对于解决生产环境中的问题,日志挖掘工具非常有用,它能访问跨服务器的日志记录,将它们关联起来并进行分析。使用“非关系型数据库”来定制这样的解决方案将会非常容易。

    分析社交计算——许多企业如今都为用户(内部用户、客户和合作伙伴)提供通过消息论坛,博客等方式来进行社交计算的能力。挖掘这些非结构化的数据对于获得用户的喜好偏向以及进一步提升服务有着至关重要的作用。使用“非关系型数据库” 可以很好的解决这一需求。

    外部数据feed聚合——许多情况下企业需要消费来自合作伙伴的数据。显然,就算经过了多轮的讨论和协商,企业对于来自合作伙伴的数据的格式仍然没有发言权。同时,许多情况下,基于合作伙伴业务的变更,这些数据格式也频繁的发生变化。通过“非关系型数据库”来开发或定制一个ETL解决方案能够非常成功的解决这一问题。

    高容量的EAI系统——许多企业的EAI系统都有高容量传输流(不管是基于产品的还是定制开发的)。出于可靠性和审计的目的,这些通过EAI系统的消息流通常都需要持久化。对于这一场景,“非关系型数据库” 再次体现出它十分适用于底层的数据存储,只要能给定环境中源系统和目标系统的数据结构更改和所需的容量。

    前端订单处理系统——随着电子商务的膨胀,通过不同渠道流经零售商、银行和保险供应商、娱乐服务供应商、物流供应商等等的订单、应用、服务请求的容量十分巨大。同时,由于不同渠道的所关联的行为模式的限制,每种情况下系统所使用的信息结构都有所差异,需要加上不同的规则类型。在此之上,绝大部分数据不需要即时的处理和后端对帐。所需要的是,当终端用户想要从任何地方推送这些数据时,这些请求都能够被捕获并且不会被打断。随后,通常会有一个对帐系统将其更新到真正的后端源系统并更新终端用户的订单状态。这又是一个可以应用“非关系型数据库”的场景,可用于初期存储终端用户的输入。这一场景是体现“非关系型数据库”的应用的极佳例子,它具有高容量,异构的输入数据类型和对帐的"最终一致性"等等特点。

    企业内容管理服务——出于各种各样的目的,内容管理在企业内部得到了广泛的应用,横跨多个不同的功能部门比如销售、市场、零售和人力资源等。企业大多数时间所面临的挑战是用一个公共的内容管理服务平台,将不同部门的需求整合到一起,而它们的元数据是各不相同的。这又是“非关系型数据库”发挥作用的地方。

    合并和收购——企业在合并与收购中面临巨大的挑战,因为他们需要将适应于相同功能的系统整合起来。“非关系型数据库” 可解决这一问题,不管是快速地组成一个临时的公共数据存储,或者是架构一个未来的数据存储来调和合并的公司之间现有公共应用程序的结构。

    但我们如何才能准确的描述,相对于传统的关系型数据库,企业使用“非关系型数据库”带来的好处呢?下面是可通过非关系型数据库的核心特点(正如上一节所讨论的)而获得的一些主要的好处,即企业的任何IT决策都会参考的核心参数——成本削减,更好的周转时间和更优良的质量。

    业务灵活性——更短的周转时间

    “非关系型数据库”能够以两种基本的方式带来业务灵活性。

    • 模式自由的逻辑数据模型有助于在为任何业务进行调整时带来更快的周转时间,把对现有应用和功能造成影响减到最少。在大多数情况下因任意的变更而给你带来的迁移工作几乎为零。
    • 水平伸缩性能够在当越来越多的用户负载造成负载周期性变化,或者应用突然变更的使用模式时,提供坚固的保障。面向水平伸缩性的架构也是迈向基于SLA构建(例如云)的第一步,这样才能保证在不断变化的使用情形下业务的延续性。

    更佳的终端用户体验——更优越的质量

    在现今企业IT中,应用的质量主要由终端用户的满意度来决定。“非关系型数据库”通过解决如下终端用户的考虑因素,能够达到同样的效果,而这些因素也是最容易发生和最难以处理的。

    • “非关系型数据库” 为提升应用的性能带来了极大的机会。分布式数据的核心概念是保证磁盘I/O(寻道速率)绝不能成为应用性能的瓶颈。尽管性能更多的是由传输速率来决定。在此之上,绝大部分解决方案支持各种不同的新一代的高速计算的范式,比如MapReduce,排序列,Bloom Filter,仅可追加的B树,Memtable等。
    • 现今用户满意度的另一个重要的方面就是可靠性。终端用户希望在想要访问应用时就能访问到,并且至少是在当他们分配到时间的时候能随时执行他们的任务。所以不可用的应用需要不惜代价的避免。许多现代的“非关系型数据库”都能适应并支持这一类有着严格和最终一致性的可用性的需求。

    更低的所有者总成本

    在如今的竞争市场中,企业IT支出随时都要仔细审查,以合理的成本获取合理的质量才值得赞许。在这一领域中“非关系型数据库”在一定程度上胜于传统的数据库,特别是当存储和处理的数据容量很大时。

    • 水平伸缩性的基本前提保证了它们可以运行于廉价机器之上。这不仅削减了硬件资本的成本,同时还削减了诸如电力,维护等运维成本。同时这还进一步的为利用诸如云、虚拟数据中心等下一代低成本的基础设施打下了基础。
    • 从长期来看,更少的维护能带来更多的运维成本优势。对于关系型数据库,这绝对是一个需要存储大容量数据的场景。为大容量的数据调优数据库需要高超的技艺,也就意味着更高的成本。相较之下,“非关系型数据库”始终提供快速和响应的特点,就算是在数据大幅上升的情况下。索引和缓存也以同样的方式工作。开发者不必过多担心硬件、磁盘、重新索引及文件布局等,而是把更多的精力投入了应用程序的开发上。

    企业采用中所面临的挑战

    抛开所有这些长远的好处,在企业拥抱“非关系型数据库”之前,当然还需要经历各种各样的挑战。

    不考虑因现有思想的转换和缺乏信心而产生的来自高层的阻力,目前我认为的最主要的战术性挑战是:

    为“非关系型数据库”认定正确的应用/使用场景

    尽管从理论上容易论证并非所有的企业数据都需要基于关系和ACID的系统,然而由于关系型数据库与企业数据间多年的绑定关系,要作出所有的数据可以通过非关系的解决方案而解耦的决定仍然有很多困难。许多时候IT经理(以及其它对于应用程序负有核心的底线责任的各级人员)不明白他们将会失去什么,这样的担忧对于从关系型数据库转变出来比较不利。企业IT最有价值的资产就是数据。因此,要作出决定使用一种不太明确或者未被广泛采用的解决方案来管理同样的数据,这种能力不仅需要转换思维方式,同时还需要来自高层的强大的支持(和推动)。

    我们如何选择最适合我们的产品/解决方案

    另一个重大的挑战是找出合适的产品/工具来提供“非关系型数据库”。正如前面所提到的那样,现今业界里面有多于25种不同的产品和解决方案,它们在四个方面有着不同的特点。正因为每个产品在这四个方面特点各异,所以要选择一个产品来应对所有的需求显得尤为困难。有的时候,可能在企业的不同部门使用到多种类型的非关系型数据库,最后人们可能会完全出于对标准的需要而转向关系型数据库。

    如何获得规模经济

    这一想法本质上是从前一个问题分支出来的。如果一个组织需要使用多个非关系型数据库解决方案(由于单个方案的适用问题),那么保证在技术(开发者,管理者,支持人员),基础设施(硬件成本,软件许可成本,支持成本,咨询成本),以及工件(公共组件和服务)方面的规模经济就是一个大问题。这一方面与传统的关系型数据库解决方案比较起来确实更为严峻,因为大部分时间组织的数据存储都是以共享服务的模式在运行的。

    我们如何保证解决方案的可移植性

    从“非关系型数据库”的发展来看,我们可以很直观地推测在未来的几年中这一领域会有许多变化,比如供应商的合并,功能的进步以及标准化。所以对于企业来说一个更好的策略是不要把宝押在某个特定的产品/解决方案上,以后才可以更灵活的转换到一个更好的经过考验的产品。 由于现在的非关系型产品/解决方案大部分是私有的,因此IT决策者在考虑尝试“非关系型数据库”之前,不得不认真考虑可移植性这一重要的问题。这纯粹是出于保护现有投资的需要。

    我们如何获得合适的产品支持类型

    现在的“非关系型数据库”能通过外部组织而提供支持方案的少之又少。就算有,也无法与Oracle,IBM或者微软等相比。特别是在数据恢复,备份和特定的数据恢复方面,由于许多“非关系型数据库”在这些方面未能提供一个健壮而易于使用的机制,对于企业决策者来说,仍存在很大的问题。

    我们如何预算整体成本

    与重量级的关系型数据库相比,“非关系型数据库”通常在性能和伸缩性特征方面能提供的数据更少。我也没有发现有TPC基准程序方面和类似的其它方面的数据。这将企业决策者置于了一个“没有方向”的情况下,因为他们不知道需要在硬件、软件许可、基础设施管理和支持等方面支出多大的费用。要得出一个预算估计,缺乏判断的数据就成了一个主要的障碍。因此在项目启动阶段,大部分情况下决策者还是会选择基于熟悉的关系型数据库的解决方案。

    有时候,就算可以得到这些数字,但也不足以用来形成TCO模型并与传统的基于关系型数据库的数据存储和非关系型数据存储进行整体的成本分析(Capex+Opex)比较。通常情况下水平伸缩性所要求的大量的硬件机器(以及软件许可成本,支持成本),如果与垂直伸缩性乍一比较,会让人觉得战战兢兢,除非由此带来的好处经过基于TCO模型的全方位比较仍然被证明是可以持续的。

    关于如何采用NoSQL的两点思考

    这是否意味着目前来看企业应该对NoSQL运动持观望的态度呢?并非如此。诚然,“非关系型数据库”对于广泛的采用来说还未到完全成熟的阶段。但“非关系型数据库”作为未来企业骨架的潜力仍不能忽视。特别是不远的将来企业将更多地处理大容量的半结构化/非结构化以及最终一致性的数据,而不是相对而言小容量的,严格结构化的遵循ACID的数据。 所以现在而言至关重要的是做企业的关键决策人的思想工作,让他们明白企业的数据处理需要使用“非关系型数据库”。在这一过程中,要采取一些渐进的步骤把“非关系型数据库”应用到企业IT的一些关键的方面(技术,人员和流程),并产生一定的价值。这样,就可以用一种缓慢而稳健的方式从整体上来解决我们之前所总结出来的一系列问题。

    采用一个产品/解决方案

    如今市场上的选择非常多样化,可根据“非关系型数据库”侧重的面不同而进行差异化的处理。与此同时,企业应用场景可能需要不同类型的特点。然而以不同的解决方案来处理不同的应用/使用场景从规模经济的角度出发对于企业是不适宜的。因此最好是根据目标应用的需要最终落实到某一个具体的产品/解决方案上。需要注意的是大多数的解决方案在特性上都会有一些折中,有些特性可能在其它的产品中可以获得,有些可能只是在发展路线图当中暂时设定了一个位置。因为大部分的产品会在不久的将来不断趋于成熟,因此可以通过不同配置来提供不同的解决方案。所以只要现有的解决方案能适合目前大部分的需要,不妨作为一个起点将其采纳。

    选择产品/解决方案的经验法则

    • 支持所需要的逻辑数据模型应当被给予更高的权重。这将从实质上决定该解决方案在当前或未来能否灵活地适应不同的业务需求。
    • 调查该产品所支持的物理数据模型的合适与否,据此对这一解决方案所需要的水平伸缩性、可靠性、一致性和分区性作出合理的评估。这同样能表明备份和恢复机制的可能性。
    • 接口支持需要与企业标准的运行环境对齐。由于这些产品支持多样的接口,所以这一点可以得到很好的处理。
    • 只要产品支持水平伸缩性,对于持久化模型的选择就不再重要了。

    这里有一份一系列“非关系型数据库”的对照表。对于现在正认真考虑采用的企业来说,这是一个不错的起点。为了更贴近企业本身的情况,从25+的集合中挑选出的子集所用到的的关键选择标准是:

    1. 最重要的一点首先是企业应用程序必须支持有一定复杂程度的数据结构。否则的话,应用程序管理复杂性的责任将变得非常大。我认为比较合理的应当是介于纯粹的键值对与关系型模式中间的一种方案。出于这方面的考虑像Vlodemort,Tokyo Cabinet等产品就排除在了我的列表之外。
    2. 第二点是以低成本的分片/分区为大容量数据提供水平支持。缺乏这样的支持就使得解决方案与任何关系型数据库无异了。因此像Neo4J(尽管他有丰富的基于图的模型),Redis,CouchDB等此时此刻就被过滤出我的列表之外了。
    3. 最后一条评判标准,在企业级推广之前我会考虑一定程度的商业支持。否则的话,一旦出现生产环境的问题,我该去找谁呢?出于这一点,我不得不将现在的一些明星产品排除在外,比如Cassandra(尽管有很大的可能不久的将来Rackspace或者Cloudera就会对其提供支持,因为它已经被用于一些生产环境里边了,比如Twitter,Digg,Facebook)。

    有了这些过滤标准,我可以精简这一列表,符合目前企业可用的产品有 MongoDB (下一版本就会提供shards支持),RiakHypertableHBase。下面这个表格中总结了这四个产品的主要特性。一个企业可以基于自己具体的实际情况从中作出选择,找到最适合自己需要的特性。

    特性

    MongoDB

    Riak

    HyperTable

    HBase

    逻辑数据模型

    富文档,并提供对内嵌文档的支持

    富文档

    列家族(Column Family)

    列家族(Column Family)

    CAP支持

    CA

    AP

    CA

    CA

    动态添加删除节点

    支持(很快在下一发布中就会加入)

    支持

    支持

    支持

    多DC支持

    支持

    不支持

    支持

    支持

    接口

    多种特定语言API(Java,Python,Perl,C#等)

    HTTP之上的JSON

    REST,Thrift,Java

    C++,Thrift

    持久化模型

    磁盘

    磁盘

    内存加磁盘(可调的)

    内存加磁盘(可调的)

    相对性能

    更优(C++编写)

    最优(Erlang编写)

    更优(C++编写)

    优(Java编写)

    商业支持

    10gen.com

    Basho Technologies

    Hypertable Inc

    Cloudera

    数据访问抽象

    为数据访问创建一个单独的抽象层对于“非关系型数据库”来说是必须的。它可以带来多方面的好处。首先,应用开发者可以与底层解决方案的细节完全隔离开来。这对于技术方面的伸缩性带来了好处。同时未来如果需要更改底层的解决方案也很方便。这也以一个标准的方式满足了多个应用的要求(即去掉了Join,Group by等复杂特性的SQL)。

    为性能和伸缩性创建模型

    不管选择怎样的解决方案,使用标准技术(比如排队网络模型分层排队网络等)来对性能和伸缩性进行建模都是高度推荐的。它能够为基本的服务器规划、拓扑以及整体的软件许可证成本,管理运行等提供必要的数据。这将实质上成为所有预算计划的主要参考数据,并对作出决策提供帮助。

    构建显式的冗余

    要防止数据丢失,除了将数据复制到备份服务器上,没有其它的办法了。尽管许多非关系型数据库提供自动复制功能,但仍然存在主节点单点失效的风险。因此最好是使用次节点备份,并准备好用于数据恢复和自动数据修复的脚本。出于这样的目的,应当充分的了解目标解决方案的物理数据模型,找出可能的恢复机制备选方案,基于企业的整体需求和实践来对这些选项作出评估。

    构建公共数据服务平台

    就像公共共享服务的关系型数据库一样,也可以构建非关系型数据库的公共数据服务来促进规模经济效应,满足基础设施和支持的需要。这对于未来进一步演化和更改也有帮助。这可以作为愿望列表上的最终目标,通过中期或长期的努力来达到这一成熟水平。然而,初始阶段就设立这样的远景有助于在整个过程中作出正确的决策。

    壮大企业的技术力量

    每个组织都有一部分人对于学习新生的和非传统的事物充满热忱。成立这样的小组,并挑选人员(全职的或兼职的),密切关注这方面的动向,了解问题和挑战,进行前瞻性的思考,能够为使用这些技术的项目提供方向和帮助。同时,这个小组还可以为决策者澄清炒作的疑云,提供来自真实数据的观点。

    建立与产品社区的关系

    选择了产品之后,与产品社区建立起良好的关系对于双方的成功都有极大的好处。许多非关系型数据库目前都有十分活跃的社区,非常愿意相互帮助。企业与社区之间的良好合作能给大家带来一个双赢的局面。 如能提前对问题和解决方案有了解,那么企业在对某些特性或版本作出决策时就能成竹在胸。反过来,企业又能对产品特性的路线图产生影响作用,这对他们自身和社区都是有利的。另一方面,社区也能从实际层次的问题中得到反馈,从而丰富和完善产品。来自大型企业的成功案例同样能让他们处于领先。

    迭代前进

    考虑到非关系型数据库相对的成熟度,风险最小的采用策略就是遵循迭代开发的方法论。构建公共数据服务平台和标准化数据访问抽象不可能是一蹴而就的。相反,通过迭代和面向重构的方式能更好的达到目标。运用不太成熟的技术进行转型的过程,中途改变解决方案也不会太意外的。与此同时,采用敏捷的方式来看待事物,能够帮助建立起一个能从管理和实现两方面不断吸引改进的开放态度。

    然而,在这一问题上实现迭代,非常重要的一点是定义一个决策条件矩阵。比如操作指南(和例子),来判断一个应用的对象模型是否适合关系型或非关系的范围,对基础设施规划作出指导,列出必需的测试用例等等。

    结束语

    企业的非关系型数据库采用过程中最大的挑战就是转变决策者的思想观念——让他们相信并非所有的数据/对象都适合关系型数据库。 最能证明这一点就是选择合适的用例去尝试非关系型数据库,进而证实在合适的背景下,非关系型数据库是比关系型数据库更有效的解决方案。 找到一些“非关键业务”(但能立竿见影的)适合于非关系型数据库的项目。这些项目的成功(甚至失败)都能有助于观念的改变。这也能有助于不断学习如何才能以一种不同的方式来更好的采用非关系型数据库。这些少儿学步般的尝试所作出的努力与投入都是值得的,如果企业想要在将来使用“非关系型数据库”来重塑其信息管理体系的话。

    关于作者

    Sourav Mazumder目前是InfoSys Technologies的首席技术架构师。他在信息技术领域有14年以上的经验。作为Infosys技术顾问团的主要成员,Sourav为Infosys在美国、欧洲、澳洲和日本的主要客户,提供保险、电信、银行、零售、安全、交通以及建筑、工程、施工等多个行业的服务。 他曾参与Web项目的技术架构和路线图定义,SOA战略实施,国际战略定义,UI组件化,性能建模,伸缩性分析,非结构化数据管理等等。Sourav参考的Infosys自身的核心银行产品Finacle,也为他提供了丰富的产品开发经验。Sourav还曾参与开发Infosys的J2EE可重用框架,和定义Infosys在架构方面和开发定制应用方面的软件工程方法。Sourav的经历还包括在保证架构合规和开发项目的治理方面的工作。

    Sourav是iCMG认证的软件架构师,同时也是TOGAF 8认证的执行者。Sourav最近在LISA伯克利全球化会议上发表了演讲。Sourav关于SOA的最新白皮书在社区里十分流行。

    Sourav目前关注NoSQL,Web 2.0,治理,性能建构和全球化。


    感谢马国耀对本文的审校。

    给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家加入到InfoQ中文站用户讨论组中与我们的编辑和其他读者朋友交流。

    posted @ 2011-01-19 15:49 ivaneeo 阅读(226) | 评论 (0)编辑 收藏

    Install Oracle 64Bit On Ubuntu

    Creating A Listener For the New DB

    It's not a requirement to create a Listener before you create a database, but it's a good idea to do so. A Listener is a process which listens on a well-known port for requests from remote users seeking to connect to the Oracle database. Without one, therefore, you'd only ever be able to connect to the database whilst directly logged onto the server itself, which is obviously a bit of a show-stopper!

    To create a Listener, we use the Network Configuration Assistant. To invoke the Assistant, just issue the command netca (should be in path) as the oracle user in a new terminal session. Press "Next" to accept the defaults. After a bit you will get to "Finish" which is where you want to finish.

    netca

    Creating a Database

    First, find out the id of the oinstall group. You can find this from looking in System -> Admin -> Users and Groups -> Manage Groups. Alternatively, use:

    cat /etc/group | grep oinstall

    NB: The oinstall Group Id should be 1002 or similar. If the User/Group Applet is giving "0" then try double checking the Properties of the group. I've noticed that the Users/Groups Applet can be unreliable...

    Then, as root, perform the following command. (NB: This can't be performed by sudo, you must be root)

    echo "<dba_group_gid>" > /proc/sys/vm/hugetlb_shm_group

    This allows the oinstall group access to hugetlbpages. Without this you will get error "ORA-27125: unable to create shared memory segment" when setting up the database.

    Run the Database Configuration Assistant, or DBCA for short. You will need to be the Oracle user you set up earlier.

    dbca

    This is not a difficult thing to do: mostly, in our case, it involves clicking "Next" to walk through the wizard, accepting all defaults. You will be prompted when you actually need to enter something.

    Just be sure to specify the correct database name (it should match what is set as your ORACLE_SID, but with a proper domain extension. By default the ORACLE_SID is orcl10, and can be found out by running the oraenv command in the oracle bin directory...

    Use the password "oracle" for the password and write down the values it spits out at the end...!

    NB: If you get a "ORA-12547- Lost Contact" error, make sure you have libaio1installed (sudo apt-get install libaio1)...
    Well Done...!

    If it all went well you now have an Oracle Db on your machine. Pat yourself on the back for getting this far and sticking with it. You still have a way to go before its all installed but go and have some tea to celebrate...! And then go on to Part 2...
    Last Updated on Saturday, 16 January 2010 12:09

    posted @ 2011-01-13 16:51 ivaneeo 阅读(457) | 评论 (0)编辑 收藏

    关于kindle你必须知道的几点:

    中文显示

    Kindle 3的中文显示基本上没有问题了,只有中文标题会偶尔出现口字乱码。豆瓣上有个小tip: kindle 3 不装多看系统也可以看中文 ( http://www.douban.com/group/topic/14228764/ )在主页输入命令:

    ;debugOn
    ~changeLocale zh-CN
    ;debugOff

    (三行后都要回车)就可以改成中文显示,我已经试验成功。txt要重存成UTF8

    免费3G

    (详见:绑定Kindle 支持国内上网

    文档转换:

    建议通过发送文档(UTF-8编码txt/html/doc/pdf/jpg等)到你的私人kindle邮箱 ***@free.kindle.com来直接转换文档,方便快捷还免费,只要打开kindle的wifi功能并联网就能在一分钟内同步。一旦发送成功,amazon会给你回复一封邮件(如下图),告诉你文档已经传输成功,可以打开kindle的wifi(发送到***@free.kindle.com的文档),然后文档会在两分钟内同步到你的kindle。另外,回复的邮件里也给出了转换后的azw格式文档的下载地址,这样你也可以先把文档下载到电脑里,待会用数据线传输。更多介绍参考(英文) Sending Personal Documents to Kindle.

    UTF-8编码:

    txt文档最好用绿色小巧且免费的notepad2转换为UTF-8编码(见下图),doc没有太大限制,docx格式目前还处于实验阶段,有时转换会出错。

    NOTEPAD2:

    下载地址:http://sourceforge.net/projects/notepad2/files/

    电池续航

    kindle如果不进行翻页和联网,停留在任何页面都是根本不耗电的,所以Kindle没有电源的开关键;如果一直开着wifi或3G,kindle的电池只能坚持7天,如果关闭wifi,充完电后可以坚持一个月,建议不用wifi的时候按menu键关闭wifi功能。

    收费服务:

    文档发送到***@kindle.com 收费(via Whispernet,但也不是很贵,50MB大小以下的单个文档,美国境内是$0.15美元每次,美国境外$ .99美元每次),并且需要kindle的3G功能。

    同步管理

    kindle.amazon.com , 在这里查看你已经购买的书籍或者邮件上传的文档,还可以查看你在kindle上添加的读书笔记,可以与twitter/facebook帐号绑定。

    浏览器

    菜单路径Menu–>Experimental–>Browser,这里还可以看到音乐播放的菜单

    音乐播放

    菜单路径同上:Menu–>Experimental

    重装系统

    不喜欢Kindle3的原装系统?安装国产Kindle系统”多看”吧。喜欢折腾的童鞋,可以参考这位童鞋的日志:Kindle 3折腾记. “多看的缺点就是还不如原版系统稳定,但是亮点太多了,多支持了chm,epub等格式不说,光是对于pdf的优化,就是个值得尝试的理由。更不待说它对于中文支持的大大改进。” 链接: 多看 for Kindle2\Kindle3 软件下载区

    支持格式

    邮件发送文档支持的格式有:

  • Microsoft Word (.DOC)
  • HTML (.HTML, .HTM)
  • RTF (.RTF)
  • JPEG (.JPEG, .JPG)
  • GIF (.GIF)
  • PNG (.PNG)
  • BMP (.BMP)
  • PDF (.PDF): See below for details.
  • Microsoft Word (.DOCX) is supported in our experimental category.

    推荐书籍:

  • Kindle新书发现《Dirty Chinese》中文脏话集,很给力!点此购买 http://sinaurl.cn/h4XBGV
  • <孙子兵法>英文版(免费)

    应用推荐:

  • 一款免费推送RSS订阅到kindle的在线应用: http://www.kindlefeeder.com/
  • 本文中提到的某位童鞋的在线看漫画网站: http://mo.pnuts.cc/
  • 现在亚马逊的kindle网店里有免费的扫雷和sudoku和填词游戏:
  • posted @ 2011-01-12 11:11 ivaneeo 阅读(2971) | 评论 (0)编辑 收藏

    开场白:
    Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive_hbase-handler.jar工具类 (Hive Storage Handlers), 大致意思如图所示:
    hive-hbase

    口水:
     对 hive_hbase-handler.jar 这个东东还有点兴趣,有空来磋磨一下。

    一、2个注意事项:
    1、需要的软件有 Hadoop、Hive、Hbase、Zookeeper,Hive与HBase的整合对Hive的版本有要求,所以不要下载.0.6.0以前的老版本,Hive.0.6.0的版本才支持与HBase对接,因此在Hive的lib目录下可以看见多了hive_hbase-handler.jar这个jar包,他是Hive扩展存储的Handler ,HBase 建议使用 0.20.6的版本,这次我没有启动HDFS的集群环境,本次所有测试环境都在一台机器上。
         
    2、运行Hive时,也许会出现如下错误,表示你的JVM分配的空间不够,错误信息如下:
    Invalid maximum heap size: -Xmx4096m
    The specified size exceeds the maximum representable size.
    Could not create the Java virtual machine.

    解决方法:
    /work/hive/bin/ext# vim util/execHiveCmd.sh 文件中第33行
    修改,
    HADOOP_HEAPSIZE=4096

    HADOOP_HEAPSIZE=256

    另外,在 /etc/profile/ 加入 export $HIVE_HOME=/work/hive

    二、启动运行环境
    1启动Hive
    hive –auxpath /work/hive/lib/hive_hbase-handler.jar,/work/hive/lib/hbase-0.20.3.jar,/work/hive/lib/zookeeper-3.2.2.jar -hiveconf hbase.master=127.0.0.1:60000
    加载 Hive需要的工具类,并且指向HBase的master服务器地址,我的HBase master服务器和Hive运行在同一台机器,所以我指向本地。

    2启动HBase
    /work/hbase/bin/hbase master start

    3启动Zookeeper
    /work/zookeeper/bin/zkServer.sh start

    三、执行
    在Hive中创建一张表,相互关联的表
    CREATE TABLE hbase_table_1(key int, value string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val") TBLPROPERTIES ("hbase.table.name" = "xyz");

    在运行一个在Hive中建表语句,并且将数据导入
    建表
        CREATE TABLE pokes (foo INT, bar STRING);
    数据导入
        LOAD DATA LOCAL INPATH '/work/hive/examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;

    在Hive与HBase关联的表中 插入一条数据
        INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=98;
    运行成功后,如图所示:
    hive

    插入数据时采用了MapReduce的策略算法,并且同时向HBase写入,如图所示:
    Map-Reduce Job for INSERT

    在HBase shell中运行 scan 'xyz' 和describe "xyz" 命令,查看表结构,运行结果如图所示:
    hive

    xyz是通过Hive在Hbase中创建的表,刚刚在Hive的建表语句中指定了映射的属性 "hbase.columns.mapping" = ":key,cf1:val"  和 在HBase中建表的名称 "hbase.table.name" = "xyz"

    在hbase在运行put命令,插入一条记录
        put 'xyz','10001','cf1:val','www.javabloger.com'

    在hive上运行查询语句,看看刚刚在hbase中插入的数据有没有同步过来,
        select * from hbase_table_1 WHERE key=10001;
    如图所示:
    hive

    最终的效果
        以上整合过程和操作步骤已经执行完毕,现在Hive中添加记录HBase中有记录添加,同样你在HBase中添加记录Hive中也会添加, 表示Hive与HBase整合成功,对海量级别的数据我们是不是可以在HBase写入,在Hive中查询 喃?因为HBase 不支持复杂的查询,但是HBase可以作为基于 key 获取一行或多行数据,或者扫描数据区间,以及过滤操作。而复杂的查询可以让Hive来完成,一个作为存储的入口(HBase),一个作为查询的入口(Hive)。如下图示。
        hive mapreduce
        
        呵呵,见笑了,以上只是我面片的观点。

    先这样,稍后我将继续更新,感谢你的阅读。

     

    相关文章:
     Apache Hive入门2 
     Apache Hive入门1

     HBase入门篇4 
     HBase入门篇3 
     HBase入门篇2 
     HBase入门篇

    –end–

     

    豆瓣读书  向你推荐有关 HBase、 Hadoop、 Hive、 MapReduce、 云计算、 架构设计、 类别的图书。

    posted @ 2011-01-10 15:22 ivaneeo 阅读(4531) | 评论 (1)编辑 收藏

    仅列出标题
    共67页: First 上一页 16 17 18 19 20 21 22 23 24 下一页 Last