Hadoop3.x高可用集群,HDFS、Yarn集群


集群环境规划

将整个 ha 搭建完成后,集群将形成以下模样

hadoop101 hadoop102 hadoop103
NameNode NameNode NameNode
JournalNode JournalNode JournalNode
DataNode DataNode DataNode
Zookeeper Zookeeper Zookeeper
ZKFC ZKFC ZKFC
ResourceManager ResourceManager ResourceManager
NodeManager NodeManager NodeManager

1.配置 core-site.xml


    
    
        fs.defaultFS
        hdfs://mycluster
    
    
    
        hadoop.tmp.dir
        /opt/ha/hadoop-3.3.1/data
    
    
     
        hadoop.http.staticuser.user            
        hadoop 
    
    
    
        ha.zookeeper.quorum
        hadoop101:2181,hadoop102:2181,hadoop103:2181
    
    
    
        ipc.client.connect.max.retries
        20
    
    
    
        ipc.client.connect.retry.interval
        5000
    

2.配置 hdfs-site.xml


    
    
        dfs.namenode.name.dir
        file://${hadoop.tmp.dir}/name
    
    
    
        dfs.datanode.data.dir
        file://${hadoop.tmp.dir}/data
    
    
    
        dfs.journalnode.edits.dir
        ${hadoop.tmp.dir}/jn
    
    
    
        dfs.nameservices
        mycluster
    
    
    
        dfs.ha.namenodes.mycluster
        nn1,nn2,nn3
    
    
    
        dfs.namenode.rpc-address.mycluster.nn1
        hadoop101:8020
    
    
        dfs.namenode.rpc-address.mycluster.nn2
        hadoop102:8020
    
    
        dfs.namenode.rpc-address.mycluster.nn3
        hadoop103:8020
    
    
    
        dfs.namenode.http-address.mycluster.nn1
        hadoop101:9870
    
    
        dfs.namenode.http-address.mycluster.nn2
        hadoop102:9870
    
    
        dfs.namenode.http-address.mycluster.nn3
        hadoop103:9870
    
    
    
        dfs.namenode.shared.edits.dir
        qjournal://hadoop101:8485;hadoop102:8485;hadoop103:8485/mycluster
    
    
    
        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
        /home/usr1/.ssh/id_rsa
    
    
    
        dfs.ha.automatic-failover.enabled
        true
    

3.配置 yarn-site.xml


    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    
    
    
        yarn.resourcemanager.ha.enabled
        true
    
    
    
        yarn.resourcemanager.cluster-id
        cluster-yarn1
    
    
    
        yarn.resourcemanager.ha.rm-ids
        rm1,rm2,rm3
    
    
    
    
        yarn.resourcemanager.hostname.rm1
        hadoop101
    
    
    
        yarn.resourcemanager.webapp.address.rm1
        hadoop101:8088
    
    
    
        yarn.resourcemanager.address.rm1
        hadoop101:8032
    
    
    
        yarn.resourcemanager.scheduler.address.rm1
        hadoop101:8030
    
    
    
        yarn.resourcemanager.resource-tracker.address.rm1
        hadoop101:8031
    
    
    
    
        yarn.resourcemanager.hostname.rm2
        hadoop102
    
    
        yarn.resourcemanager.webapp.address.rm2
        hadoop102:8088
    
    
        yarn.resourcemanager.address.rm2
        hadoop102:8032
    
    
        yarn.resourcemanager.scheduler.address.rm2
        hadoop102:8030
    
    
        yarn.resourcemanager.resource-tracker.address.rm2
        hadoop102:8031
    
    
    
    
        yarn.resourcemanager.hostname.rm3
        hadoop103
    
    
    
        yarn.resourcemanager.webapp.address.rm3
        hadoop103:8088
    
    
    
        yarn.resourcemanager.address.rm3
        hadoop103:8032
    
    
    
        yarn.resourcemanager.scheduler.address.rm3
        hadoop103:8030
    
    
    
        yarn.resourcemanager.resource-tracker.address.rm3
        hadoop103:8031
    
    
    
        yarn.resourcemanager.zk-address
        hadoop101:2181,hadoop102:2181,hadoop103:2181
    
    
    
        yarn.resourcemanager.recovery.enabled
        true
    
    
    
        yarn.resourcemanager.store.class
        org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
    
    
    
        yarn.nodemanager.env-whitelist
        JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLAS
SPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
    

4.配置mapred-site.xml


    
    
        mapreduce.framework.name
        yarn
    

最后配置works

hadoop101
hadoop102
hadoop103

分发配置好的 hadoop 环境到其他节点

5.启动 HDFS-HA 集群

前提先启动zookeeper集群

1) 初始化 HA 在 Zookeeper 中状态:

[hadoop@hadoop101 ~]$ hdfs zkfc -formatZK  

2) 在各个 JournalNode 节点上,输入以下命令启动 journalnode 服务

[hadoop@hadoop101 ~]$ hdfs --daemon start journalnode
[hadoop@hadoop102 ~]$ hdfs --daemon start journalnode
[hadoop@hadoop103 ~]$ hdfs --daemon start journalnode

3)在[nn1]上,对其进行格式化, 并启动

[hadoop@hadoop101 ~]$ hdfs namenode -format
[hadoop@hadoop101 ~]$ hdfs --daemon start namenode

4)在[nn2]和[nn3]上,同步 nn1 的元数据信息

[hadoop@hadoop102 ~]$ hdfs namenode -bootstrapStandby
[hadoop@hadoop103 ~]$ hdfs namenode -bootstrapStandby

5)启动[nn2]和[nn3]

[hadoop@hadoop102 ~]$ hdfs --daemon start namenode
[hadoop@hadoop103 ~]$ hdfs --daemon start namenode  

6) 启动 HDFS 服务:

[hadoop@hadoop101 ~]$ start-dfs.sh  

7) 启动 YARN

[hadoop@hadoop101 ~]$ start-yarn.sh

8)查看hdfs是否 Active

[hadoop@hadoop101 ~]$ hdfs haadmin -getServiceState nn1  
  • ? 也可以去 zkCli.sh 客户端查看 Namenode 选举锁节点内容,去到zookeeper目录下:
[hadoop@hadoop101 zookeeper-3.5.7]$ bin/zkCli.sh

[zk: localhost:2181(CONNECTED) 0] get -s /hadoop-ha/mycluster/ActiveStandbyElectorLock

	myclusternn2	hadoop102 ?>(?>
cZxid = 0xd00000004
ctime = Tue Feb 15 20:18:04 CST 2022
mZxid = 0xd00000004
mtime = Tue Feb 15 20:18:04 CST 2022
pZxid = 0xd00000004
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x200002da9ac0000
dataLength = 33
numChildren = 0

9) 查看yarn服务状态

[hadoop@hadoop101 ~]$ yarn rmadmin -getServiceState rm1
  • 可以去 zkCli.sh 客户端查看 ResourceManager 选举锁节点内容:
[hadoop@hadoop101 zookeeper-3.5.7]$ bin/zkCli.sh

[zk: localhost:2181(CONNECTED) 0] get -s /yarn-leader-election/cluster-yarn1/ActiveStandbyElectorLock

cluster-yarn1rm3
cZxid = 0xe0000012c
ctime = Tue Feb 15 22:19:03 CST 2022
mZxid = 0xe0000012c
mtime = Tue Feb 15 22:19:03 CST 2022
pZxid = 0xe0000012c
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x20000014a5e0012
dataLength = 20
numChildren = 0