hbase
说明
本文沿袭上篇,使用三台虚拟机模拟分布式,已经搭建好了hadoop环境。下载的hbase版本为2.4.11
配置
解压hbase压缩包到任意目录,以/export/server/hbase-2.4.11/
为例。解压完毕后,进入conf目录。
- 指定java目录及zk管理模式
vim hbase-env.sh
export JAVA_HOME=/export/server/jdk1.8.0_341/
# 使用hbase自带的管理,否则要下载zk
export HBASE_MANAGES_ZK=true
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"
- hbase核心配置
vim hbase-site.xml
<configuration>
<!-- HBase数据在HDFS中的存放的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.88.128:8020/hbase</value>
</property>
<!-- Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- ZooKeeper的地址 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.88.128</value>
</property>
<!-- ZooKeeper快照的存储位置 -->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/export/server/hbase-2.4.11/zookeeper</value>
</property>
<!-- V2.1版本,在分布式情况下, 设置为false -->
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration>
- 配置环境变量
vim /etc/profile
export HBASE_HOME=/export/server/hbase-2.4.11
export PATH=$PATH:$HBASE_HOME/bin:$HBASE_HOME/sbin
编译环境变量,source /etc/profile
- 设置集群所在的网络地址
vim regionservers
192.168.88.128
192.168.88.129
192.168.88.130
- 进入lib目录,复制关键jar包
cp client-facing-thirdparty/htrace-core4-4.2.0-incubating.jar .
- 将hbase及环境变量文件同步到其他两个节点,执行编译
启动
start-hbase.sh
启动后,控制台会输出写到日志文件的路径,如果启动有什么问题,可以通过日志文件排查
使用jps命令,如果启动成功,node1会多出三个进程,分别是HQuorumPeer
、HMaster
、HRegionServer
。查看hdfs,发现根目录多出hbase
目录。在浏览器输入node1所在服务器地址加上16010端口,可查看hbase管理界面,如192.168.88.128:16010
,Region Servers也会显示相应的节点
问题记录
使用stop-hbase.sh关闭服务,发现关闭不了。查看日志,一直输出Waiting for dfs to exit safe mode...
hadoop处于安全模式,所以关闭不了。使用hadoop dfsadmin -safemode get
查看状态,确定处于ON模式,之后使用命令hadoop dfsadmin -safemode leave
关闭安全模式,再关闭hbase,就可以了
phoenix
说明
phoenix的版本要与hbase版本对应,如果对应不上,可能会有未知问题。本文使用版本为2.4.0。在进行配置之前,要先关闭hbase服务
配置
解压phoenix压缩包到任意目录,以/export/server/phoenix-2.4.0/
为例。解压完毕后,进入hbase的conf目录。
- 追加配置,以支持phoenix
vim hbase-site.xml
<!-- 支持HBase命名空间映射 -->
<property>
<name>phoenix.schema.isNamespaceMappingEnabled</name>
<value>true</value>
</property>
<!-- 支持索引预写日志编码 -->
<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
- 进入lib目录,复制关键jar包
cp ../../phoenix-2.4.0/phoenix-server-hbase-2.4-5.1.3.jar .
- 覆盖phoenix配置文件
cp hbase-site.xml ../../phoenix-2.4.0/bin/
- 将hbase-site.xml及新增jar包同步到其他两个节点
连接
首先启动hbase,然后进入phoenix的bin目录
./sqlline.py 172.168.88.128:2181
没有异常,且控制台显示sqlline version 1.9.0
,说明启动成功。浏览器查看hbase管理界面,发现SYSTEM命名空间下多了几张数据表,下图是新增的部分表
问题记录
连接zookeeper,发现sqlline一直卡住,或者一连接regionServers全挂了
确保:
hbase-site.xml
文件中,有配置ZooKeeper存储位置,且phoenix可访问该位置- hbase的lib目录有且仅有
phoenix-server-hbase-2.4-5.1.3.jar
这个jar包
启动hbase,报错
java.lang.AbstractMethodError: org.apache.phoenix.trace.PhoenixMetricsSink.init(Lorg/apache/commons/configuration/SubsetConfiguration;)V
首次启动hbase时,hdfs还没有hbase目录,这个时候还不能添加phoenix的jar包,配置文件也不能添加与phoenix有关的配置项。
不同版本可能报的异常不一样,但是如果与phoenix有关,大概率是这个问题