1. 配置Vmware虚拟机
参考第2章的配置,配置好虚拟机。
虚拟机配置好后,配置Hbase参考下表的服务分配来配置HBase。
|--------|-----|-----------|--------------|
| 机器名 | 主节点 | ZooKeeper | RegionServer |
| master | 是 | 是 | 否 |
| slave1 | 备份 | 是 | 是 |
| slave2 | 否 | 是 | 是 |
2. 下载并配置HBase
在HBase的官网http://mirrors.cnnic.cn/apache/hbase/ 下载HBase,其文件为:hbase-1.0.1.1 -bin.tar.gz。下载后解压到master机器。
在master机器进行配置即可,然后可以通过把配置文件拷贝的方式,下载到slave1和slave2,这样可以减少工作量。
注:书上是将hbase安装在root用户下,实测时存在一些问题,主要是权限交叉造成的。我们假设本实验的hbase-1.0.3和hadoop-2.6.0等组件都是装在/home/hadoop/local/opt下,后续都建立在Hadoop用户下(除用户组以上的配置用root用户修改,其他配置及目录全部使用Hadoop用户,保持用户权限的一致性,避免出现不必要的错误)。
[hadoop@master Hbase]$ tar -zxvf hbase-1.0.3-bin.tar.gz -C ~/local/opt
[hadoop@master ~]$ vim ~/.bashrc
将hbase添加到环境变量中
export HBASE_HOME=$HOME/local/opt/hbase-1.0.3
export HBASE_CONF_DIR=$HBASE_HOME/conf
并修改环境变量:
export PATH=PATH:HADOOP_PREFIX/bin:HADOOP_PREFIX/sbin:HBASE_HOME/bin
[hadoop@master conf]# vim hbase-site.xml
配置文件在$HBASE_HOME/conf文件夹里面。修改文件hbase-site.xml文件,内容如下:
<configuration>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master/hbase</value>
</property>
<property>
<name>hbase.master</name>
<value>master</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/local/var/zookeeper</value>
</property>
</configuration>
注意hbase.rootdir必须和你的namenode里面的hdfs的主机名和端口一样。
注:如果运行hbase(zookeeper)的用户无法写入zookeeper文件,导致znode data为空,那么在hbase-site.xml指定一个运行hbase的用户有写入文件权限的目录作为zookeeper数据目录,如/home/hadoop/local/var/zookeeper。
[hadoop@master conf]# vim hbase-env.sh
修改hbase-env.sh文件,添加JDK的配置。内容如下:
export JAVA_HOME=/usr/lib/jvm/java
export HBASE_MANAGES_ZK=true
第一个参数指定了JDK路径;第二个参数设置使用 hbase 默认自带的 Zookeeper
――――――――――[独立安装zookeeper情况]―――――――――――――――
注:如果独立安装zookeeper,则使用变量export HBASE_MANAGES_ZK=false 来禁用hbase自带的zookeeper,独立安装zookeeper方法如下:
在master机器下,配置zookeeper,先解压安装包,使用命令:
[hadoop@master ~]tar -zxvf zookeeper-3.4.5.tar.gz -C /home/hadoop/local/opt
进入zookeeper的配置目录,首先把zoo_sample.cfg重命名一下,可以重新复制一遍,使用命令:
[hadoop@master ~]cp zoo_sample.cfg zoo.cfg
[hadoop@master ~]vim zoo.cfg
添加如下内容:
dataDir=/home/hadoop/local/var/zookeeper
server.0=192.168.164.5:2888:3888
server.1=192.168.164.6:2888:3888
server.2=192.168.164.7:2888:3888
其中,2888端口号是zookeeper服务之间通信的端口,而3888是zookeeper与其他应用程序通信的端口。
在目录/home/hadoop/local/var/zookeeper下创建文件,命名为"myid"
[hadoop@master ~]mkdir /home/hadoop/local/var/zookeeper
[hadoop@master ~]/home/hadoop/local/var/zookeeper
[hadoop@master ~]vim myid
在对应的IP的机器上输入对应的编号。
如在192.168.164.5上,"myid"文件内容就是0,在192.168.164.6上,内容就是1,在192.168.164.7上,内容就是2。(后两者在slave1和slave2中操作)。
把zookeeper分别远程拷贝slave1,slave2,使用如下命令(先cd至zookeeper-3.4.5目录):
scp --r zookeeper-3.4.5 hadoop@slave1:local/opt
scp --r zookeeper-3.4.5 hadoop@slave2:local/opt
开启zookeeper服务,在三台机器的zookeeper安装目录下使用命令(先cd至zookeeper-3.4.5目录):
bin/zkServer.sh start
待3台服务器均启动后,如果过程正确的话zookeeper应该已经自动选好leader,进入每台服务器的zookeeper-3.4.5目录,执行以下操作查看zookeeper启动状态:
bin/zkServer.sh status
如果出现以下代码表示安装成功了。
―――――――――――――[独立安装zookeeper情况]――――――――――――――
[hadoop@master conf]# vim regionservers
修改regionservers ,内容如下:
slave1
slave2
[hadoop@master conf]# vim backup-masters
新建backup-masters文件,内容如下:
slave1
[hadoop@master opt]$ scp -r hbase-1.0.3 hadoop@slave1:local/opt/
[hadoop@master opt]$ scp -r hbase-1.0.3 hadoop@slave2:local/opt/
将配置好的hbase-1.0.3复制至slave1和slave2。
启动hbase时要确保hdfs已经启动。
[root@master ~]# su -- hadoop
[hadoop@master ~]$ start-all.sh
(如果是独立安装zookeeper,则启动hdfs后,分别在三台机器上启动zookeeper,独立启动和查看zookeeper方法如上所述。如果是使用Hbase自带的zookeeper,那么不需要独立启动zookeeper,会在下面的start-hbase.sh中自动启动)
[hadoop@master ~]$ start-hbase.sh
slave2: starting zookeeper, logging to /home/hadoop/local/opt/hbase-1.0.3/logs/hbase-hadoop-zookeeper-slave2.out
slave1: starting zookeeper, logging to /home/hadoop/local/opt/hbase-1.0.3/logs/hbase-hadoop-zookeeper-slave1.out
master: starting zookeeper, logging to /home/hadoop/local/opt/hbase-1.0.3/logs/hbase-hadoop-zookeeper-master.out
starting master, logging to /home/hadoop/local/opt/hbase-1.0.3/logs/hbase-hadoop-master-master.out
slave1: starting regionserver, logging to /home/hadoop/local/opt/hbase-1.0.3/logs/hbase-hadoop-regionserver-slave1.out
slave2: starting regionserver, logging to /home/hadoop/local/opt/hbase-1.0.3/logs/hbase-hadoop-regionserver-slave2.out
slave1: starting master, logging to /home/hadoop/local/opt/hbase-1.0.3/logs/hbase-hadoop-master-slave1.out
[hadoop@master ~]$ jps
3811 SecondaryNameNode
5897 HMaster
5832 HQuorumPeer
3957 ResourceManager
6057 Jps
3653 NameNode
[hadoop@master ~]$ ssh slave1
Last login: Sat Apr 22 20:07:06 2017 from master
[hadoop@slave1 ~]$ jps
3766 HQuorumPeer
3869 HRegionServer
2871 DataNode
4085 Jps
2941 NodeManager
3942 HMaster
[hadoop@slave1 ~]$ ssh slave2
Last login: Sat Apr 22 20:10:54 2017 from slave1
[hadoop@slave2 ~]$ jps
2913 NodeManager
3657 HRegionServer
3554 HQuorumPeer
2843 DataNode
3890 Jps
同时在浏览器访问:http://master:16010/master-status 即可看到HBase的状态。http://192.168.164.6:16030/ 和http://192.168.164.7:16030/可以用于查看RegionServer。
关闭HBase,在master机器上执行下面的命令:
[hadoop@master bin]# ./stop-hbase.sh
关闭zookeeper,若使用Hbase的zookeeper,则关闭Hbase时自动关闭。若独立安装zookeeper,则分别在三台机器上使用bin/zkServer.sh stop关闭。
关闭hdfs,在master机器上执行下面的命令:
[hadoop@master bin]# ./stop-all.sh
注意启动顺序为:HDFS->(Zookeeper)->HBase,关闭顺序为:HBase->(Zookeeper)->HDFS。
注意: 如果发现slave1 上面的RegionServer 启动不了,可以在$HBASE_HOME/log 下面查看RegionServer 对应的日志,如果出现下面的错误:
Caused by: java.net.BindException: Problem binding to master.example.com/192.168.222.131:16020 : Address already in use
at org.apache.hadoop.hbase.ipc.RpcServer.bind(RpcServer.java:2371)
at org.apache.hadoop.hbase.ipc.RpcServer$Listener.<init>(RpcServer.java:524)
at org.apache.hadoop.hbase.ipc.RpcServer.<init>(RpcServer.java:1899)
at org.apache.hadoop.hbase.regionserver.RSRpcServices.<init>(RSRpcServices.java:792)
at org.apache.hadoop.hbase.regionserver.HRegionServer.createRpcServices(HRegionServer.java:575)
at org.apache.hadoop.hbase.regionserver.HRegionServer.<init>(HRegionServer.java:492)
... 10 more
Caused by: java.net.BindException: Address already in use
那就说明HBase 和RegionServer 端口相同,需要使用下面的方式启动RegionServer :
[hadoop@slave1 bin]#./local-regionservers.sh start 1
关闭命令为:[hadoop@slave1 bin]#./local-regionservers.sh stop 1
其中1,2,3标识各个RegionServer 。表示端口号偏移一个值。
备份Hmaster如果启动不了,一般也是这个原因。
使用本地命令进行启动:
[hadoop@slave bin]$ ./local-master-backup.sh start 1
其中1,2,3标识各个HMaster。表示端口号偏移一个值。
关闭使用类似的命令。
重点是保持HBase 和RegionServer 端口不相同就行。
3. Hbase Shell 命令
1)进入HBase Shell。
[hadoop@master ~]# $HBASE_HOME/bin/hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.0.1.1, re1dbf4df30d214fca14908df71d038081577ea46, Sun May 17 12:34:26 PDT 2015
2)新建user表。
hbase(main):001:0> create 'user','info'
0 row(s) in 1.2520 seconds
=> Hbase::Table -- user
3)导入user表中的数据。
hbase(main):002:0> put 'user','001','info:name','Tom'
0 row(s) in 0.1370 seconds
hbase(main):003:0> put 'user','001','info:age','22'
0 row(s) in 0.0240 seconds
hbase(main):004:0> put 'user','002','info:name','Kate'
0 row(s) in 0.0230 seconds
hbase(main):005:0> put 'user','002','info:age','30'
0 row(s) in 0.0140 seconds
hbase(main):006:0> put 'user','003','info:name','Jack'
0 row(s) in 0.0120 seconds
hbase(main):007:0> put 'user','003','info:age','36'
0 row(s) in 0.0280 seconds
4)查看user表中的数据。
hbase(main):008:0> scan 'user'
ROW COLUMN+CELL
001 column=info:age, timestamp=1439433026307, value=22
001 column=info:name, timestamp=1439433017825, value=Tom
002 column=info:age, timestamp=1439433043987, value=30
002 column=info:name, timestamp=1439433037118, value=Kate
003 column=info:age, timestamp=1439433057189, value=36
003 column=info:name, timestamp=1439433050416, value=Jack
3 row(s) in 0.0740 seconds
5)查看user表的描述。
hbase(main):009:0> describe 'user'
Table user is ENABLED
user
COLUMN FAMILIES DESCRIPTION
{NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_D
ELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSIO
N => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLIC
ATION_SCOPE => '0'}
1 row(s) in 0.0550 seconds
6)删除user表。
hbase(main):010:0> disable 'user'
0 row(s) in 1.2820 seconds
hbase(main):011:0> drop 'user'
0 row(s) in 0.1940 seconds
hbase(main):012:0> list
TABLE
0 row(s) in 0.0250 seconds
=> []