环境
hbase-0.90.4
hadoop-0.20.2
zookeeper3.3.3
三台机器
master 192.168.1.90 (master,namenode secondnamenode)
slaver1 192.168.1.92
slaver2 192.168.1.93
环境变量
在/etc/profile增加
export HADOOP_HOME=/webapp/nosql/hadoop-0.20.2
export JAVA_HOME=/webapp/jdk1.6.0_22
export HBASE_HOME=/webapp/nosql/hbase-0.90.4
配置文件
hbase-env.sh
hbase-site.xml
regionservers
hbase-env.sh设置hbase环境变量
hbase-site.xml设置hbase相关参数就在该文件
regionservers指定region server列表,用机器名
修改hbase-env.sh
export JAVA_HOME=java home目录
export HBASE_CLASSPATH=hadoop的conf目录
export HBASE_MANAGES_ZK=false //设置zookeeper不由hbase管理
修改hbase-site.xml
<property>
<name>hbase.master</name> //master机器名
<value>master</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:54310/hbase</value> //与fs.default.name设置的机器名与端口一致
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slaver1,slaver2</value> //必须为奇数与zookeeper机制有关
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>60000000</value>
</property>
<property>
<name>hbase.zookeeper.property.clientport</name>
<value>2181</value>//必须与zoo.cfg中的配置一致
</property>
regionservers文件加入
slaver1
slaver2 //注意是机器名
将整个hbase的目录scp到每个regionserver机器
zookeeper配置
创建zookeeper data目录
mkdir zookeeper
进入$ZOOKEEPER_HOME/conf
修改zoo_sample.cfg为zoo.cfg
mv zoo_sample.cfg zoo.cfg
修改zoo.cfg
增加如下内容
server.1=master:2888:3888
server.2=slaver1:2888:3888
server.3=slaver2:2888:3888
修改dataDir=刚才创建的zookeeper目录
在zookeeper目录中创建一个myid文件
touch myid
设置myid的内容为
server.X=slaver1:2888:3888
中的server后的X
比如master中就应是1
zookeeper配置完成
将zookeeper scp到每个节点
不要忘记修改myid的值
启动hbase集群
./start-all.sh //启动hadoop
./zkServer.sh start //在每个机器上启动zookeeper
./start-hbase.sh //启动hbase
停止hbase集群
./stop-hbase.sh
./zkServer.sh stop
./stop-all.sh
常见问题
org.apache.hadoop.ipc.RPC$VersionMismatch: Protocol org.apache.hadoop.hdfs.protocol.ClientProtocol version mismatch. (client = 42, server = 41)
处理方法
删除把hbase-0.90.3/lib中的hadoop-core-0.20-append-r1056497.jar
将hadoop core.jar ant.jar tools.jar拷贝到hbase/lib下就ok
master-desktop:/opt/hbase-0.90.4/bin$ ./hbase shell //进入hbase 命令行
创建表
hbase(main):006:0> create 'test', 'cf'
0 row(s) in 2.5190 seconds
查看表
list
插入数据
hbase(main):007:0> put 'test', 'row1', 'cf:a', 'value1'
0 row(s) in 0.1160 seconds
hbase(main):008:0> put 'test', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0130 seconds
查看数据
hbase(main):009:0> scan 'test'
ROW COLUMN+CELL
row1 column=cf:a, timestamp=1320653219927, value=value1
row2 column=cf:b, timestamp=1320653236889, value=value2
2 row(s) in 0.0480 seconds
查询指定行
hbase(main):010:0> get 'test', 'row1'
COLUMN CELL
cf:a timestamp=1320653219927, value=value1
1 row(s) in 0.0150 seconds
删除test
hbase(main):011:0> disable 'test'
0 row(s) in 2.0520 seconds
hbase(main):012:0> drop 'test'
0 row(s) in 1.2670 seconds
退出shell
hbase(main):013:0> exit
关闭hbase
./stop-hbase.sh
相关错误
java.io.IOException: Call to node1/10.64.56.76:49002 failed on local exception: java.io.EOFException
从hadoop_home/下面cp一个hadoop/hadoop-core-0.20.203.0.jar到hbase_home/lib下。
因为Hbase建立在Hadoop之上,所以他用到了hadoop.jar,这个Jar在 lib 里面。这个jar是hbase自己打了branch-0.20-append 补丁的hadoop.jar. Hadoop使用的hadoop.jar和Hbase使用的 必须 一致。所以你需要将 Hbaselib 目录下的hadoop.jar替换成Hadoop里面的那个,防止版本冲突。比方说CDH的版本没有HDFS-724而branch-0.20-append里面有,这个HDFS-724补丁修改了RPC协议。如果不替换,就会有版本冲突,继而造成严重的出错,Hadoop会看起来挂了。
java.lang.NoClassDefFoundError: org/apache/commons/configuration/Configuration
解决:
在NoClassDefFoundError,缺少 org/apache/commons/configuration/Configuration
果断给他加一个commons-configuration包,
从hadoop_home/lib下面cp一个hadoop/lib/commons-configuration-1.6.jar到hbase_home/lib下。