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/binsource /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