• Hadoop HA(高可用)部署


    Hadoop HA

    一、需要的软件

    1. 虚拟机管理软件:VMware15
    2. 系统:CentOS 7
    3. ssh软件:Xshell 7
    4. hadoop版本:2.7.7
    5. Jdk版本:jdk8
    6. zookeeper版本:3.4.5

    二、jdk等前序配置

    注:安装Hadoop HA(即HDFS和YARN高可用),首先要完成zookeeper的配置,然后再配置hdfs 和yarn 的高可用。

    使用超级管理员root登录。

    1、 配置静态网络,关闭防火墙,设置hosts映射关系

    (1)使用ping 命令检测网络是否连通

    ping www.baidu.com 
    
    • 1

    使用ctrl+c来停止命令
    如果网络没有打开,打开网络:

    service network restart
    
    • 1

    (2)修改ip地址,设置为静态网络。

    vi /etc/sysconfig/network-scripts/ifcfg-ens33
    
    • 1

    选择编辑ifcfg-ens33这个文件修改ip地址信息。

    1) 把BOOTPROTO=“hdcp” 改为BOOTPROTO=”static”静态网络ip
    2) 设置ONBOOT=“yes”
    3) 添加master IP地址为:IPADDR=192.168.100.10
    4) 添加子网掩码:NETMASK=255.255.255.0
    5) 添加网关: GATEWAY=192.168.100.2
    6) DNS1=192.168.100.1
    7) 重启网络:systemctl restart network
    8) 测试网络有没有连通:ping www.baidu.com

    (3)关闭防火墙

    #关闭防火墙
    systemctl stop firewalld
    #禁用防火墙
    systemctl disable firewalld
    #查看防火墙状态
    systemctl status firewalld
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (4)设置hosts映射关系
    备注:这里是把三个Linux的ip地址保存到三个虚拟机去,相当于我们自己在手机里面存别人的电话号码 一样的道理,这样相互之间就知道对应ip地址的机器是哪一台。所以这个操作也是要在三台虚拟机都要 进行的。给ip地址起名字,几个机器需要互相连通,这样在连接几台机器的时候只需要使用机器名就行,不需要使用ip地址。
    1) 编辑hosts文件:

    vi /etc/hosts
    
    • 1

    2) 进入编辑模式 i
    3)在最后一行添加

    192.168.100.10 master
    	192.168.100.20 slave1
    	192.168.100.30 slave2
    
    • 1
    • 2
    • 3

    关机,克隆出两台机器,分别为 slave1 、 slave2

    2、 设置机器主机名和网络,以及测试hosts映射是否成功。

    (1)设置slave1 和slave2 的网络

    vi /etc/sysconfig/network-scripts/ifcfg-ens33
    		slave1 的网络为 192.168.100.20/24 
    		slave2 的网络为 192.168.100.30/24
    
    • 1
    • 2
    • 3

    (2)设置master、slave1 和slave2 的主机名

    hostnamectl set-hostname master
    		hostnamectl set-hostname slave1
    		hostnamectl set-hostname slave2		
    	 
    
    • 1
    • 2
    • 3
    • 4

    (3)使用ping命令,看是否能够进行相互的连通。

    在master里面连通slave1和slave2。
    在slave1里面连通master和slave2。
    在slave2里面连通master和slave1。

    3、 配置SSH免密登录及时间同步

    (1)在各个机器(master、slave1、slave2)家目录执行

    ssh-keygen -t rsa
    
    • 1

    然后一直回车确认

    (2)ls -all :查看所有文件和文件夹,
    会在/root/.ssh产生id_rsa和id_rsa.pub文件
    查看.ssh目录可以看到id_rsa(私钥), id_rsa.pub (公钥)两个文件

    如何能在master中对s1和s2进行免密登录?
    需要把master的公钥放到s1和s2的authorized_keys文件里
    (执行以下步骤即可)

    (3)在master、slave1、slave2中分别执行
    (期间需要输入yes ,和对应机器的密码,看提示自行决定)

    ssh-copy-id slave1 
    ssh-copy-id slave2 
    ssh-copy-id master
    
    • 1
    • 2
    • 3

    (4)设置时间同步(按需设置)

    crontab -e
    0 1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
    
    • 1
    • 2

    4、 解压jdk包和Hadoop包并安装jdk

    在/opt目录下创建
    /module(存放解压或安装好的软件),
    /software(tar包等软件包)
    目录存放文件

    (1) 解压压缩文件:解压hadoop文件和jdk文件,
    输入命令时可以用tab键补全

    tar -zxvf /opt/software/hadoop-2.7.7.tar.gz –C /opt/module/hadoop
    tar -zxvf /opt/software/jdk-8u171-linux-x64.tar.gz –C /opt/module/jdk
    
    • 1
    • 2

    (2) 创建一个专门用于配置环境变量的文件

    vi /etc/profile.d/bigdata_env.sh
    
    • 1

    (3) 在bigdata_env.sh文件中设置java的环境变量

    export JAVA_HOME=/opt/module/jdk1.8.0_162
    export PATH=$JAVE_HOME/bin:$PATH
    
    • 1
    • 2

    (4) #使环境变量生效

    source /etc/profile
    #可以查看java的版本
    java –version
    
    • 1
    • 2
    • 3

    到此,master中的java配置已经结束了.

    (5) 在slave1和slave2中不用再去安装,直接分发就好了

    scp -r /opt/module/jdk1.8.0_162/ slave1:/opt/module
    scp -r /opt/module/jdk1.8.0_162/ slave2:/opt/module
    
    • 1
    • 2

    (6) 配置s1和s2的环境变量,参考步骤(3)(4)。

    三、zookeeper配置

    (1)集群节点规划

    master、slave1 和 slave2 三个节点上部署Zookeeper。

    (2)解压安装

    解压:
    
    • 1
    [root@master software]# tar -zxvf apache-zookeeper-3.4.5-bin.tar.gz -C /opt/module/
    [root@master module]# mv apache-zookeeper-3.4.5-bin/ zookeeper-3.4.5
    
    • 1
    • 2

    (3)配置服务器编号

    [root@master zookeeper-3.4.5]# mkdir zkData
    [root@master zookeeper-3.4.5]# cd zkData
    [root@master zkData]# vim myid
    	1
    
    • 1
    • 2
    • 3
    • 4

    (4)将zk分发到其他两节点

    将zookeeper-3.4.5分发到其他两个节点。

    [root@master module]# scp -r /opt/module/zookeeper-3.4.5 slave1:/opt/module
    [root@master module]# scp -r /opt/module/zookeeper-3.4.5 slave2:/opt/module
    
    • 1
    • 2

    修改其他两台的myid: 路径:

    cd /opt/module/zookeeper-3.4.5/zkData/myid
    [root@slave1 zkData]# vim myid
    2
    [root@slave2 zkData]# vim myid
    3
    
    • 1
    • 2
    • 3
    • 4
    • 5

    (5)配置zoo.cfg文件(/opt/module/zookeeper-3.4.5/conf)

    1.重命名文件:

    [root@master conf]# cp zoo_sample.cfg zoo.cfg
    
    • 1

    2.配置zoo.cfg:
    [root@master conf]# vim zoo.cfg

    #修改数据存储路径配置
     dataDir=/opt/module/zookeeper-3.4.5/zkData
     #添加配置
     server.1=master:2888:3888
     server.2=slave1:2888:3888
     server.3=slave2:2888:3888
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (6)向slave1和slave2同步zoo.cfg文件

    [root@master conf]# 
    scp -r /opt/module/zookeeper-3.4.5/conf/zoo.cfg slave1:/opt/module/zookeeper-3.4.5/conf
    [root@master conf]# 
    scp -r /opt/module/zookeeper-3.4.5/conf/zoo.cfg slave2:/opt/module/zookeeper-3.4.5/conf
    
    • 1
    • 2
    • 3
    • 4

    (7)环境变量:(三台全部配)

    [root@master conf]# vim /etc/profile.d/bigdata_env.sh

    export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.5
     export PATH=$PATH:$ZOOKEEPER_HOME/bin
    
    • 1
    • 2
    # 更新环境变量
     source /etc/profile
    
    • 1
    • 2

    (8)启动Zookeeper集群

    (1)分别启动Zookeeper (三台都要执行)

    [root@master zookeeper-3.4.5]# zkServer.sh start
    [root@slave1 zookeeper-3.4.5]# zkServer.sh start
    [root@slave2 zookeeper-3.4.5]# zkServer.sh start
    
    • 1
    • 2
    • 3

    查看状态(三台都要查看)

    zkServer.sh status
    
    • 1

    (9)配置zookeeper 成功效果

    三台节点中,两个follower。一个leader。

    jps:(三台)
    [root@slave2 module]# jps
    Jps
    QuorumPeerMain
    都有QuorumPeerMain
    停止zookeeper集群 (不用停,高可用会用)
    注意:可以不停,等会高可用还要用。

      zkServer.sh stop
      zkServer.sh stop
      zkServer.sh stop
    
    • 1
    • 2
    • 3

    四、HDFS HA配置

    1.解压hadoop文件

     tar -xzvf /opt/software/hadoop-2.7.7.tar.gz -C /opt/module/
     cd /opt/module/hadoop-2.7.7/etc/hadoop
    
    • 1
    • 2

    2.vim /opt/module/hadoop-2.7.7/etc/hadoop/core-site.xml

    注意:中文就不要复制了!!!

    
         
             fs.defaultFS
             hdfs://hdfscluster
      HDFS主入口,hadoopcluster仅是作为集群的逻辑名称,可随意更改但务必与hdfs-site.xml中dfs.nameservices值保持一致
         
         
             hadoop.tmp.dir
             /opt/module/hadoop-2.7.7/tmp
      默认的hadoop.tmp.dir指向的是/tmp目录,将导致namenode与datanode数据全都保存在易失目录中,此处进行修改
         
         
             hadoop.http.staticuser.user
             root
      用户角色配置,不配置此项会导致web页面报错
         
        
         
             ha.zookeeper.quorum
             master:2181,slave1:2181,slave2:2181
      zookeeper集群地址,集群以逗号进行分隔。
         
         
         
        hadoop.proxyuser.root.hosts
        对root用户不进行限制
        *
      
      
        hadoop.proxyuser.root.groups
        *
        对root群组不限制
      
     
    
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    3.vim hadoop-env.sh

     export JAVA_HOME=/opt/module/jdk1.8.0_162
     export HDFS_NAMENODE_USER="root"
     export HDFS_DATANODE_USER="root"
     export HDFS_ZKFC_USER="root"
     export HDFS_JOURNALNODE_USER="root"
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.vim hdfs-site.xml

    
              
            dfs.replication
            2
    		副本数配置
        
        
            dfs.nameservices
            hdfscluster
    		 集群名称,此值在接下来的配置中将多次出现务必注意同步修改(core中的相同) 
        
        
            dfs.ha.namenodes.hdfscluster
            nn1,nn2
    		所有的namenode列表,此处也只是逻辑名称,非namenode所在的主机名称。
        
        
            dfs.namenode.rpc-address.hdfscluster.nn1
            master:9820
    		 namenode之间用于RPC通信的地址,value填写namenode所在的主机地址,注意hadoopcluster与nn1要和上文的配置一致
        
        
            dfs.namenode.rpc-address.hdfscluster.nn2
            slave1:9820
        
        
            dfs.namenode.http-address.hdfscluster.nn1
            master:9870
    		namenode的web访问地址,该版本默认端口9870。建议50070
        
        
            dfs.namenode.http-address.hdfscluster.nn2
            slave1:9870
    		namenode的web访问地址,该版本默认端口9870。建议50070
        
        
            dfs.namenode.shared.edits.dir   
            qjournal://master:8485;slave1:8485;slave2:8485/hdfscluster
    		
    		journalnode主机地址,最少三台,默认端口8485,格式为 qjournal://jn1:port;jn2:port;jn3:port/${nameservices}
    		
        
        
            dfs.client.failover.proxy.provider.hdfscluster
            org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
    		故障时自动切换的实现类,照抄即可
        
        
          dfs.ha.fencing.methods
          sshfence
    	  故障时相互操作方式(namenode要切换active和standby),这里我们选ssh方式
        
         
        
          dfs.ha.fencing.ssh.private-key-files
          /root/.ssh/id_rsa
    	  修改为自己用户的ssh key存放地址
        
    
        
            dfs.journalnode.edits.dir
            /opt/module/hadoop-2.7.7/editsdir
    		namenode日志文件输出路径,即journalnode读取变更的位置
        
         
        
            dfs.ha.automatic-failover.enabled
            true
    		启用自动故障转移
            
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71

    5.配置workers(slaves)

    vim /opt/module/hadoop-2.7.7/etc/hadoop/workers

    master
     slave1
     slave2
    
    • 1
    • 2
    • 3

    6.配置启动停止脚本 start-dfs.sh,stop-dfs.sh

    vim /opt/module/hadoop-2.7.7/sbin/start-dfs.sh

    vim /opt/module/hadoop-2.7.7/sbin/stop-dfs.sh

     HDFS_NAMENODE_USER=root
     HDFS_DATANODE_USER=root
     HDFS_SECONDARYNAMENODE_USER=root
     YARN_RESOURCEMANAGER_USER=root
     YARN_NODEMANAGER_USER=root
    
    • 1
    • 2
    • 3
    • 4
    • 5

    7.配置环境变量(三台)

    vim /etc/profile.d/bigdata_env.sh

     #HADOOP_HOME
     export HADOOP_HOME=/opt/module/hadoop-2.7.7
     export HADOOP_MAPRED_HOME=$HADOOP_HOME
     export HADOOP_COMMON_HOME=$HADOOP_HOME
     export HADOOP_HDFS_HOME=$HADOOP_HOME
     export YARN_HOME=$HADOOP_HOME
     export PATH=$PATH:$HADOOP_HOME/bin
     export PATH=$PATH:$HADOOP_HOME/sbin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    使环境变量生效:

     source /etc/profile
    
    • 1

    8.同步文件至slave1,slave2中

    scp -r /opt/module/hadoop-2.7.7 slave1:/opt/module
    scp -r /opt/module/hadoop-2.7.7 slave2:/opt/module
    
    • 1
    • 2

    9.启动hdfs集群: 在master,slave1,slave2先启动journalnode

     hadoop-daemon.sh start journalnode
    
    • 1

    不要管WARNING!!!
    然后jps(三台)出现JournalNode 即可。

    10.在master上namenode格式化

     hdfs namenode -format
    
    • 1

    11.在master启动刚刚格式化的namenode:

    hadoop-daemon.sh start namenode
    
    • 1

    12.在slave1上执行。(目的是:除master的其他namenode节点上同步信息(备份namenode) 执行一次):

     hdfs namenode -bootstrapStandby
    
    • 1

    13.在启动备用namenode ,在slave1上:

     hadoop-daemon.sh start namenode
    
    • 1

    14.在master上格式化zk,执行一次

     hdfs zkfc -formatZK
    
    • 1

    15.在master,slave1上启动zkfc

    hadoop-daemon.sh start zkfc
    
    • 1

    16.启动HDFS集群

    在master上:

    start-dfs.sh
    
    • 1

    (实际上只启动datanode,为了方便不需要每个节点都去启动datanode)
    启动后master节点有

    DFSZKFailoverController
    NameNode
    JournalNode
    DataNode
    QuorumPeerMain
    
    • 1
    • 2
    • 3
    • 4
    • 5

    slave1节点上有

    NameNode
    DFSZKFailoverController
    DataNode
    QuorumPeerMain
     JournalNode
    
    • 1
    • 2
    • 3
    • 4
    • 5

    slave2节点上有

    DataNode
    QuorumPeerMain
    JournalNode
    
    • 1
    • 2
    • 3

    (可以不理会 下面 )
    任意一台机器进入 zkCli.sh
    get -s /hadoop-ha/hdfscluster/ActiveStandbyElectorLock
    在以后启动hdfs集群直接在master上使用start-dfs.sh即可
    会自动启动NameNode,DataNode,JournalNode,DFSZKFailoverController等节点
    注:若途中发现只有master上的datanode启动,slave1,slave2的datanode没启动,则是 slave1,slave2中的/opt/module/hadoop-2.7.7/tmp/dfs/data/current/VERSION与master中的clusterID不一致,修改即可。方法如下:
    scp -r /opt/module/hadoop-2.7.7/tmp/dfs/name/current/VERSION slave1:/opt/module/hadoop-2.7.7/tmp/dfs/name/current
    (可以不理会 上面)

    五、YARN HA配置

    master:

    1. vim /opt/module/hadoop-2.7.7/etc/hadoop/mapred-site.xml

    
        
        
            mapreduce.framework.name
            yarn
        
    
        
        
            mapreduce.jobhistory.address
            master:10020
        
        
        
        
            mapreduce.jobhistory.webapp.address
            master:19888
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    2.vim /opt/module/hadoop-2.7.7/etc/hadoop/yarn-site.xml

    
        
        
            yarn.resourcemanager.ha.enabled
            true
        
    
        
        
            yarn.resourcemanager.cluster-id
            yarncluster
        
        
        
        
            yarn.resourcemanager.ha.rm-ids
            rm1,rm2
        
        
        
        
            yarn.resourcemanager.hostname.rm1
            master
        
        
        
            yarn.resourcemanager.hostname.rm2
            slave1
        
        
        
        
            yarn.resourcemanager.zk-address
            master:2181,slave1:2181,slave2: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
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    3.vim yarn-env.sh

    export JAVA_HOME=/opt/module/jdk1.8.0_162
    
    • 1

    4.修改start-yarn.sh,stop-yarn.sh文件

    vim /opt/module/hadoop-2.7.7/sbin/start-yarn.sh
    vim /opt/module/hadoop-2.7.7/sbin/stop-yarn.sh

    YARN_RESOURCEMANAGER_USER=root
    HADOOP_SECURE_DN_USER=root
    YARN_NODEMANAGER_USER=root
    
    • 1
    • 2
    • 3

    5.同步配置文件

    scp -r  /opt/module/hadoop-2.7.7/etc/hadoop/mapred-site.xml slave1:/opt/module/hadoop-2.7.7/etc/hadoop
    scp -r  /opt/module/hadoop-2.7.7/etc/hadoop/mapred-site.xml slave2:/opt/module/hadoop-2.7.7/etc/hadoop
    
    scp -r  /opt/module/hadoop-2.7.7/etc/hadoop/yarn-site.xml slave1:/opt/module/hadoop-2.7.7/etc/hadoop
    scp -r  /opt/module/hadoop-2.7.7/etc/hadoop/yarn-site.xml slave2:/opt/module/hadoop-2.7.7/etc/hadoop
    
    scp -r /opt/module/hadoop-2.7.7/etc/hadoop/yarn-env.sh slave1:/opt/module/hadoop-2.7.7/etc/hadoop
    scp -r /opt/module/hadoop-2.7.7/etc/hadoop/yarn-env.sh slave2:/opt/module/hadoop-2.7.7/etc/hadoop
    
    scp -r /opt/module/hadoop-2.7.7/sbin/start-yarn.sh slave1:/opt/module/hadoop-2.7.7/sbin
    scp -r /opt/module/hadoop-2.7.7/sbin/start-yarn.sh slave2:/opt/module/hadoop-2.7.7/sbin
    
    scp -r /opt/module/hadoop-2.7.7/sbin/stop-yarn.sh slave1:/opt/module/hadoop-2.7.7/sbin
    scp -r /opt/module/hadoop-2.7.7/sbin/stop-yarn.sh slave2:/opt/module/hadoop-2.7.7/sbin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    6.在master上启动yarn集群

    start-yarn.sh
    
    • 1

    注:后续启动yarn集群直接使用
    start-dfs.sh即可,会自动启动ResourceManager,NodeManager等节点
    注意:如果执行完上述命令,通过jps 发现slave1没有ResourceManager 则在slave1上执行下面命令:

    yarn-daemon.sh start resourcemanager
    
    • 1

    yarn高可用验证:
    启动在master上有

    ResourceManager
    NodeManager
    
    • 1
    • 2

    在slave1上有

    ResourceManager
    NodeManager
    
    • 1
    • 2

    在slave2上有

    NodeManager
    
    • 1

    HDFS HA和YARN HA若都成功,则
    master与slave1上:

    NameNode
    JournalNode
    NodeManager
    ResourceManager
    DataNode
    DFSZKFailoverController
    QuorumPeerMain
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    slave2上有

    NodeManager
    JournalNode
    DataNode
    QuorumPeerMain
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    期待重磅升级的梅李大梦想城亲子游乐园!第三代黄桥大梦想城先让你一饱眼福!
    分库分表及高可用搭建
    vue3使用router.push()页面跳转后,该页面不刷新问题
    前端培训技术Services 平台元素
    WiFi蓝牙模块促进传统零售数字化转型:智能零售体验再升级
    视图、存储过程、触发器
    通信达交易接口的http协议
    HTML+CSS+JS+Django 实现前后端分离的科学计算器、利率计算器(附全部代码在gitcode链接)
    windows下在cmd和git bash中执行bash download.sh失败
    RabbitMQ学习笔记——消息转化器
  • 原文地址:https://blog.csdn.net/weixin_52626164/article/details/126269317