Hadoop高可用集群部署 hadoop高可用集群搭建图
创始人
2025-07-05 20:11:35
0

背景

生产中Hadoop分布式集群中可能存在着单点故障问题,如果Namenode宕机或是软硬件升级,集群将无法使用,所以进行搭建高可用的来消除单点故障。

Hadoop介绍

Hadoop集群一般为一个NameNode和ResourceManager,但在实际生产环境中,若恰好具有NameNode和ResourceManager的节点出现故障,那么整个Hadoop集群将会崩溃,这是因为在HDFS中NameNode是系统的核心节点,ResourceManager负责整个系统的资源管理和分配。

为了解决单点故障问题,在Hadoop2后中引入了高可用机制,支持NameNode和ResourceManager一个主节点和一个备用节点,而在Hadoop3中继续对其进行了优化和提升,它支持一个主节点和多个备用节点。所谓高可用(High Availability, HA)就是7*24 小时不中断服务,消除单点故障。

Hadoop HA严格来说应该分成各个组件的HA机制:HDFS的HA和YARN的HA,可以通过配置多个NameNode和ResourceManager(Active/Standby)实现在集群中的热备来解决上述问题。

环境准备:

图片图片

节点相关进程如下:

图片图片

  • 操作系统:centos8
  • 内存:4G
  • Java 版本:jdk8

HDFS和YARN HA集群搭建

3.1 下载hadoop安装包

官网https://hadoop.apache.org/下载hadoop 3.3.0安装包解压至/usr/local下3台机器需修改的配置文件目录为/usr/local/hadoop/etc/hadoop下。

3.2  hadoop.env

export JAVA_HOME=/usr/local/jdk #配置jdk路径
#添加两行
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root

3.3 core-site.xml







fs.defaultFS
hdfs://ns



hadoop.tmp.dir
/usr/local/hadoop/tmp



dfs.journalnode.edits.dir
/usr/local/hadoop/tmp/jn



ha.zookeeper.quorum
hadoop:2181,k8s-2:2181,k8s-3:2181

3.4 hdfs-site.xml





    
        dfs.replication
        3
    
    
        dfs.namenode.name.dir
        /usr/local/hadoop/dfs/name
    
    
        dfs.datanode.data.dir
        /usr/local/hadoop/dfs/data
    
    
        dfs.journalnode.edits.dir
        /usr/local/hadoop/dfs/journalnode
        The path where the JournalNode daemon will store its local state.
    
    
        dfs.nameservices
        ns
        The logical name for this new nameservice.
    
    
        dfs.ha.namenodes.ns
        nn1,nn2,nn3
        Unique identifiers for each NameNode in the nameservice.
    
    
        dfs.namenode.rpc-address.ns.nn1
        hadoop:8020
        The fully-qualified RPC address for nn1 to listen on.
    
    
        dfs.namenode.rpc-address.ns.nn2
        k8s-2:8020
        The fully-qualified RPC address for nn2 to listen on.
    
    
        dfs.namenode.rpc-address.ns.nn3
        k8s-3:8020
        The fully-qualified RPC address for nn3 to listen on.
    
    
        dfs.namenode.http-address.ns.nn1
        hadoop:9870
        The fully-qualified HTTP address for nn1 to listen on.
    
    
        dfs.namenode.http-address.ns.nn2
        k8s-2:9870
        The fully-qualified HTTP address for nn2 to listen on.
    
    
        dfs.namenode.http-address.ns.nn3
        k8s-3:9870
        The fully-qualified HTTP address for nn3 to listen on.
    
    
        dfs.namenode.shared.edits.dir
        qjournal://hadoop:8485;k8s-3:8485;k8s-2:8485/ns
        The URI which identifies the group of JNs where the NameNodes will write/read edits.
    
    
        dfs.client.failover.proxy.provider.ns
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
        The Java class that HDFS clients use to contact the Active NameNode.
    
    
        dfs.ha.fencing.methods
        
            sshfence
            shell(/bin/true)
        
        
            A list of scripts or Java classes which will be used to fence the Active NameNode during a failover.
            sshfence - SSH to the Active NameNode and kill the process
            shell - run an arbitrary shell command to fence the Active NameNode
        
    
    
        dfs.ha.fencing.ssh.private-key-files
        /root/.ssh/id_rsa
        Set SSH private key file.
    
    
        dfs.ha.automatic-failover.enabled
        true
        Automatic failover.
    

3.5 mapred-site.xml







mapreduce.framework.name
yarn


yarn.app.mapreduce.am.env
HADOOP_MAPRED_HOME=/usr/local/hadoop


mapreduce.map.env
HADOOP_MAPRED_HOME=/usr/local/hadoop


mapreduce.reduce.env
HADOOP_MAPRED_HOME=/usr/local/hadoop

3.6 yarn-site.xml





    yarn.resourcemanager.ha.enabled
    true
    Enable RM HA.


    yarn.resourcemanager.cluster-id
    yrc
    Identifies the cluster.


    yarn.resourcemanager.ha.rm-ids
    rm1,rm2,rm3
    List of logical IDs for the RMs. e.g., "rm1,rm2".


    yarn.resourcemanager.hostname.rm1
    hadoop
    Set rm1 service addresses.


    yarn.resourcemanager.hostname.rm2
    k8s-2
    Set rm2 service addresses.


    yarn.resourcemanager.hostname.rm3
    k8s-3
    Set rm3 service addresses.


    yarn.resourcemanager.webapp.address.rm1
    hadoop:8088
    Set rm1 web application addresses.


    yarn.resourcemanager.webapp.address.rm2
    k8s-2:8088
    Set rm2 web application addresses.


    yarn.resourcemanager.webapp.address.rm3
    k8s-3:8088
    Set rm3 web application addresses.


    hadoop.zk.address
    hadoop:2181,k8s-2:2181,k8s-3:2181
    Address of the ZK-quorum.

3.7 workers

hadoop
k8s-2
k8s-3

安装zookeeper

版本:zookeeper-3.6.4

通过https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.4/apache-zookeeper-3.6.4-bin.tar.gz 下载安装包,3台机器进行解压配置安装。

echo "1" > /data/zookeeperdata/myid #不同机器id不同

zoo.cfg配置如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeperdata #数据目录
dataLogDir=/data/zookeeperdata/logs #日志目录
clientPort=2181 #端口
server.1=192.xxx.xxx.128:2888:3888
server.2=192.xxx.xxx.132:2888:3888
server.3=192.xxx.xxx.131:2888:3888

环境变量配置

vi /etc/profile

export JAVA_HOME=/usr/local/jdk
export HAD00P_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_CLASSPATH=`hadoop classpath`
source /etc/profile

启动集群

在所有节点上使用rm -rf /usr/local/hadoop/dfs命令,删除之前创建的存储路径,同时在master节点上执行mkdir -p /usr/local/hadoop/dfs/name /usr/local/hadoop/dfs/data /usr/local/hadoop/dfs/journalnode,再次创建存储路径。

在所有节点上使用rm -rf /usr/local/hadoop/tmp /usr/local/hadoop/logs && mkdir -p /usr/local/hadoop/tmp /usr/local/hadoop/logs命令,重置临时路径和日志信息。

通过以上步骤,Hadoop HA集群就配置完成了,当第一次启动HA集群时需要依次执行以下命令:

$ZOOKEEPER_HOME/bin/zkServer.sh start # 开启Zookeeper进程(所有节点上执行)
$HADOOP_HOME/bin/hdfs --daemon start journalnode # 开启监控NameNode的管理日志的JournalNode进程(所有节点上执行)
$HADOOP_HOME/bin/hdfs namenode -format # 命令格式化NameNode(在master节点上执行)
scp -r /usr/local/hadoop/dfs k8s-2:/usr/local/hadoop  # 将格式化后的目录复制到slave1中(在master节点上执行)
scp -r /usr/local/hadoop/dfs k8s-3:/usr/local/hadoop   # 将格式化后的目录复制到slave2中(在master节点上执行)
$HADOOP_HOME/bin/hdfs zkfc -formatZK # 格式化Zookeeper Failover Controllers(在master节点上执行)
start-dfs.sh&&start-yarn.sh # 启动HDFS和Yarn集群(在master节点上执行)

若不是第一次启动HA集群(常规启动HA集群),则只需要依次执行以下命令:

$ZOOKEEPER_HOME/bin/zkServer.sh start    # 开启Zookeeper进程(所有节点上执行)
start-all.sh或者$HADOOP_HOME/sbin/start-dfs.sh && $HADOOP_HOME/sbin/start-yarn.sh # 启动HDFS和Yarn集群(在master节点上执行)

启动完成后每个节点使用jps命令会出现NameNode、DataNode、ResourceManager、NodeManager、JournalNode、DFSZKFailoverController、QuorumPeerMain和Jps 8个进程。

图片图片

图片图片

通过页面访问查看:

http://192.xxx.xxx.128:9870/

图片图片

http://192.xxx.xxx.128:8088/cluster/nodes

图片图片

hdfs HA验证

6.1 查看各个节点NameNode状态

图片图片

6.2 验证hdfs的高可用

在开启HA集群并成功启动的情况下,在master节点中使用hdfs haadmin -getAllServiceState命令查看各个节点NameNode状态,接下来停止active状态节点的NameNode进程。

图片图片

Namenode active自动跳转其他节点,集群仍可用。

图片图片

图片图片

随后再启动该节点NameNode进程,最后再次查看状态,可以发现HDFS HA是正常的,并且没有发生抢占。

图片图片

验证yarn 高可用

在master节点中使用yarn rmadmin -getAllServiceState命令查看各个节点ResourceManager状态,接下来停止active状态节点的ResourceManage进程,ResourceManage active自动跳转到其他节点,集群仍可用,随后再启动该节点ResourceManager进程,最后再次查看状态,Failed状态恢复为standby。

图片图片

若要关闭集群可以master使用$HADOOP_HOME/sbin/stop-yarn.sh && $HADOOP_HOME/sbin/stop-dfs.sh命令或者stop-all.sh 即可关闭hadoop集群,然后关闭zookeeper,三台机器分别执行/data/apache-zookeeper-3.6.4-bin/bin/zkServer.sh  stop。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...