hbase
与zookeeper
完全分布式集群搭建
auth : hahally time : 2019.11.29 版本 : ubuntu18 hadoop2.9.2 jdk1.8 hbase 前提 : hadoop集群已经搭建成功
配置说明
参考[`官网`](https://hbase.apache.org/book.html) zookeeper使用hbase自带的 配置文件位于hbase安装目录下的 /conf/
1. hbase-env.sh
1. HBase允许在conf/hbase-env.sh文件中进行设置JAVA_HOME
export JAVA_HOME=JDK安装路径 # whereis java命令查看java
2. HBASE_MANAGES_ZK=true #设为true让hbase管理zookeeper
2. hbase-site.xml
1. HBase的主要配置文件
2. 指定HBase和ZooKeeper写入数据的目录
3. hbase.rootdir配置为HDFS文件系统目录
4. hbase.cluster.distributed值设为true指定为完全分布式
5. hbase.zookeeper.quorum配置zookeeper节点主机或ip
6. hbase.zookeeper.property.dataDir为默认值以外的值,因为默认值将ZooKeeper持久数据保留在/tmp下,该值通常在系统重新启动时清除
*hbase.rootdir
*指定为/hbase
参考core-site.xml
指定的fs.defaultFS
若没有hbase目录则先创建
hadoop@master: hadoop fs -mkdir /hbase # 创建hdfs目录
hadoop@master: hadoop fs -ls / # 查看hdfs目录
3. regionservers
1. 删除包含的localhost
2. 列出所有主机名或ip
3. 当主服务器启动或停止时,此文件中列出的所有主机都将启动和停止其RegionServer进程
4. /bin/start-hbase.sh
1. 脚本启动命令
2. http://localhost:16010 查看 hbase web 界面
3. Master的16010和RegionServer的16030
5. 守护进程
1. HMaster 主备份服务器
2. HRegionServer region进程
3. HQuorumPeers 一个由HBase控制和启动的ZooKeeper实例
配置示例
官网下载合适版本的hbase
的tar包
1.解压缩安装
解压缩到 /usr/local/
目录下,并修改 hbase
目录的所有者为hadoop
hadoop@master: sudo tar -zxvf hbase-1.5.11-bin.tar.gz /usr/local/
hadoop@master: sudo chown -R hadoop /usr/local/hbase-1.3.6
2. 配置环境变量
hadoop@master: sudo vi ~/.bashrc
hadoop@master: source ~/.bashrc
~/.bashrc
export JAVA_HOME=/usr/local/jdk1.8.0_162 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export HADOOP_HOME=/usr/local/hadoop-2.7.5 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:/usr/local/hbase-1.3.6/bin export HBASE_HOME=/usr/local/hbase-1.3.6 export HBASE_CLASSPATH=/usr/local/hbase-1.3.6/lib/hbase-common-1.3.6.jar:/usr/local/hbase-1.3.6/lib/hbase-server-1.3.6.jar
3. hbase
zookeeper
配置
hadoop@master: sudo vi /usr/local/hbase-1.3.6/conf/hbase-site.xml
hadoop@master: sudo vi /usr/local/hbase-1.3.6/conf/regionservers
hadoop@master: sudo vi /usr/local/hbase-1.3.6/conf/hbase-env.sh
# 在hadoop 安装目录下
hadoop@master: sudo mkdir data
hadoop@master: sudo mkdir data/zookeeper
hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/hadoop-2.9.2/data/zookeeper</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>60000</value>
</property>
<property>
<name>hbase.master</name>
<value>master:60000</value>
</property>
</configuration>
regionservers
master
slave1
hbase-env.sh
···
export JAVA_HOME=/usr/local//usr/local/jdk1.8.0_162
···
export HBASE_MANAGES_ZK=true
···
HBASE_HEAPSIZE = 1G
···
**hdfs-site.xml
**加入下面内容
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>4096</value>
</property>
slave1节点配置与master相同
启动集群
hadoop@master: /usr/local/hadoop-2.9.2/sbin/start-dfs.sh
hadoop@master: /usr/local/hadoop-2.9.2/sbin/start-yarn.sh
hadoop@master: /usr/local/hbase-1.3.6/bin/start-hbase.sh
hadoop@master: jps
hadoop@master: hbase shell # 进入 shell 目录
运行错误及参考方法
进入hbase shell 中,出现错误,退出后,hmaster进程死掉
hbase(main):001:0> list
···
ERROR: Can't get master address from ZooKeeper; znode data == null
···
查看日志:hbase-hadoop-master-master.log
···
ERROR [Thread-24] master.HMaster: Failed to become active master
java.lang.IllegalStateException: The procedure WAL relies on the ability
to hsync for proper operation during component failures, but the underlying
filesystem does not support doing so. Please check the config value of
'hbase.procedure.store.wal.use.hsync' to set the desired level of robustness
and ensure the config value of 'hbase.wal.dir' points to a FileSystem mount
that can provide it.
···
解决方法参考:传送门
在hbase-site.xml中添加下面内容
<property>
<name>hbase.procedure.store.wal.use.hsync</name>
<value>true</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>