栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

七、Hadoop3.3.1 HA 高可用集群QJM (基于Zookeeper,NameNode高可用+Yarn高可用)

七、Hadoop3.3.1 HA 高可用集群QJM (基于Zookeeper,NameNode高可用+Yarn高可用)

文章目录
    • 前文
    • Hadoop3.3.1 HA 高可用集群的搭建
    • QJM 的 NameNode HA
    • Hadoop HA模式搭建(高可用)
      • 1、集群规划
      • 2、Zookeeper集群搭建:
      • 3、修改Hadoop集群配置文件
        • 修改 vim core-site.xml
        • 修改 hadoop-env.sh
        • 修改 hdfs-site.xml
        • workers
    • Yarn高可用
      • **修改 mapred-site.xml**
      • 修改 yarn-site.xml
    • 启动zookeeper集群
      • 在每台机器上启动:
      • 格式化namenode、zkfc
      • 启动hdfs
      • 尝试HA模式
      • 此时再次查看节点

前文
  • 一、CentOS7 hadoop3.3.1安装(单机分布式、伪分布式、分布式)
  • 二、JAVA API实现HDFS
  • 三、MapReduce编程实例
  • 四、Zookeeper3.7安装
  • 五、Zookeeper的Shell操作
  • 六、Java API操作zookeeper节点)
Hadoop3.3.1 HA 高可用集群的搭建

(基于Zookeeper,NameNode高可用+Yarn高可用)

QJM 的 NameNode HA

用Quorum Journal Manager或常规共享存储
QJM的NameNode HA

Hadoop HA模式搭建(高可用) 1、集群规划

一共三台虚拟机,分别为master、worker1、worker2;

namenode三台上都有,resourcemanager在worker1,woker2上。

masterwoker1worker2
NameNodeyesyesyes
DataNodenoyesyes
JournalNodeyesyesyes
NodeManagernoyesyes
ResourceManagernoyesyes
Zookeeperyesyesyes
ZKFCyesyesyes

因为没有重新创建虚拟机,是在原本的基础上修改。所以名称还是hadoop1,hadoop2,hadoop3

hadoop1 = master

hadoop2 = worker1

hadoop3 = worker2

2、Zookeeper集群搭建:

参考:四、Zookeeper3.7安装

3、修改Hadoop集群配置文件 修改 vim core-site.xml
vim core-site.xml

core-site.xml:



    
        fs.defaultFS
        hdfs://mycluster
    


    
        hadoop.tmp.dir
        /export/servers/data/hadoop/tmp
    


    
        hadoop.http.staticuser.user
        root
    


    
        ha.zookeeper.quorum
        hadoop1:2181,hadoop2:2181,hadoop3:2181
    
    
    
        ha.zookeeper.session-timeout.ms
        1000
        ms
    

上面指定 zookeeper 地址中的Hadoop1,hadoop2,hadoop3换成你自己机器的主机名(要先配置好主机名与 IP 的映射)或者 ip

修改 hadoop-env.sh
vim hadoop-env.sh

hadoop-env.sh

在使用集群管理脚本的时候,由于使用ssh进行远程登录时不会读取/etc/profile文件中的环境变量配置,所以使用ssh的时候java命令不会生效,因此需要在配置文件中显式配置jdk的绝对路径(如果各个节点的jdk路径不一样的话那hadoop-env.sh中应改成本机的JAVA_HOME)。
hadoop 3.x中对角色权限进行了严格限制,相比于hadoop 2.x要额外对角色的所属用户进行规定。
此处仅为搭建HDFS集群,如果涉及到YARN等内容的话应一并修改对应yarn-env.sh等文件中的配置
在脚本末尾添加以下内容:

export JAVA_HOME=/opt/jdk1.8.0_241
export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_ZKFC_USER="root"
export HDFS_JOURNALNODE_USER="root"
修改 hdfs-site.xml
vim hdfs-site.xml

hdfs-site.xml



    
    
        dfs.replication
        3
    

    
    
        dfs.namenode.name.dir
        /export/servers/data/hadoop/tmp/dfs/name
    
    
        dfs.datanode.data.dir
        /export/servers/data/hadoop/tmp/dfs/data
    

    
    
        dfs.webhdfs.enabled
        true
    

    
    
        dfs.nameservices
        mycluster
    

    
    
        dfs.ha.namenodes.mycluster
        nn1,nn2,nn3
    

    
    
        dfs.namenode.rpc-address.mycluster.nn1
        hadoop1:9000
    

    
    
        dfs.namenode.http-address.mycluster.nn1
        hadoop1:9870
    

    
    
        dfs.namenode.rpc-address.mycluster.nn2
        hadoop2:9000
    

    
    
        dfs.namenode.http-address.mycluster.nn2
        hadoop2:9870
    

    
    
        dfs.namenode.rpc-address.mycluster.nn3
        hadoop3:9000
    

    
    
        dfs.namenode.http-address.mycluster.nn3
        hadoop3:9870
    

    
    
        dfs.namenode.shared.edits.dir
        qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/mycluster
    

    
    
        dfs.journalnode.edits.dir
        /export/servers/data/hadoop/tmp/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
            shell(/bin/true)
        
    

    
    
        dfs.ha.fencing.ssh.private-key-files
        /root/.ssh/id_rsa
    

    
    
        dfs.ha.fencing.ssh.connect-timeout
        30000
    

    
        ha.failover-controller.cli-check.rpc-timeout.ms
        60000
    
    
    
    
    
        dfs.namenode.secondary.http-address
        hadoop3:9868
    
    


要创建journaldata文件夹

workers

在hadoop 2.x中这个文件叫slaves,配置所有datanode的主机地址,只需要把所有的datanode主机名填进去就好了

hadoop1
hadoop2
hadoop3
Yarn高可用
vim mapred-site.xml
修改 mapred-site.xml


        
        
                mapreduce.framework.name
                yarn
        

        
        
                mapreduce.jobhistory.address
                hadoop1:10020
        

        
        
                mapreduce.jobhistory.webapp.address
                hadoop1:19888
        

vim yarn-site.xml
修改 yarn-site.xml

    
    
        yarn.resourcemanager.ha.enabled
        true
    

    
    
        yarn.resourcemanager.cluster-id
        yrc
    

    
    
        yarn.resourcemanager.ha.rm-ids
        rm1,rm2
    

    
    
        yarn.resourcemanager.hostname.rm1
        hadoop2
    

    
        yarn.resourcemanager.hostname.rm2
        hadoop3
    

    
    
        yarn.resourcemanager.zk-address
        hadoop1:2181,hadoop2:2181,hadoop2:2181
    

    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    

    
        yarn.log-aggregation-enable
        true
    

    
        yarn.log-aggregation.retain-seconds
        86400
    

    
    
        yarn.resourcemanager.recovery.enabled
        true
    

    
    
        yarn.resourcemanager.store.class
        org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
    


都修改好了,就分发给其他集群节点
(在hadoop/etc路径下)
scp /export/servers/hadoop-3.3.1/etc/hadoop/* hadoop2:/export/servers/hadoop-3.3.1/etc/hadoop/

scp /export/servers/hadoop-3.3.1/etc/hadoop/* hadoop3:/export/servers/hadoop-3.3.1/etc/hadoop/

启动zookeeper集群 在每台机器上启动:
zkServer.sh start
zkServer.sh status

格式化namenode、zkfc

首先,在所有虚拟机上启动journalnode:

hdfs --daemon start journalnode

都启动完毕之后,在master(hadoop1)节点上,格式化namenode

hadoop namenode -format

因为之前搭建过完全分布式,所以格式化一次namenode

但是,集群中的datanode,namenode与/current/VERSION/中的CuluserID有关

所以再次格式化,并启动,其他两个节点同步格式化好的namenode并不冲突

formatZK同理

然后单独启动namenode:

hdfs namenode

然后,在另外两台机器上,同步格式化好的namenode:

hdfs namenode -bootstrapStandby

应该能从master上看到传输信息。

传输完成后,在master节点上,格式化zkfc:

hdfs zkfc -formatZK
启动hdfs

在master节点上,先启动dfs:

start-dfs.sh

然后启动yarn:

start-yarn.sh

启动mapreduce任务历史服务器:

mapred --daemon start historyserver

可以看到各个节点的进程启动情况:


如果datanode未启动
是版本号不一致产生的问题,那么我们就单独解决版本号的问题,将你格式化之后的NameNode的VERSION文件找到,然后将里面的clusterID进行复制,再找到DataNode的VERSION文件,将里面的clusterID进行替换,保存之后重启

尝试HA模式

首先看看各个namenode主机状态:

hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
hdfs haadmin -getServiceState nn3

可以看到,有两个standby,一个active。

在active的master节点上,kill掉namenode进程:

此时再次查看节点

可以看到,nn1已经切换为active,Hadoop 高可用集群基本搭建完成。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/602110.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号