Hadoop高可用(HA)集群搭建

高可用(high availability,HA)指的是若当前工作中的机器宕机了,系统会自动处理异常,并将工作无缝地转移到其他备用机器上,以保证服务的高可靠性与可用性。

而Zookeeper是一个分布式协调服务,Zookeeper即可用来保证Hadoop集群的高可用性。通过zookeeper集群与Hadoop2.X中的两个NameNode节点之间的通信,保证集群中总有一个可用的NameNode(即active NameNode),从而实现双NameNode节点构成的NameNode HA,达到HDFS高可用性。同Zookeeper也可用来保证ResourceManager HA,即实现YARN高可用性。

一、系统文件配置

  1. 集群部署规划

  • NameNode和SecondaryNameNode不要安装在同一台服务器

  • ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode放在同一台机器上。

这里装了四台机器,ant151,ant152,ant153,ant154。这里的四台机器均已经安装了zookeeper。

zookeeper安装步骤见→zookeeper集群搭建

ant151

ant152

ant153

ant154

NameNode

NameNode

DataNode

DataNode

DataNode

DataNode

NodeManager

NodeManager

NodeManager

NodeManager

ResourceManager

ResourceManager

JournalNode

JournalNode

JournalNode

DFSZKFController

DFSZKFController

zk0

zk1

zk2

  1. 配置文件说明

Hadoop配置文件分为默认配置文件自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件。

core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml四个配置文件放在$HADOOP_HOME/etc/hadoop路径下。

3.配置集群

core-site.xml

    
        fs.defaultFS
        hdfs://gky
        逻辑名称,必须与hdfs-site.xml中的dfs.nameservices值保持一致
    
    
        hadoop.tmp.dir
        /opt/soft/hadoop313/tmpdata
        namenode上本地的hadoop临时文件夹
    
    
        hadoop.http.staticuser.user
        root
        默认用户
    
    
        hadoop.proxyuser.root.hosts
        *
        
    
    
        hadoop.proxyuser.root.groups
        *
        
    
    
        io.file.buffer.size
        131072
        读写文件的buffer大小为:128K
    
    
        ha.zookeeper.quorum
        ant151:2181,ant152:2181,ant153:2181
        
    
    
        ha.zookeeper.session-timeout.ms
        10000
        hadoop链接zookeeper的超时时长设置为10s
    

hdfs-site.xml

    
        dfs.replication
        3
        Hadoop中每一个block的备份数
    
    
        dfs.namenode.name.dir
        /opt/soft/hadoop313/data/dfs/name
        namenode上存储hdfs名字空间元数据目录
    
    
        dfs.datanode.data.dir
        /opt/soft/hadoop313/data/dfs/data
        datanode上数据块的物理存储位置
    
    
        dfs.namenode.secondary.http-address
        ant151:9869
        
    
    
        dfs.nameservices
        gky
        指定hdfs的nameservice,需要和core-site.xml中保持一致
    
    
        dfs.ha.namenodes.gky
        nn1,nn2
        gky为集群的逻辑名称,映射两个namenode逻辑名
    
    
        dfs.namenode.rpc-address.gky.nn1
        ant151:9000
        namenode1的RPC通信地址
    
    
        dfs.namenode.http-address.gky.nn1
        ant151:9870
        namenode1的http通信地址
    
    
    
        dfs.namenode.rpc-address.gky.nn2
        ant152:9000
        namenode2的RPC通信地址
    
    
        dfs.namenode.http-address.gky.nn2
        ant152:9870
        namenode2的http通信地址
    
    
        dfs.namenode.shared.edits.dir
        qjournal://ant151:8485;ant152:8485;ant153:8485/gky
        指定NameNode的edits元数据的共享存储位置(JournalNode列表)
    
    
        dfs.journalnode.edits.dir
        /opt/soft/hadoop313/data/journaldata
        指定JournalNode在本地磁盘存放数据的位置
        
    
    
        dfs.ha.automatic-failover.enabled
        true
        开启NameNode故障自动切换
    
    
        dfs.client.failover.proxy.provider.gky
        org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
        失败后自动切换的实现方式
    
    
        dfs.ha.fencing.methods
        sshfence
        防止脑裂的处理
    
    
        dfs.ha.fencing.ssh.private-key-files
        /root/.ssh/id_rsa
        使用sshfence隔离机制时,需要ssh免密登陆
        
    
        dfs.permissions.enabled
        false
        关闭HDFS操作权限验证
    
    
        dfs.image.transfer.bandwidthPerSec
        1048576
        
        
    
        dfs.block.scanner.volume.bytes.per.second
        1048576
        
    

mapred-site.xml

    
        mapreduce.framework.name
        yarn
        job执行框架: local, classic or yarn
        true
    
    
        mapreduce.application.classpath
        /opt/soft/hadoop313/etc/hadoop:/opt/soft/hadoop313/share/hadoop/common/lib/*:/opt/soft/hadoop313/share/hadoop/common/*:/opt/soft/hadoop313/share/hadoop/hdfs/*:/opt/soft/hadoop313/share/hadoop/hdfs/lib/*:/opt/soft/hadoop313/share/hadoop/mapreduce/*:/opt/soft/hadoop313/share/hadoop/mapreduce/lib/*:/opt/soft/hadoop313/share/hadoop/yarn/*:/opt/soft/hadoop313/share/hadoop/yarn/lib/*
    
    
        mapreduce.jobhistory.address
        ant151:10020
    
    
        mapreduce.jobhistory.webapp.address
        ant151:19888
    
    
    
        mapreduce.map.memory.mb
        1024
        map阶段的task工作内存
    
    
        mapreduce.reduce.memory.mb
        2048
        reduce阶段的task工作内存
    
    

yarn-site.xml

    
        yarn.resourcemanager.ha.enabled
        true
        开启resourcemanager高可用
    
    
        yarn.resourcemanager.cluster-id
        yrcabc
        指定yarn集群中的id
    
    
        yarn.resourcemanager.ha.rm-ids
        rm1,rm2
        指定resourcemanager的名字
    
    
        yarn.resourcemanager.hostname.rm1
        ant153
        设置rm1的名字
    
    
        yarn.resourcemanager.hostname.rm2
        ant154
        设置rm2的名字
    
    
        yarn.resourcemanager.webapp.address.rm1
        ant153:8088
        
    
    
        yarn.resourcemanager.webapp.address.rm2
        ant154:8088
        
        
    
        yarn.resourcemanager.zk-address
        ant151:2181,ant152:2181,ant153:2181
        指定zk集群地址
    
    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
        运行mapreduce程序必须配置的附属服务
    
    
        yarn.nodemanager.local-dirs
        /opt/soft/hadoop313/tmpdata/yarn/local
        nodemanager本地存储目录
    
    
        yarn.nodemanager.log-dirs
        /opt/soft/hadoop313/tmpdata/yarn/log
        nodemanager本地日志目录
    
    
    
        yarn.nodemanager.resource.memory-mb
        2048
        resource进程的工作内存
    
    
        yarn.nodemanager.resource.cpu-vcores
        2
        resource工作中所能使用机器的内核数
    
    
        yarn.scheduler.minimum-allocation-mb
        256
        
    
    
        yarn.log-aggregation-enable
        true
        开启日志聚集功能
    
    
        yarn.log-aggregation.retain-seconds
        86400
        日志保留多少秒
    
    
        yarn.nodemanager.vmem-check-enabled
        false
        
    
    
        yarn.application.classpath
        /opt/soft/hadoop313/etc/hadoop:/opt/soft/hadoop313/share/hadoop/common/lib/*:/opt/soft/hadoop313/share/hadoop/common/*:/opt/soft/hadoop313/share/hadoop/hdfs/*:/opt/soft/hadoop313/share/hadoop/hdfs/lib/*:/opt/soft/hadoop313/share/hadoop/mapreduce/*:/opt/soft/hadoop313/share/hadoop/mapreduce/lib/*:/opt/soft/hadoop313/share/hadoop/yarn/*:/opt/soft/hadoop313/share/hadoop/yarn/lib/*
        
    
    
        yarn.nodemanager.env-whitelist
        JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
        
    

hadoop-env.sh

export JAVA_HOME=/opt/soft/jdk180
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
Hadoop高可用(HA)集群搭建_第1张图片

workers

ant151
ant152
ant153
ant154

profile文件

  • vim /etc/profile

  • 启动hadoop集群,需要有java环境,这里的JAVA_HOME同样也要配置

# HADOOP_HOME
export HADOOP_HOME=/opt/soft/hadoop313
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib

# JAVA_HOME
export JAVA_HOME=/opt/soft/jdk180
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

二、SSH免密登录

Hadoop高可用(HA)集群搭建_第2张图片

  1. 在主机A上生成rsa密钥对

所有提示均按回车默认

[root@hadoop02 .ssh]# ssh-keygen -t rsa -P ''
Hadoop高可用(HA)集群搭建_第3张图片

在用户的家目录下回自动生成一个隐藏的文件夹“.ssh”,里面会有两个文件,分别是id_rsa和id_rsa.pub

  • id_rsa是本机的私钥,在使用ssh协议向其它主机传输数据前,主机会使用该私钥对数据进行加密;

  • id_rsa.pub是本机的公钥,因为ssh协议采用非对称加密法(公钥可以用来解密使用私钥进行加密的数据,同样,私钥也可以用来解密公钥进行加密的数据),所以主机一般将该公钥放到其它需要远程登录到的主机的ssh服务器中

Hadoop高可用(HA)集群搭建_第4张图片

  1. 将本地的ssh公钥上传到目标服务器

# 将公钥追加到authorized_keys文件中(免密登录自己)
[root@hadoop02 .ssh]# cat /root/.ssh/id_rsa.pub >> ./authorized_keys 
 
# 上传公钥到ant152、ant153中
[root@hadoop02 .ssh]# ssh-copy-id -i ./id_rsa.pub -p22 root@ant152
[root@hadoop02 .ssh]# ssh-copy-id -i ./id_rsa.pub -p22 root@ant153

  1. 重启ssh服务

[root@hadoop02 .ssh]# systemctl restart sshd

# 免密登录
[root@hadoop02 .ssh]# ssh ant153
Hadoop高可用(HA)集群搭建_第5张图片

三、集群首次启动

  1. 启动zk集群

可以直接运行脚本文件

Hadoop高可用(HA)集群搭建_第6张图片

代码:

[root@ant151 shell]# ./zkop.sh start 
Hadoop高可用(HA)集群搭建_第7张图片

  1. 启动ant151,ant152,ant153的journalnode服务:

[root@ant151 shell]# hdfs --daemon start journalnode
Hadoop高可用(HA)集群搭建_第8张图片

  1. 在ant151格式化 namenode:

[root@ant151 shell]# hdfs namenode -format

  1. 在ant151启动namenode服务

[root@ant151 shell]# hdfs --daemon start namenode

  1. 在ant152机器上同步namenode信息

[root@ant151 shell]# hdfs namenode -bootstrapStandby
Hadoop高可用(HA)集群搭建_第9张图片

[root@ant152 soft]# hdfs --daemon start namenode

查看namenode节点状态:hdfs haadmin -getServiceState nn1|nn2

[root@ant152 soft]# hdfs haadmin -getServiceState nn1

  1. 关闭所有dfs有关的服务

[root@ant151 soft]# stop-dfs.sh
Hadoop高可用(HA)集群搭建_第10张图片

  1. 格式化zk

[root@ant151 soft]# hdfs zkfc -formatZK
Hadoop高可用(HA)集群搭建_第11张图片

  1. 启动dfs

[root@ant151 soft]# start-dfs.sh
Hadoop高可用(HA)集群搭建_第12张图片

  1. 启动yarn

[root@ant151 soft]# start-yarn.sh
Hadoop高可用(HA)集群搭建_第13张图片

  1. 查看resourcemanager节点状态

[root@ant151 soft]# yarn rmadmin -getServiceState rm1

rm1状态:standby

Hadoop高可用(HA)集群搭建_第14张图片

rm2状态:active

Hadoop高可用(HA)集群搭建_第15张图片

当前进程状态:

Hadoop高可用(HA)集群搭建_第16张图片

kill掉active进程

Hadoop高可用(HA)集群搭建_第17张图片

尝试访问,无法链接

Hadoop高可用(HA)集群搭建_第18张图片

恢复ant152的namenode进程

Hadoop高可用(HA)集群搭建_第19张图片
Hadoop高可用(HA)集群搭建_第20张图片
Hadoop高可用(HA)集群搭建_第21张图片

四、集群启动/停止方式

  1. 各个模块分开启动/停止

整体启动/停止HDFS

start-dfs.sh/stop-dfs.sh

整体启动/停止YARN

start-yarn.sh/stop-yarn.sh

2.整体启动/停止yarn

分别启动/停止HDFS组件

hdfs --daemon start/stop namenode/datanode/secondarynamenode

启动/停止YARN

yarn --daemon start/stop resourcemanager/nodemanager
  1. Hadoop集群启停脚本:myhadoop.sh

  • 进入~/bin目录创建脚本:

  • vim hadoopstart.sh

#!/bin/bash

# 判断参数个数
if [ $# -lt 1 ]
then
        echo "Not Enough Arguement!"
        exit;
fi 

case $1 in
"start")
        echo " =================== 启动 hadoop集群 ==================="

        echo " --------------- 启动 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.4/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.1.4/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.4/bin/mapred --daemon start historyserver"
;;
"stop")
        echo " =================== 关闭 hadoop集群 ==================="

        echo " --------------- 关闭 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.4/bin/mapred --daemon stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.1.4/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.4/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error..."
;;
esac
  1. 查看所有服务器进程运行情况脚本

  • 进入~/bin目录下创建脚本:

  • vim jpsall.sh

#! /bin/bash
 
for host in hadoop102 hadoop103 hadoop104 hadoop100
do
 
    echo --------- $host ----------
 
    ssh $host jps
 
done

五、常用端口号及配置文件

  1. 常用端口号

hadoop3.x

  • HDFS NameNode 内部通常端口:8020/9000/9820

  • HDFS NameNode 用户查询端口:9870

  • Yarn查看任务运行情况:8088

  • 历史服务器:19888

hadoop2.x

  • HDFS NameNode 内部通常端口:8020/9000

  • HDFS NameNode 用户查询端口:50070

  • Yarn查看任务运行情况:8088

  • 历史服务器:19888

  1. 常用配置文件

3.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml workers

2.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml slaves

六、集群时间同步

同步时间的下面操作三台机都需要

  1. 安装ntpdate

[root@ant151 soft]# yum install -y ntpdate
  1. 定时更新时间

[root@ant151 soft]# crontab -e
每五分钟更新一次时间

ant151设置时间同步

其他两台节点与ant151同步更新时间

  1. 启动定时任务

[root@ant151 soft]# service crond start

你可能感兴趣的:(Hadoop,hadoop)