安装、部署hadoop和hbase的文章网上已经很多了,这里说下自己安装、部署时遇到的 一些问题。
1、 hadoop-env.sh的文件里添加:
export HADOOP_CLASSPATH=$HBASE_HOME/hbase-0.20.3.jar:$HBASE_HOME/conf:
$HBASE_HOME/lib/zookeeper-3.2.2.jar
注意红色部分,网上的文档没提到,但不加的话利用Mapreduce提取Hbase数据时会说找不 到zookeeper相关类,还是加上省事!
(这里多说一点,个人觉得在 hadoop的文件里直接这样制定HADOOP_CLASSPATH不是很好,会导致其他在shell里指定export HADOOP_CLASSPATH=...的无效,估计是冲突了。其他各式各样的Mapreduce程序依赖的jar包总不能全部写到hadoop- env.sh里吧?所以,感觉把hbase和zookeeper两个jar包直接放到hadoop的lib下更好点!)
2、 启动Hbase时老启动不了,都是些链接的问题,这个时候要查查看机器的hosts设置是否正确。还有hbase的配置文件,如hbase- site.xml、regionservers等文件里的机器最好写域名,写ip它不认,不知道是不是版本问题。
3、 hbase-site.xml的配置:
<property>
<name>
hbase.rootdir</name>
<value>
hdfs://join191.hbase.xxx.net:9100/hbase</value>
<description> </description>
</property>
<property>
<name>
hbase.master</name>
<value>
join191.hbase.xxx.net:60000</value>
<description>The port master should bind to.</description>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>false</value>
<description> </description>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>
join191.hbase.xxx.net</value>
<description></description>
</property>
其中hbase.rootdir的hdfs://join191.hbase.xxx.net:9100 与 hadoop(core-site.xml)中的fs.default.name对应,当然,hadoop的配置里可以用ip,hbase里得用域名。保 证格式路径一样就行。
Hbase.master在hbase- default.xml里是叫Hbase.master.port的,去掉port,把域名和端口写一起也可以。
如果是分布式的话,把上面的hbase.cluster.distributed设置为true, 并在hbase-env.sh里的设置export HBASE_MANAGES_ZK=true。
另外如果是把利用Mapreduce跑hbase程 序的工程打成jar包的话,个人偏向于把hbase-site.xml打进包里(线上的配置),这样省的node节点报一些zookeeper报一些错误 (因为这些光是在hbase里配置还不行,因为是利用hadoop的Mapreduce程序运行,hadoop需要知道hbase的这个配置。当然,把这 个配置指定到hadoop的classpath或放到hadoop的conf下应该也行,不过没试过)。