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文件,内容如下:
\
\
\hbase.cluster.distributed\
\true\
\
\
\hbase.rootdir\
\hdfs://master/hbase\
\
\
\hbase.master\
\master\
\
\
\hbase.zookeeper.quorum\
\master,slave1,slave2\
\
\
\hbase.zookeeper.property.dataDir\
\/home/hadoop/local/var/zookeeper\
\
\
注意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.\(RpcServer.java:524)*
*at org.apache.hadoop.hbase.ipc.RpcServer.\(RpcServer.java:1899)*
*at org.apache.hadoop.hbase.regionserver.RSRpcServices.\(RSRpcServices.java:792)*
*at org.apache.hadoop.hbase.regionserver.HRegionServer.createRpcServices(HRegionServer.java:575)*
*at org.apache.hadoop.hbase.regionserver.HRegionServer.\(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\' for list of supported commands.
Type "exit\" 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
=\> \[