HBase 伪分布式搭建(使用外部ZK)

环境说明:
(1).JDK 1.8
(2).ZooKeeper 3.4.9
(3).Hadoop 3
(4).HBase 1.3.1

以上一到三,笔者已经完成,HBase伪分布式安装配置如下

  • 配置环境变量
# HBase Environment Variable
export HBASE_HOME=/home/hadoop/software/hbase
export PATH=$HBASE_HOME/bin:$PATH

配置hbase-env.sh

# hbase 安装目录下创建logs目录
export HBASE_LOG_DIR=${HBASE_HOME}/logs
# hbase 安装目录下创建pids目录
export HBASE_PID_DIR=${HBASE_HOME}/pids
# 使用外部zk,true表示使用hbase自带的zk
export HBASE_MANAGES_ZK=false
# 指定hadoop 目录
export HADOOP_HOME=/home/hadoop/software/hadoop
  • 配置hbase-site.xml
<configuration>
    <!-- 设置HRegionServers共享目录,用来持久化 HBase
         注意:hbase.rootdir 里面的 HDFS 地址是要跟 Hadoop 的 core-site.xml 里面的 fs.defaultFS 的 HDFS 的 IP 地址或者域名、端口必须一致
    -->
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://harvey:9000/hbase</value>
    </property>

    <!-- 此处必须为true,不然hbase仍用自带的zk,若启动了外部的zookeeper,会导致冲突,hbase启动不起来 -->
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>

    <!-- 本地文件系统的临时文件夹(/tmp会在重启时清除) -->
    <property>
        <name>hbase.tmp.dir</name>
        <value>/home/hadoop/software/hbase/tmp</value>
    </property>

    <!-- ZooKeeper的zoo.conf中的配置(dataDir所设定的位置),快照的存储位置 -->
    <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/home/hadoop/software/zookeeper/data</value>
    </property>

    <!-- ZooKeeper 会话超时。Hbase 把这个值传递给 zk 集群,向它推荐一个会话的最大超时时间 -->
    <property>
        <name>zookeeper.session.timeout</name>
        <value>120000</value>
    </property>

    <!-- 当 regionserver 遇到 ZooKeeper session expired , regionserver 将选择 restart 而不是 abort -->
    <property>
        <name>hbase.regionserver.restart.on.zk.expire</name>
        <value>true</value>
    </property>

    <!-- ZK位置(HBase使用外部ZK,hbase-env.sh中属性HBASE_MANAGES_ZK要设置为false),必须ZK数量必须为奇数,多个可用逗号分隔 -->
    <property>  
    <name>hbase.zookeeper.quorum</name>  
    <value>localhost</value>
    </property>  
</configuration>
  • 启动hbase
start-hbase.sh

查看进程

6160 HMaster
1780 SecondaryNameNode
2006 ResourceManager
2150 NodeManager
1449 NameNode
6954 Jps
1563 DataNode
2507 QuorumPeerMain
6319 HRegionServer
  • 访问HBase Web UI 界面(http:harvey:16010),harvey可替换为ip
    这里写图片描述

  • 访问Hadoop Web UI界面,可以看到多了一个hbase的目录
    这里写图片描述

错误记录及解决

  • HBase 启动不起来,启动失败

查看日志可以看到如下错误信息(HBase安装目录的log目录下)

Could not start ZK at requested port of 2181. ZK was started at port: 2182. Aborting as clients (e.g. shell) will not be able to find this ZK quorum.

错误原因:已经启动ZK,但是HBase并没有使用外部的ZK,导致冲突

解决方法:
1).hbase-env.sh 将 export HBASE_MANAGES_ZK 属性设置为false
2).hbase-site.xml 将 hbase.cluster.distributed 设置为true

<property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
</property>
  • HBase 访问HDFS拒绝连接

查看日志,错误信息如下
java.net.ConnectException: Call From harvey/192.168.191.65 to harvey:8020 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused

解决方法如下:hbase-site.xml 中 hbase.rootdir 配置错误,harvey可以替换为ip地址

错误:

<property>
    <name>hbase.rootdir</name>
    <value>hdfs://harvey/hbase</value>
</property>

正确:

<property>
    <name>hbase.rootdir</name>
    <value>hdfs://harvey:9000/hbase</value>
</property>

猜你喜欢

转载自blog.csdn.net/HG_Harvey/article/details/79594552