Hadoop 分布式下安装和配置 HBase(CentOS 7系统)

软件版本

电脑系统:macOS 10.14.6

虚拟机软件:Parallels Desktop15

Hadoop各节点节点操作系统:CentOS-7-x86_64-Minimal-1908.iso

CentOS 7 JDK版本:jdk1.8.0_162

Hadoop版本:hadoop-2.7.7

ZooKeeper版本:zookeeper-3.4.13

HBase版本:hbase-1.3.1


环境配置说明

电脑配置:MacBook Pro 13(8G + 256G)

三台 CentOS 7 配置:内存1G、硬盘13G(与Mac完全隔离的虚拟机)

三台 CentOS 7 的名字及IP:node1(10.211.55.18)、node2(10.211.55.19)、node3(10.211.55.20)

三台虚拟机的用户名:lyh

node为主结点、node2、node3为次节点

一定要注意:标注是操作哪台node主机,默认是node1


安装前提

安装好JDK、Hadoop

安装好ZooKeeper

参考文献:Hadoop分布式集群搭建Hadoop 分布式下安装和配置 ZooKeeper(CentOS 7系统)


下载并上传HBase安装包

  1. 下载HBase安装包:https://archive.apache.org/dist/hbase/1.3.1/hbase-1.3.1-bin.tar.gz

  2. 将下载好的HBase安装包上传到node1

    scp -r ~/Desktop/hbase-1.3.1-bin.tar.gz lyh@10.211.55.18:/app
    
  3. 进入node1,解压压缩包

    cd /app
    
    tar -zxvf hbase-1.3.1-bin.tar.gz
    
  4. 将hbase-1.3.1-bin 名字修改为 hbase-1.3.1

    mv hbase-1.3.1-bin hbase-1.3.1
    
  5. 创建 hbase 软链接

    ln -s hbase-1.3.1 hbase
    

安装并配置 HBase

配置Linux环境变量

vim /etc/profile

添加环境变量:

# HBASE
export HBASE_HOME=/app/hbase
export PATH=$HBASE_HOME/bin:$PATH

保存并退出,使环境变量生效:

source /etc/profile

集群配置

HBase 资源配置

配置 hbase-env.sh 文件

cd /app/hbase/conf
vim hbase-env.sh

修改如下:

  1. 配置文件中的JAVA_HOME路径

    export JAVA_HOME=/app/jdk
    
  2. 注释掉对jdk7的优化,因为这里使用的jdk是8版本

    # export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
    # export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
    
  3. 开启 manages zookeeper(不使用hbase自带的zk)

    export HBASE_MANAGES_ZK=false
    
  4. 指定PID路径

    # 自定义HBase PID位置
    export HBASE_PID_DIR=/app/pids
    

HBase 集群配置

向 hbase-site.xml 文件中添加配置

cd /app/hbase/conf
vim hbase-site.xml

添加如下内容:

<configuration>
        <!-- Hbase的数据保存在HDFS对应的目录下:注意端口,与HDFS的一样 -->
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://node1:8020/hbase</value>        
        </property>
        
        <!-- 是否是分布式环境 -->
        <property>              
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
        
        <!-- 配置ZK的地址,3个节点都启用ZooKeeper -->
        <property>
                <name>hbase.zookeeper.quorum</name>           
                <value>node1,node2,node3</value>
        </property>
        
        <!-- 冗余度 -->
        <property>
                <name>dfs.replication</name>
                <value>2</value>                              
        </property>
        
        <!-- 主节点和从节点允许的最大时间误差 -->
        <property>
                <name>hbase.master.maxclockskew</name>                                                                                                          
                <value>180000</value>
        </property>                                                                                                                                             

        <!-- zookeeper数据目录 -->
        <property>
                <name>hbase.zookeeper.property.dataDir</name>
                <value>/app/hbase/zookeeperData</value>
        </property>

        <!-- 手动配置管理web端口,默认是 16010 -->
        <property>
                <name>hbase.master.info.port</name>
                <value>60010</value>
        </property>
</configuration>

列出所有运行hbase的机器:修改regionservers文件

cd /app/hbase/conf
vim regionservers

删除原有内容,添加如下内容:

node1
node2
node3

指明备用的 master 节点:backup-masters(这个文件是不存在的,需要新建)

cd /app/hbase/conf
vim backup-masters

以这里为例,配置如下:

node2

HDFS 客户端配置

进入 /app/hadoop/etc/hadoop 文件夹,修改 hadoop-env.sh 中的配置(修改PID生成的位置,node1、node2、node3都要修改)

cd /app/hadoop/etc/hadoop
vim hadoop-env.sh

要被修改的内容是:

export HADOOP_PID_DIR=${HADOOP_PID_DIR}
export HADOOP_SECURE_DN_PID_DIR=${HADOOP_PID_DIR}

将其路径修改为上面创建的 pids 文件夹

export HADOOP_PID_DIR=/app/pids
export HADOOP_SECURE_DN_PID_DIR=/app/pids

修改yarn-env.sh (自定义PID生成位置,node1、node2、node3都要修改)

cd /app/hadoop/etc/hadoop
vim yarn-env.sh

添加如下内容:

export YARN_PID_DIR=/app/pids



如果您在 Hadoop 集群上进行了 HDFS 客户端配置的更改,比如将副本系数 dfs.replication 设置成 5,则必须使用以下方法之一来使 HBase 知道,否则 HBase 将依旧使用默认的副本系数 3 来创建文件。

解决方式有三种,如下面:

将 Hadoop 配置文件的位置信息添加到 hbase-env.shHBASE_CLASSPATH 属性

cd /app/hbase/conf
vim hbase-env.sh

配置信息如下

export HBASE_CLASSPATH=/app/hadoop/etc/hadoop

将 Hadoop 的 hdfs-site.xmlcore-site.xml 拷贝到 ${HBASE_HOME}/conf 目录下

cd /app/hadoop/etc/hadoop
cp core-site.xml /app/hbase-1.3.1/conf/
cp hdfs-site.xml /app/hbase-1.3.1/conf/

${HBASE_HOME}/conf 目录下,创建hdfs-site.xmlcore-site.xml 的软链接

cd /app/hadoop/etc/hadoop
ln -s core-site.xml /app/hbase/conf/core-site.xml
ln -s core-site.xml /app/hbase/conf/hdfs-site.xml

按照前面配置,创建对应目录

进入 hbase-1.3.1 文件夹,创建 zookeeperData 文件夹

进入 app 文件夹,创建pids文件夹,赋予权限,node1、node2、node3都需要创建pids文件

cd /app/hbase
mkdir zookeeperData
cd /app
mkdir pids
chown -R root:root pids

安装包分发

将 hbase-1.3.1 分发到到 node2、node3

cd /app
scp -r hbase-1.3.1 node2:/app
scp -r hbase-1.3.1 node3:/app

分别到 node2、node3 创建 hbase-1.3.1 的软链接

cd /app
ln -s hbase-1.3.1 hbsae

启动和关闭 HBase

HBase 的启动前需要先启动Hadoop和ZooKeeper

  1. 启动Hadoop

    node1 中输入:start-dfs.shstart-yarn.sh

  2. 启动ZooKeeper

    node1、node2、node3中都要输入:zkServer.sh start

    为了避免没启动ZooKeeper,可以查看zookeeper的启动状态:zkServer.sh status

  3. 启动HBase

    node1 中输入:start-hbase.sh


进入和退出 HBase Shell

  1. 进入HBase Shell:hbase shell
  2. 退出HBase Shell:exit

Web 端访问 HBase 页面:http://10.211.55.18:60010

访问的时候,可能会有如下提示(HBase集群中Master服务挂掉了):

The load balancer is not enabled which will eventually cause performance degradation in hbase as regions will not be distributed across all regionservers.The balancer is only expected to be disabled during rolling upgrade scenarios.

解决办法:进入HBase Shell,输入并执行 balance_switch true ,这个时候再访问 HBase Web端,就不会有该提示了。


关闭 HBase,在关闭 HBase之前,一定要先关闭Hadoop和ZooKeeper

  1. 关闭HBase

    node1 中输入:stop-hbase.sh

  2. 关闭ZooKeeper

    node1、node2、node3中都要输入:zkServer.sh stop

  3. 关闭Hadoop

    node1 中输入:stop-all.sh

参考文献

  1. HBase 系列(四)—— HBase 集群环境配置
  2. HBase运维系列:Regions In Transition