安装准备
1、安装JDK及Hadoop环境 见: https://blog.csdn.net/zhangxm_qz/article/details/106695347
2、安装Zookeeper 见:https://blog.csdn.net/zhangxm_qz/article/details/88963194
3、准备好Hbase安装包 hbase-1.3.1-bin.tar.gz
Hadoop和 Hbase的版本存在依赖关系,必须保证版本匹配,匹配关系如下,我们这里使用hadoop2.6.1 和Hbase1.3.1
4、一台虚拟机 CentOS7.8 (我这里使用 hadoop集群中的 Server03服务器,zookeeper也安装在serveer03服务器端口2181)
安装步骤
解压Hbase安装包
解压安装文件并软连接到 到 hbase
命令如下
tar -zvxf hbase-1.3.1-bin.tar.gz
ln -s hbase-1.3.1 hbase
目录结构如下:
[root@server03 zookeeper]# ll /opt/apps
total 490096
lrwxrwxrwx. 1 root root 12 Jun 10 03:34 hadoop -> hadoop-2.6.1
drwxr-xr-x. 11 10011 10011 172 Jun 10 04:57 hadoop-2.6.1
-rw-r--r--. 1 root root 197113367 Jun 9 06:10 hadoop-2.6.1.tar.gz
lrwxrwxrwx. 1 root root 11 Jun 12 05:50 hbase -> hbase-1.3.1
drwxr-xr-x. 9 root root 184 Jun 12 06:40 hbase-1.3.1
-rw-r--r--. 1 root root 105718722 Jun 9 06:39 hbase-1.3.1-bin.tar.gz
lrwxrwxrwx. 1 root root 12 Jun 9 22:43 jdk -> jdk1.8.0_73/
drwxr-xr-x. 8 10 143 255 Jan 29 2016 jdk1.8.0_73
-rw-r--r--. 1 root root 181310701 Feb 24 2016 jdk-8u73-linux-x64.tar.gz
lrwxrwxrwx. 1 root root 15 Jun 12 06:03 zookeeper -> zookeeper-3.4.6
drwxr-xr-x. 11 1000 1000 4096 Jun 12 06:05 zookeeper-3.4.6
-rw-r--r--. 1 root root 17699306 Oct 3 2015 zookeeper-3.4.6.tar.gz
[root@server03 zookeeper]#
修改配置文件
hbase-env.sh文件
修改如下配置项
#JAVA_HOME
export JAVA_HOME=/opt/apps/jdk/
#关闭HBase自带的Zookeeper,使用外部Zookeeper集群
export HBASE_MANAGES_ZK=false
#设置HBASE_PID_DIR目录
export HBASE_PID_DIR=/opt/apps/hbase/pids
#Hbase日志目录
export HBASE_LOG_DIR=${HBASE_HOME}/logs
#set hbase heep size
export HBASE_HEAPSIZE=4G
#注销以下两项
# export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"
# export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"
hbase-site.xml文件
<configuration>
<property> <!--配置hdfs的中habse目录地址 hdfs://server01:9000 为hdfs地址 hbase为 hbase服务文件存放目录-->
<name>hbase.rootdir</name>
<value>hdfs://server01:9000/hbase</value>
</property>
<property> <!--是否集群 这里只部署单机版 因此 配置为false 如果是集群则 修改为true-->
<name>hbase.cluster.distributed</name>
<value>false</value>
</property>
<property> <!--配置zk端口-->
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property> <!--zk ip地址,如果是使用呢zk集群则多个ip逗号分隔-,也可以将端口直接配置在ip后边 192.168.1.1:2181,192.168.1.2:2181-->
<name>hbase.zookeeper.quorum</name>
<value>server03</value>
</property>
<property> <!--zk数据目录,zk安装是会配置该目录 保持一致即可-->
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/apps/zookeeper/data</value>
</property>
<property> <!---->
<name>hbase.master.maxclockskew</name>
<value>120000</value>
</property>
</configuration>
regionservers 文件
配置服务器,这里是单节点部署因此只配置 本机即可
如果是集群(如三台 )则需要配置所有服务器地址(server01,server02 server03 )
server03
*server02
server01*
/etc/profile环境变量
增加hbase环境变量配置
#hbase
export HBASE_HOME=/opt/apps/hbase
export PATH=$HBASE_HOME/bin:$PATH
执行 source /etc/profile 使配置生效
如果是分布式部署 则 复制目录到其他服务器并修改 :
1)hbase-site.xml 中分布式部署配置改为 true
2)regionservers 文件中增加其他服务器
功能验证
验证zk 及 hadoop 服务正常 情况下执行start-hbase.sh 命令启动hbase
执行 hbase shell 进行交互
[root@server03 hbase]# bin/start-hbase.sh
starting master, logging to /opt/apps/hbase/logs/hbase-root-master-server03.out
server03: Warning: Permanently added the ECDSA host key for IP address '192.168.204.12' to the list of known hosts.
jpserver03: starting regionserver, logging to /opt/apps/hbase/bin/../logs/hbase-root-regionserver-server03.out
^H[root@server03 hbase]# jps
4448 DataNode
36082 HMaster
25611 QuorumPeerMain
4557 NodeManager
36541 Jps
36206 HRegionServer
33503 ZooKeeperMain
[root@server03 hbase]# hbase shell
2020-06-12 12:37:58,536 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/apps/hbase-1.3.1/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/apps/hadoop-2.6.1/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.3.1, r930b9a55528fe45d8edce7af42fef2d35e77677a, Thu Apr 6 19:36:54 PDT 2017
hbase(main):001:0> status
1 active master, 0 backup masters, 1 servers, 1 dead, 2.0000 average load
hbase(main):008:0> create 'test1','baseinfo' --创建一个表
0 row(s) in 1.4050 seconds
=> Hbase::Table - test1
hbase(main):009:0> list --查看表清单
TABLE
test1
1 row(s) in 0.0730 seconds
=> ["test1"]
hbase(main):010:0>
ZK 中hbase目录下已经保存了hbase 相关内容
[zk: localhost:2181(CONNECTED) 2] ls /hbase
[replication, meta-region-server, rs, splitWAL, backup-masters, table-lock, flush-table-proc, region-in-transition, online-snapshot, master, switch, running, recovering-regions, draining, namespace, hbaseid, table]
访问如下地址可以看到管理界面
http://server03:16010
问题记录
1、执行 hbase命令提示 The node /hbase is not in ZooKeeper
解决 修改hbase-site.xml 将 hbase.cluster.distributed 配置修改为true,之后 正常了
<property> <!--是否集群 这里只部署单机版 因此 配置为false 如果是集群则 修改为true-->
<name>hbase.cluster.distributed</name>
<value>false</value>
</property>