HBase(Hadoop3.1.2 HBase2.2.4) 伪分布式安装与配置

文章目录

  • 安装HBase
  • 配置Hbase
  • 测试
  • 错误解决

HBase的安装方式有单机模式、伪分布式、完全分布式。在此,我使用伪分布式。
HBase的安装和使用,可以参考 Apache HBase ™ Reference Guide。


使用伪分布式安装之前,你应该已经安装了:

  • JDK7+
    HBase(Hadoop3.1.2 HBase2.2.4) 伪分布式安装与配置_第1张图片
  • Hadoop
    Hadoop的安装和配置可以参考 Hadoop配置,Hadoop集群环境搭建(如果按照我的Hadoop配置的话,可以先不用搭建集群)

接下来就开始安装Hbase,我使用的是:

  • Centos6.8
  • Hadoop3.1.2
  • Hbase2.2.4

安装HBase

在安装之前,请确保 Hadoop 和 HBase 的版本对应关系:
HBase(Hadoop3.1.2 HBase2.2.4) 伪分布式安装与配置_第2张图片
HBase(Hadoop3.1.2 HBase2.2.4) 伪分布式安装与配置_第3张图片

详情请见 Basic Prerequisites

  • 进入 Quick Start - Standalone HBase
    HBase(Hadoop3.1.2 HBase2.2.4) 伪分布式安装与配置_第4张图片
    HBase(Hadoop3.1.2 HBase2.2.4) 伪分布式安装与配置_第5张图片
  • 找到自己对应的HBase版本
    HBase(Hadoop3.1.2 HBase2.2.4) 伪分布式安装与配置_第6张图片
    找到之后,下载压缩包
    HBase(Hadoop3.1.2 HBase2.2.4) 伪分布式安装与配置_第7张图片

直接下载的话,速度可能很慢,可以使用国内的镜像,这里给出两个作参考:

  1. http://mirrors.ustc.edu.cn/
  2. https://mirrors.tuna.tsinghua.edu.cn/apache

以上的版本可能不全,要使用其它国内镜像,请百度 Apache 国内镜像

下载完成之后解压即可,接下来就配置HBase。

配置Hbase

  • 配置HBase环境变量
    执行 vi /etc/profile,然后配置HBASE_HOME 和 PATH:
JAVA_HOME=/myfile/jdk1.8.0_231
HADOOP_HOME=/myfile/hadoop-3.1.2
HBASE_HOME=/myfile/hbase-2.2.4
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin

保存后执行 source /etc/profile 来刷新配置。

  • 修改 $HBASE_HOME/conf/ 目录下的 hbase-env.sh
    添加 JAVA_HOME,文件中自带了,只需要取消注释即可。
export JAVA_HOME=/myfile/jdk1.8.0_231

另外,看到网上很多人还在该文件配置了如下信息:

export HBASE_MANAGES_ZK=true

但是,官网给出的配置中并没有,所以我也没配(最后也能启动HBase)。

  • 修改 $HBASE_HOME/conf/ 目录下的 hbase-site.xml
<configuration>
	<property>
        <name>hbase.rootdirname>
        
        <value>hdfs://hmaster:9000/hbasevalue>
    property>
	<property>
  		<name>hbase.cluster.distributedname>
  		<value>truevalue>
	property>
	<property>
		<name>hbase.unsafe.stream.capability.enforcename>
		<value>falsevalue>
	property>
configuration>

到此,配置完成,简单的两步就搞定了。

测试

先执行 start-all.sh 启动Hadoop,使用 jps 查看线程,看Hadoop是否正常启动
HBase(Hadoop3.1.2 HBase2.2.4) 伪分布式安装与配置_第8张图片
然后执行 start-hbase.sh 启动hbase,使用 jps 查看线程,会发现多了3个进程 HMaster、HRegionServer 和 HQuorumPeer。
HBase(Hadoop3.1.2 HBase2.2.4) 伪分布式安装与配置_第9张图片
然后访问 16010 端口(HBase 1.0 之后,60010端口被修改为16010),能够成功访问的话,说明配置成功
HBase(Hadoop3.1.2 HBase2.2.4) 伪分布式安装与配置_第10张图片
如果启动过程中没有报错,且第一次使用 jps 后,进程存在,但是访问不了16010端口,那么,请再次使用 jps 查看进程,看是否有进程被关闭了,因为在某些情况下,HMaster进程会自动关闭,解决方式请见下面。

错误解决

  • 启动HBase时,发现 jar 包冲突
Class path contains multiple SLF4J bindings. SLF4J: 
Found binding in 
[jar:file:/myfile/hadoop-3.1.2/share/hadoop/common/lib/slf4j-log4j12-
1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: 
Found binding in 
[jar:file:/myfile/hbase-2.2.4/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.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]

意思就是说,在我的 /myfile/hadoop-3.1.2/share/hadoop/common/lib/ 和 /myfile/hbase-2.2.4/lib/client-facing-thirdparty/ 两个地方都发现了 slf4j-log4j12-1.7.25.jar ,jar 冲突了,解决办法就是删除其中的一个jar(根据错误提示的路径去删除即可)。

  • HMaster启动后不久被自动关闭
    查看日志(位置在 $HBASE_HOME/log/hbase-root-hmaster-xxx.log)可以发现如下内容:
ERROR [master/hmaster:16000:becomeActiveMaster] 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.

解决办法如下:
先执行 stop-hbase.sh 关闭HBase(Hadoop可以不用关闭),可能出现使用 stop-hbase.sh命令之后HRegionServer 进程依然存在,其实没影响,可以不用在意。然后在 $HBASE_HOME/conf/hbase-site.xml 中添加:

<property>
	<name>hbase.unsafe.stream.capability.enforcename>
	<value>falsevalue>
property>

其实在上面的配置中我已经添加了,这里只是来说一下这个问题。


如果进行了上面的配置还是无法配置成功,那么,可以尝试重新格式化Hadoop,即执行 hdfs namenode -format,前提是要先删除Hadoop安装目录下的logs、hdfs和tmp等多余(就是与原来刚解压后的文件进行对比,删除所有的多余的文件或文件夹)的文件夹(如果有的话),然后再重新启动。


如果经过上面的配置,能够成功访问16010端口,那么,HBase 伪分布式就已经配置成功。

你可能感兴趣的:(Linux)