Centos7安装hadoop + zookeeper + hbase HA集群


hadoop HA架构

hbase HA架构

官网下载安装包

hadoop下载 https://hadoop.apache.org/releases.html

JDK下载 http://jdk.java.net/java-se-ri/8-MR3

zookeeper下载 https://archive.apache.org/dist/zookeeper/

hbase下载 https://hbase.apache.org/downloads.html

Hbase与jdk版本兼容情况

Java Version HBase 1.4+ HBase 2.3+
JDK7 支持 不支持
JDK8 支持 支持
JDK11 不支持 初步支持

Hbase与hadoop版本兼容情况

  HBase-1.7.x HBase-2.3.x HBase-2.4.x
Hadoop-2.10.x 支持 支持 支持
Hadoop-3.1.0 不支持 不支持 不支持
Hadoop-3.1.1+ 不支持 支持 支持
Hadoop-3.2.x 不支持 支持 支持
Hadoop-3.3.x 不支持 支持 支持

主机规划

主机名 iP 服务
hbase1 192.168.139.31 NameNode/DataNode/zookeeper/zkfc/journalnode/NodeManager/HMaster/HRegionServer
hbase2 192.168.139.32 NameNode/DataNode/zookeeper/zkfc/journalnode/ResourceManager/NodeManager/HRegionServer
hbase3 192.168.139.33 DataNode/zookeeper/journalnode/ResourceManager/JobHistoryServer/NodeManager/HMaster/HRegionServer

关闭防火墙和selinux

 

配置主机名和hosts文件

 

配置主机时间同步

 

配置服务器间免密ssh登录

 

调整系统参数

在所有主机上进行操作

cat >>/etc/security/limits.conf <

解压安装组件

在所有主机上进行操作

tar -zxvf hadoop-3.3.1.tar.gz -C /opt/
tar -zxvf jdk-8u231-linux-x64.tar.gz -C /opt/
tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz -C /opt/
tar -zxvf hbase-2.4.9-bin.tar.gz -C /opt/

添加环境变量

在所有主机上进行操作

新建 /etc/profile.d/java_env.sh

#java
export JAVA_HOME=/opt/jdk1.8.0_231
export PATH=$PATH:$JAVA_HOME/bin

新建 /etc/profile.d/hadoop_env.sh

#Hadoop
export HADOOP_HOME=/opt/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

新建 /etc/profile.d/zk_env.sh

#zookeeper
export ZOOKEEPER_HOME=/opt/apache-zookeeper-3.6.3-bin
export PATH=$PATH:$ZOOKEEPER_HOME/bin

新建 /etc/profile.d/hbase_env.sh

#Hbase
export HBASE_HOME=/opt/module/hbase-2.4.9
export PATH=$PATH:$HBASE_HOME/bin
source /etc/profile

修改zookeeper配置文件

在所有主机上进行操作

cp /opt/apache-zookeeper-3.6.3-bin/conf/zoo_sample.cfg /opt/apache-zookeeper-3.6.3-bin/conf/zoo.cfg

修改配置文件 /opt/apache-zookeeper-3.6.3-bin/conf/zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/apache-zookeeper-3.6.3-bin/zkdata
# the port at which the clients will connect
clientPort=2181
# the cluster server list
server.1=hbase1:2888:3888
server.2=hbase2:2888:3888
server.3=hbase3:2888:3888

创建目录生产myid文件,本脚本在所有主机单独执行

for host in hbase1 hbase2 hbase3; do ssh $host "source /etc/profile; mkdir -p $ZOOKEEPER_HOME/zkdata; echo ${host: -1} > $ZOOKEEPER_HOME/zkdata1/myid"; done

创建zookeeper维护脚本

#!/bin/bash
if [ $# -lt 1 ]
then
        echo "No Args Input..."
        exit ;
fi
case $1 in
"start")
        echo " =================== 启动 zookeeper 集群 ==================="
        for host in hbase1 hbase2 hbase3
        do
          ssh $host "source /etc/profile; nohup /opt/apache-zookeeper-3.6.3-bin/bin/zkServer.sh start >/dev/null 2>&1 &"
          echo "$host zk is running"
        done
;;
"stop")
        echo " =================== 关闭 zookeeper 集群 ==================="
        for host in hbase1 hbase2 hbase3
        do
          ssh $host "source /etc/profile; nohup /opt/apache-zookeeper-3.6.3-bin/bin/zkServer.sh stop"
          echo "$host zk is stopping"
        done
;;
"kill")
        echo " =================== 关闭 zookeeper 集群 ==================="
        for host in hbase1 hbase2 hbase3
        do
          ssh $host "source /etc/profile;jps | grep QuorumPeerMain| cut -d ' ' -f 1 |xargs kill -s 9"
          echo "$host zk is stopping"
        done
;;
"status")
        echo " =================== 查看 zookeeper 集群 ==================="
        for host in hbase1 hbase2 hbase3
        do
          echo =============== $host ===============
          ssh $host "source /etc/profile; nohup /opt/apache-zookeeper-3.6.3-bin/bin/zkServer.sh status"
        done
;;
*)
        echo "Input Args Error..."
;;
esac

修改hadoop环境文件文件

在所有主机上进行操作

修改 /opt/hadoop-3.3.1/etc/hadoop/hadoop-env.sh ,添加:

export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export JAVA_HOME=/opt/jdk1.8.0_231

修改 /opt/hadoop-3.3.1/etc/hadoop/mapred-env.sh ,添加:

export JAVA_HOME=/opt/jdk1.8.0_231

修改 /opt/hadoop-3.3.1/etc/hadoop/yarn-env.sh ,添加:

export JAVA_HOME=/opt/jdk1.8.0_231

修改hadoop配置文件

在所有主机上进行操作

修改 /opt/hadoop-3.3.1/etc/hadoop/core-site.xml ,在 中添加内容


        
    
        fs.defaultFS
        hdfs://mycluster
    
    
    
        hadoop.tmp.dir
        /opt/hadoop-3.3.1/data/tmp
    
        
    
        hadoop.http.staticuser.user
        root
    
    
    
        ha.zookeeper.quorum
        hbase1:2181,hbase2:2181,hbase3:2181
    

修改 /opt/hadoop-3.3.1/etc/hadoop/hdfs-site.xml ,在 中添加内容


   
       dfs.replication
       2
   
   
        dfs.permissions.enabled
        false
   
   
   
       dfs.nameservices
       mycluster
   
   
   
        dfs.ha.namenodes.mycluster
        nn1,nn2
   
   
   
        dfs.namenode.rpc-address.mycluster.nn1
        hbase1:8020
   
   
        dfs.namenode.rpc-address.mycluster.nn2
        hbase2:8020
   
   
   
        dfs.namenode.http-address.mycluster.nn1
        hbase1:9870
   
   
        dfs.namenode.http-address.mycluster.nn2
        hbase2:9870
   
   
   
        dfs.namenode.shared.edits.dir
        qjournal://hbase1:8485;hbase2:8485;hbase3:8485/mycluster
   
   
   
        dfs.journalnode.edits.dir
        /opt/hadoop-3.3.1/journaldata
   
   
   
        dfs.ha.automatic-failover.enabled
        true
   
   
   
        dfs.client.failover.proxy.provider.mycluster
        org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
   
   
   
        dfs.ha.fencing.methods
        
                sshfence
        
   
   
   
        dfs.ha.fencing.ssh.private-key-files
        /root/.ssh/id_rsa
   
   
   
        dfs.ha.fencing.ssh.connect-timeout
        30000
   

修改 /opt/hadoop-3.3.1/etc/hadoop/yarn-site.xml ,在 中添加内容


   
   
       yarn.resourcemanager.ha.enabled
       true
   
   
   
       yarn.resourcemanager.cluster-id
       yrc
   
   
   
       yarn.resourcemanager.ha.rm-ids
       rm1,rm2
   
   
   
       yarn.resourcemanager.hostname.rm1
   hbase3
   
   
       yarn.resourcemanager.hostname.rm2
   hbase2
   
   
       yarn.resourcemanager.webapp.address.rm1
       hbase3:8088
   
   
       yarn.resourcemanager.webapp.address.rm2
       hbase2:8088
   
   
   
       yarn.resourcemanager.zk-address
       hbase1:2181,hbase2:2181,hbase3:2181
   
   
       yarn.nodemanager.aux-services
       mapreduce_shuffle
   
   
       yarn.log-aggregation-enable
       true
   
        
       yarn.log-aggregation.retain-seconds
       106800
   
   
   
      yarn.resourcemanager.recovery.enabled
      true
   
   
   
      yarn.resourcemanager.store.class
      org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
   

修改 /opt/hadoop-3.3.1/etc/hadoop/mapred-site.xml ,在 中添加内容


   
   
       mapreduce.framework.name
       yarn
   
   
        mapreduce.jobhistory.address
        hbase3:10020
   
   
        mapreduce.jobhistory.webapp.address
        hbase3:19888
   

修改 /opt/hadoop-3.3.1/etc/hadoop/workers

hbase1
hbase2
hbase3

启动journalnode

首先确保已启动zookeeper集群,在所有主机执行

hdfs --daemon start journalnode

格式化namenode

仅在hbase1执行

hdfs namenode -format

启动namenode

仅在hbase1执行

hdfs --daemon start namenode

同步元数据到

仅在hbase2执行

hdfs namenode -bootstrapStandby

检查hbase1和hbase2的 /opt/hadoop-3.3.1/data/dfs/name/current/VERSION 的文件内容,若一致则同步成功

格式化ZKFC

仅在hbase1上执行

hdfs zkfc -formatZK

启动启动HDFS

仅在hbase1上执行

start-dfs.sh

访问hbase1:9870,hbase2:9870验证

启动yarn

start-yarn.sh

访问hadoop web页面

http://192.168.139.31:9870/dfshealth.html

创建hadoop维护脚本

#!/bin/bash
if [ $# -lt 1 ]
then
        echo "No Args Input..."
        exit ;
fi
case $1 in
"start")
        echo " =================== 启动 hadoop 集群 ==================="
        echo " --------------- 启动 hdfs ---------------"
        ssh hbase1 "/opt/hadoop-3.3.1/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh hbase1 "/opt/hadoop-3.3.1/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh hbase3 "/opt/hadoop-3.3.1/bin/mapred --daemon start historyserver"
;;
"stop")
        echo " =================== 关闭 hadoop 集群 ==================="
        echo " --------------- 关闭 historyserver ---------------"
        ssh hbase3 "/opt/hadoop-3.3.1/bin/mapred --daemon stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh hbase1 "/opt/hadoop-3.3.1/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh hbase1 "/opt/hadoop-3.3.1/sbin/stop-dfs.sh"
;;
"status")
        echo " =================== 查看 hadoop 集群 ==================="
        for host in hbase1 hbase2 hbase3
        do
          echo =============== $host ===============
          ssh $host jps | grep -v Jps
        done
;;
*)
        echo "Input Args Error..."
;;
esac

修改hbase环境文件

在所有主机上进行操作

修改 /opt/hbase-2.4.9/conf/hbase-env.sh ,添加:

export JAVA_HOME="/opt/jdk1.8.0_231"
export HBASE_PID_DIR="/opt/hbase-2.4.9/"
export HBASE_MANAGES_ZK=false

修改hbase配置文件

在所有主机上进行操作

修改 /opt/hbase-2.4.9/conf/hbase-site.xml ,在 中添加内容


  
    hbase.cluster.distributed
    true
  
  
  
    hbase.rootdir
    hdfs://mycluster/hbase
  
  
  
    hbase.zookeeper.quorum
    hbase1:2181,hbase2:2181,hbase3:2181
  
  
  
    hbase.zookeeper.property.dataDir
    /opt/apache-zookeeper-3.6.3-bin
  
  
  
    hbase.zookeeper.property.clientPort
    2181
  
  
    hbase.tmp.dir
    /opt/hbase-2.4.9/tmp/
  
  
    hbase.unsafe.stream.capability.enforce
    false
  
  
    dfs.datanode.max.transfer.threads
    4096
  
  
  
    hbase.wal.provider
    filesystem
  

修改 /opt/hbase-2.4.9/conf/regionservers

hbase1
hbase2
hbase3

新建 /opt/hbase-2.4.9/conf/backup-masters

hbase3

将hadoop两个配置文件复制到hbase目录

cp /opt/hadoop-3.3.1/etc/hadoop/{core-site.xml,hdfs-site.xml} /opt/hbase-2.4.9/conf/

启动hbase

start-hbase.sh

访问hbase的web界面

http://192.168.139.31:16010/master-status

创建hbase维护脚本

#!/bin/bash
if [ $# -lt 1 ]
then
        echo "No Args Input..."
        exit ;
fi
case $1 in
"start")
        echo " =================== 启动 hbase 集群 ==================="
        ssh hbase1 "/opt/hbase-2.4.9/bin/start-hbase.sh"
;;
"stop")
        echo " =================== 关闭 hbase 集群 ==================="
        ssh hbase1 "/opt/hbase-2.4.9/bin/stop-hbase.sh"
;;
"status")
        echo " =================== 查看 hbase 集群 ==================="
        for host in hbase1 hbase2 hbase3
        do
          echo =============== $host ===============
          ssh $host jps | grep -v Jps
        done
;;
*)
        echo "Input Args Error..."
;;
esac