您的位置:首页 > 其它

HBase 完全分布式 安装配置

2012-07-28 10:41 423 查看
需要环境:

OS:   CentOS 5.5 (可以根据自己的需要来使用Linux环境)

JDK:   1.6.0_32 (JDK 1.6版本的最新版本)

hadoop: Hadoop 1.0.3(目前Hadoop稳定的最新版本)

hbase: HBase 0.92.1(目前HBase稳定的最新版本,至少跟Hadoop1.0.3是兼容的)

(本文讲述的是使用hbase自带的zookeeper,所以没有下载安装zookeeper)

HBase作为架构在Hadoop上的一个BigTable,不得不说它有很大的应用空间,如下是安装配置过程。(前提是已经在集群上正常部署Hadoop,并可以正常启动和停止)

1. 下载并加压HBase 0.92.1版本

tar zxvf hbase-0.92.1.tar.gz

2. 修改配置文件

在修改之前,看到很多帖子说HBase配置中的master、slave等最好用主机名而不是ip地址,没尝试使用ip地址是怎样的结果,不过使用主机名是可以运行起来的。不过注意,要在/etc/hosts中添加相对应的主机名的ip地址的匹配。

注:HBASE_MANAGES_ZK=true 表示要使用hbase自带的zk来进行管理,没有使用单独的zk

conf/hbase-env.sh





conf/hbase-site.xml

<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>hdfs://master:9002</value>
</property>

...

<property>
<name>hbase.zookeeper.quorum</name>
<value>slave1,slave2,slave3</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>/usr/hadoop/zookeeper</value>
<description>Property from ZooKeeper's config zoo.cfg. The directory where the snapshot is stored. </description>
</property>


默认的hbase-site.xml里面没有属性设置的,但是在"hbase-0.92.1\src\packages\conf-pseudo"这个路径下有hbase-site.xml这个文件,虽然这个路径是伪分布式的,但是在这个hbase-site.xml文件中的hbase.cluster.distributed属性中的值是true。不知道为什么 HBase的设置是这样的。不管怎样,拿来进行了上述修改。

hbase.rootdir 设置hbase在hdfs上的目录,主机名为hdfs的namenode节点所在的主机

hbase.cluster.distributed 设置为true,表明是完全分布式的hbase集群

hbase.master 设置hbase的master主机名和端口

hbase.zookeeper.quorum 设置zookeeper的主机,建议使用单数

hbase.zookeeper.property.dataDir 设置zookeeper的数据路径

再修改Hadoop hdfs-site.xml下的一个属性值。(记得其他的datanode也要进行修改)

<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
</property>


该参数限制了datanode所允许同时执行的发送和接受任务的数量,缺省为256,hadoop-defaults.xml中通常不设置这个参数。这个限制看来实际有些偏小,高负载下,DFSClient 在put数据的时候会报 could not read from stream 的 Exception。

An Hadoop HDFS datanode has an upper bound on the number of files that it will serve at any one time. The upper bound parameter is called
xcievers
(yes, this is misspelled).

Not having this configuration in place makes for strange looking failures. Eventually you'll see a complain in the datanode logs complaining about the xcievers exceeded, but on the run up to this one manifestation is complaint about missing blocks. For example:
10/12/08 20:10:31 INFO hdfs.DFSClient: Could not obtain block blk_XXXXXXXXXXXXXXXXXXXXXX_YYYYYYYY from any node: java.io.IOException: No live nodes contain current block. Will get new block locations from namenode and retry...


3. 修改conf/regionservers

将所有的datanode添加到这个文件,类似与hadoop中slaves文件,如下是我添加的内容:

slave1

slave2

slave3

4. 拷贝hbase到所有的节点

tar zcvf hbase-0.92.1.tar.gz hbase-0.92.1

scp hbase-0.92.1.tar.gz hadoop@192.168.0.3:~/

scp hdfs-site.xml hadoop@192.168.0.3:~/

然后进行相应的解压、替换即可。

其他datanode节点按照相同的操作即可。

5. 启动

bin/start-hbase.sh(注:首先至少要执行bin/start-dfs.sh启动hdfs)

bin/hbase shell

如果正常启动,在master和regionserver上应该有如下的jps信息


master


regionserver

6. web查看信息
http://master:60010/master.jsp 查看连点信息
http://master:60030/regionserver.jsp 查看regionserver信息
http://master:60010/zk.jsp 查看zookeeper信息

7. 测试数据

这部分没有截图,不过如果出现5中所展示的jps信息即可以进行正常的使用。操作如下:

bin/hbase shell
---
hbase(main):003:0> create 'test', 'cf'
0 row(s) in 1.2200 seconds
hbase(main):003:0> list
TABLE
test
1 row(s) in 0.0550 seconds
hbase(main):004:0> put 'test', 'row1', 'cf:a', 'value1'
0 row(s) in 0.0560 seconds
hbase(main):005:0> put 'test', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0370 seconds
hbase(main):006:0> put 'test', 'row3', 'cf:c', 'value3'
0 row(s) in 0.0450 seconds

hbase(main):008:0> get 'test', 'row1'
COLUMN CELL
cf:a timestamp=1288380727188, value=value1
1 row(s) in 0.0400 seconds

hbase(main):012:0> disable 'test'
0 row(s) in 1.0930 seconds
hbase(main):013:0> drop 'test'
0 row(s) in 0.0770 seconds

hbase(main):014:0> exit
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: