美文网首页
Hadoop平台搭建-集群部署-HA

Hadoop平台搭建-集群部署-HA

作者: CoderInsight | 来源:发表于2022-08-07 18:08 被阅读0次

    一.搭建HadoopHA

    HDFS_HA架构信息.png

    0.更改主机名

    # 新建的虚拟机,可以更改为与文档中相同的主机名
    $ hostnamectl set-hostname master
    $ hostnamectl set-hostname slave1
    $ hostnamectl set-hostname slave2
    
    # 如果需要更改网卡的配置,只需需要做如下修改(在本文档中是使用的dhcp获取的ip,所以未做修改)
    # 如果在虚拟机中,对应的ip、子网掩码、网关等信息可以虚拟网络编辑器中查看(注意网关的配置要在"虚拟网络编辑器"中的"更改设置"里的"Nat设置里查看")
    $ vi /etc/sysconfig/network-scripts/ifcfg-ens33 
    
    # 修改如下配置项
    BOOTPROTO="static"
    # 添加如下配置项
    IPADDR=192.168.73.100
    NETMASK=255.255.255.0
    GATEWAY=192.168.73.2
    DNS1=8.8.8.8
    

    1.ssh免密登录

    (1),生成秘钥(群发)

    $ ssh-keygen
    
    在输入命令之后,会提示你选择公钥密码、存储位置等
    如无特殊需求,比如公钥密码、存储位置等。这里可以直接回车下一步
    秘钥即成功生成在"~/.ssh/"文件夹内
    

    (2),配置hosts

    # 打开配置文件目录,
    $ vi /etc/hosts
    # 根据ip信息修改为以下内容
    192.168.204.152 master
    192.168.204.153 master2
    192.168.204.154 slave
    # 在每台服务器中都要配置hosts,所以在每台服务器中都执行
    

    (3),采用追加的方式添加公钥(群发)

    # 第一台主机:
    $ ssh-copy-id master
    yes
    000000(输入设置的密码)
    # 第二台主机:
    $ ssh-copy-id master2
    yes
    000000(输入设置的密码)
    # 第三台主机(在此时注意一点的是,这里做输入的时候其他两台主机仍然是第一次连接所以需要先选中yes,在输入密码):
    $ ssh-copy-id slave
    yes
    000000(输入设置的密码) 
    

    2.关闭防火墙与SeLinux

    # 1,关闭防火墙:
    systemctl stop firewalld
    # 设置开机禁用防火墙:
    systemctl disable firewalld.service
    # 检查防火墙状态:
    systemctl status firewalld 
    
    # 2,关闭SeLinux
    vim /etc/selinux/config 
    # 修改配置项
    SELINUX=disabled
    

    3.jdk的安装与配置

    (1).解压jdk组件

    # 使用xftp将组件上传到/soft目录下
    mkdir /soft
    # 新建文件目录:/usr/java
    mkdir -p /usr/java/
    # 进入soft目录下解压jdk
    cd /soft
    tar -zxvf jdk-8u77-linux-x64.tar.gz -C /usr/java/
    

    (2).配置环境变量

    # 在相应配置文件中追加以下内容
    vi /etc/profile
    export JAVA_HOME=/usr/java/jdk1.8.0_77
    export PATH=$PATH:$JAVA_HOME/bin
    # 设置当前环境变量立即生效
    source /etc/profile
    

    (3).将jdk与环境变量同步到其他两台服务器

    scp -r /usr/java/ master2:/usr/
    scp /etc/profile master2:/etc/
    
    scp -r /usr/java/ slave:/usr/
    scp /etc/profile slave:/etc/
    # 在同步文件之后,需要更新配置文件
    source /etc/profile
    

    4.Zookeeper安装与配置

    (1).解压Zookeeper组件

    # 组件使用xftp上传到/soft目录下
    # 在三台机器中都新建目录:/usr/hadoop
    mkdir /usr/hadoop
    # 进入soft目录下解压Zookeeper
    cd /soft
    tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/hadoop/
    

    (2).配置环境变量

    # 在响应配置文件中追加以下内容
    vi /etc/profile
    export ZOOKEEPER_HOME=/usr/hadoop/zookeeper-3.4.10
    export PATH=$PATH:$ZOOKEEPER_HOME/bin
    # 设置当前环境变量立即生效
    source /etc/profile
    

    (3).配置Zookeeper

    # 1.进入指定路径修改配置文件
    cd /usr/hadoop/zookeeper-3.4.10/conf
    cp zoo_sample.cfg zoo.cfg
    vi zoo.cfg
    # 2.删除之前的所有内容,添加以下内容
    tickTime=2000
    initLimit=10
    syncLimit=5
    # 数据存放位置
    dataDir=/hadoop/zookeeper/zkdata
    # 日志存放位置
    dataLogDir=/hadoop/zookeeper/zklog
    # 端口
    clientPort=2181
    # 指定部署Zookeeper的三个节点
    server.1=master:2888:3888
    server.2=master2:2888:3888
    server.3=slave:2888:3888
    

    (4).同步Zookeeper与环境变量到其他两台服务器

    scp -r /usr/hadoop/zookeeper-3.4.10 master2:/usr/hadoop/
    scp /etc/profile master2:/etc/
    scp -r /usr/hadoop/zookeeper-3.4.10 slave:/usr/hadoop/
    scp /etc/profile slave:/etc/
    

    (5).创建文件夹

    # 在每个节点上均要执行
    mkdir -p /hadoop/zookeeper/zkdata
    mkdir -p /hadoop/zookeeper/zklog
    

    (6).创建myid

    # 在/hadoop/zookeeper/zkdata下创建文件myid
    cd /hadoop/zookeeper/zkdata
    vi myid
    # 编辑内容为当前server数值(1,2,3),需要与上面zoo.cfg中的配置相对应:
    master1节点 -> 1
    master2节点 -> 2
    worker1节点 -> 3
    

    5.Hadoop安装与配置

    (1).解压Hadoop组件

    # 将组件上传至soft目录
    cd /soft
    tar -zxvf hadoop-2.7.3.tar.gz -C /usr/hadoop/
    

    (2).修改相应配置文件

    # 进入配置文件目录
    cd /usr/hadoop/hadoop-2.7.3/etc/hadoop/
    

    1),配置core-site.xml

    <!-- 指定hdfs缺省的前缀 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ns1/</value>
    </property>
    <!-- 指定hadoop数据文件夹 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/hadoop/hadoop/tmp</value>
    </property>
    <!-- 指定Zookeeper地址及端口 2019年9月9日 14:59:10-->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>master:2181,master2:2181,slave:2181</value>
    </property>
    

    2),配置hdfs-site.xml

    说明: 启用 NameNode HA的话,不再需要开启Secondary NameNode

    <property>
        <!--指定df的名称服务 -->
        <name>dfs.nameservices</name>
        <value>ns1</value>
    </property>
    <!--指定namenode名称服务的节点 -->
    <property>
        <name>dfs.ha.namenodes.ns1</name>
        <value>nn1,nn2</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.ns1.nn1</name>
        <value>master:9000</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.ns1.nn1</name>
        <value>master:50070</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.ns1.nn2</name>
        <value>master2:9000</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.ns1.nn2</name>
        <value>master2:50070</value>
    </property>
    <!-- 1.设置一组JournalNode的URI地址,ActiveNameNode将editLogs写入到journalNode,此时StandbyNameNode会读取这些editLogs,并将这些应用在内存的目录树中
        2.ns1 是dfs.nameServices(名称服务),与core-site.xml中配置的一样
    -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://master:8485;master2:8485;slave:8485/ns1</value>
    </property>
    <!-- 指定journalnode数据在本地磁盘的存放位置 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/hadoop/hadoop/edits</value>
    </property>
    <!-- 开启NameNode自动故障切换 -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <!-- 1.配置自动故障切换实现方式
         2.也就是设置客户端与 active NameNode 进行交互的 java 实现类,DFS客户端通过该类寻找合适的activeNameNode(测试是否是默认的).-->
    <property>
        <name>dfs.client.failover.proxy.provider.ns1</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <!--设置多个隔离机制
        1.这是为了解决有两个master同时对外提供服务,导致系统处于不一致的状态,在HDFSHA中,journalNode只允许一个NameBNode写数据,不会出现两个 ActiveNameNode 的问题,但是在主备切换的,之前的 ActiveNameNode可能仍在处理客户端的RPC请求,为此,需要增加隔离机制将之前的ActiveNameNode 杀死。
        2.可以指定多个隔离机制,当发生主备切换时,将依次执行隔离机制中指定的方法,直到有一个可以成功。
        3.sshfence: 通过ssh登录到前一个 ActiveNameNode 并将其杀死,为了这一机制可以执行,需要配置免密登录
        4.shell(/bin/true): 表示设置任意执行一个shell指令,隔离旧的 ActiveNameNode-->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>
        sshfence  
        shell(/bin/true)  
        </value>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>
    <!--5.在隔离机制中还可以指定一个超时时间,一旦超过则认为是执行失败了 -->
    <property>
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
    </property>
    <!-- 配置block副本数 2019年9月9日 14:58:44 -->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    

    3),配置yarn-site.xml

    <!-- 启用RM高可用 -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!-- 自定义RM的id -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yrc</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <!-- 指定分配RM服务的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>master</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>master2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>master:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>master2:8088</value>
    </property>
    <!-- 指定zk集群地址 2019年9月9日 15:00:17-->  
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>master:2181,master2:2181,slave:2181</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    

    4),配置marped-site.xml

    # 说明:系统中提供的是一个模版文件,需要先复制成marped-site.xml文件,再进行修改
    [root@localhost hadoop]# cp mapred-site.xml.template mapred-site.xml 
    # 打开配置文件s
    vi mapred-site.xml
    
    <!-- 指定mr框架为yarn -->  
    <property>  
    <name>mapreduce.framework.name</name>  
    <value>yarn</value>  
    </property>
    

    5),配置hadoop-env.sh

    # 说明:需要是先安装jdk,跳转到jdk的安装模块
    
    export JAVA_HOME=/usr/java/jdk1.8.0_77
    

    6),配置slaves

    指定DataNode节点(hostname)

    [root@master ~]# vim /usr/hadoop/hadoop-2.7.3/etc/hadoop/slaves 
    # 删除原本的localhost,添加以下内容
    master
    master2
    slave
    

    7),配置环境变量

    # 修改配置文件
    vi /etc/profile
    # 追加以下内容
    export HADOOP_HOME=/usr/hadoop/hadoop-2.7.3
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    # 更新配置文件
    source /etc/profile
    

    8),同步Hadoop与配置文件复制到其他节点

    # 在master节点配置之后,需要同步到其他两台服务器中
    [root@master /]# cd /usr/hadoop/
    [root@master hadoop]# scp -r /usr/hadoop/hadoop-2.7.3 root@master2:/usr/hadoop/
    [root@master hadoop]# scp /etc/profile root@master2:/etc/
    [root@master hadoop]# scp -r /usr/hadoop/hadoop-2.7.3 root@slave:/usr/hadoop/
    [root@master hadoop]# scp /etc/profile root@slave:/etc/
    # 同步完配置文件之后需要更新配置文件
    source /etc/profile
    

    6.集群启动

    (1).启动Zookeeper

    # 在三个节点上都执行以下命令
    zkServer.sh start
    # 查看状态:一个leader,两个flower
    zkServer.sh status
    

    (2).启动JournalNode

    # 在三个节点上都执行以下命令
    hadoop-daemon.sh start journalnode
    
    # 为了备用节点能够与活跃节点保持同步,两个节点之间增加了一个守护进程“JournalNodes”(JNS),当任何namespace被活动节点所修改,JNS都会记录edits及相应的操作日志,备用节点会从JNS上读取edits,并将edits中所记录操作应用在自己的namespace,在发生故障时,备用节点将能确保在自己成为活动节点之前通过JNS读取了所有的edits,从而确保namespace在故障转移前是完全同步的。
    

    (3).格式化HDFS

    # 1.在master上格式化namenode:
    hdfs namenode -format
    # 在master1上启动namenode:
    hadoop-daemon.sh start namenode
    # 在master2上格式化namenode:
    hdfs namenode -bootstrapStandby
    

    (4).格式化zkfc

    # 在master1上执行:
    hdfs zkfc -formatZK
    

    (5).启动hdfs

    # 在master1上执行:
    start-dfs.sh
    

    (6).启动Yarn

    # 1.在master1上执行:
    start-yarn.sh
    # 2.在master2上执行:
    yarn-daemon.sh start resourcemanager
    

    (7).启动JobHistoryServer

    # 在每台主机上都执行以下命令
    mr-jobhistory-daemon.sh start historyserver
    

    7.验证NameNode高可用

    # 首先分别访问:master:50070和master2:50070网页,查看这两个节点的状态:
    master处于active状态;master2处于standby状态
    # 我们再手动启动master的namenode服务:
    hadoop-daemon.sh start namenode
    # 去master:50070网页查看,master处于standby状态;master2处于active状态
    

    8.进程验证

    # master节点
    [root@master hadoop]# jps
    10417 ResourceManager
    2226 QuorumPeerMain
    10994 Jps
    10519 NodeManager
    10312 DFSZKFailoverController
    10953 NameNode
    10044 DataNode
    9614 JournalNode
    # master2节点
    [root@master2 hadoop]# jps
    9586 DataNode
    9811 NodeManager
    10181 NameNode
    9882 ResourceManager
    9708 DFSZKFailoverController
    10285 Jps
    9406 JournalNode
    2063 QuorumPeerMain
    # slave节点
    [root@slave zkdata]# jps
    9504 DataNode
    2085 QuorumPeerMain
    9783 Jps
    9626 NodeManager
    9422 JournalNode
    

    相关文章

      网友评论

          本文标题:Hadoop平台搭建-集群部署-HA

          本文链接:https://www.haomeiwen.com/subject/hcjywrtx.html