zoukankan      html  css  js  c++  java
  • (二)Hadoop高可用HA搭建

    一.集群规划

     

    Master

    Slave1

    Slave2

    Slave3

    IP

    192.168.2.131

    192.168.2.132

    192.168.2.133

    192.168.2.134

    namenode

    Y

    Y

    N

    N

    datanode

    Y

    Y

    Y

    Y

    resourcemanager

    N

    N

    Y

    Y

    nodemanager

    Y

    Y

    Y

    Y

    zookeeper

    Y

    Y

    Y

    N

    journalnode

    Y

    Y

    Y

    N

    zkfc

    Y

    Y

    N

    二.搭建Hadoop(HA)

     在已完成此配置的基础上执行以下。tar包链接https://pan.baidu.com/s/1hwLPI0eUwkpGmP5ROqM6Lw 提取码: k7m3

    # tar -zxvf hadoop-2.7.7.tar.gz -C /usr/local/  解压到对应的安装目录
    # mv /usr/local/hadoop-2.7.7 /usr/local/Hadoop
    # vim ~/.bashrc  添加环境变量
    export HADOOP_HOME=/usl/local/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    # source ~/.bashrc  生效环境变量
    # cd /usr/local/hadoop/etc/hadoop/  转至配置文件
    # vim hadoop-env.sh  配置1添加                                    【官网配置】
    export JAVA_HOME= /usr/java/jdk1.8.0_221
    # vim slaves  配置2
    master
    slave1
    slave2
    slave3
    # vim core-site.xml  配置3
    <!-- 指定hdfs的nameservice为myha01 -->
    <property>
         <!-- 选fs.default.name(单机)fs.defaultFS(Ha)看NN是否做了HA --> <name>fs.defaultFS</name> <value>hdfs://myha01:9000/</value> </property> <!-- 指定hadoop临时目录 --> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/data/hadoopdata/</value> </property> <!-- 指定zookeeper地址 --> <property> <name>ha.zookeeper.quorum</name> <value>master:2181,slave1:2181,slave2:2181</value> </property> <!-- hadoop链接zookeeper的超时时长设置 --> <property> <name>ha.zookeeper.session-timeout.ms</name> <value>1000</value> <description>ms</description> </property> # cp mapred-site.xml.template mapred-site.xml && vim mapred-site.xml 配置4 <!-- 指定mr框架为yarn方式 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 指定mapreduce jobhistory地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <!-- 任务历史服务器的web地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> # vim hdfs-site.xml 配置5 <!-- 指定副本数 --> <property> <name>dfs.replication</name> <value>2</value> </property> <!-- 配置namenode和datanode的工作目录-数据存储目录 --> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/hadoop/data/hadoopdata/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/usr/local/hadoop/data/hadoopdata/dfs/data</value> </property> <!-- 启用webhdfs --> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <!--指定hdfs的nameservice为myha01,需要和core-site.xml中的保持一致 dfs.ha.namenodes.[nameservice id]为在nameservice中的每>一个NameNode设置唯一标示符。 配置一个逗号分隔的NameNode ID列表。这将是被DataNode识别为所有的NameNode。 例如,如果使用"myha01"作为nameservice ID,并且使用"nn1""nn2"作为NameNodes标示符 --> <property> <name>dfs.nameservices</name> <value>myha01</value> </property> <!-- myha01下面有两个NameNode,分别是nn1,nn2 --> <property> <name>dfs.ha.namenodes.myha01</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.myha01.nn1</name> <value>master:9000</value> </property> <!-- nn1的http通信地址 --> <property> <name>dfs.namenode.http-address.myha01.nn1</name> <value>master:50070</value> </property> <!-- nn2的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.myha01.nn2</name> <value>slave1:9000</value> </property> <!-- nn2的http通信地址 --> <property> <name>dfs.namenode.http-address.myha01.nn2</name> <value>slave1:50070</value> </property> <!-- 指定NameNode的edits元数据的共享存储位置。也就是JournalNode列表 该url的配置格式:qjournal://host1:port1;host2:port2;host3:port3/journalId journalId推荐使用nameservice,默认端口号是:8485 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://master:8485;slave1:8485;slave2:8485/myha01</value> </property> <!-- 指定JournalNode在本地磁盘存放数据的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/usr/local/hadoop/data/journaldata</value> </property> <!-- 开启NameNode失败自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失败自动切换实现方式 --> <property> <name>dfs.client.failover.proxy.provider.myha01</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行 --> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> </property> <!-- 使用sshfence隔离机制时需要ssh免登陆 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <!-- 配置sshfence隔离机制超时时间 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> <property> <name>ha.failover-controller.cli-check.rpc-timeout.ms</name> <value>60000</value> </property> # vim yarn-site.xml 配置6 <!-- 开启RM高可用 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 指定RM的cluster id --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yrc</value> </property> <!-- 指定RM的名字 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 分别指定RM的地址 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>slave2</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>slave3</value> </property> <!-- 指定zk集群地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>master:2181,slave1:2181,slave2:2181</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>86400</value> </property> <!-- 启用自动恢复 --> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <!-- 制定resourcemanager的状态信息存储在zookeeper集群上 --> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property>

    三.配置→启动→验证→测试

    3.1配置
    # scp -r /usr/local/hadoop root@slave1:/usr/local/  分发至slave1~3结点(这里演示一台)
    # scp ~/.bashrc root@slave1:/root/  分发环境至slave1~3结点(这里演示一台)
    # source ~/.bashrc  生效环境(四台)
    # zkServer.sh start  启动zookeeper(master、slave1、slave2)
    # zkServer.sh status  查看角色
    # hadoop-daemon.sh start journalnode 启动进程journalnode (masterslave1slave2)
    # jps 查看进程
    # hadoop namenode -format  格式化namenode节点(这里选master)
    
    此时在 core-site.xml 配置的临时目录中生成一些集群的信息,把他拷贝的第二个 namenode 相同目录下。记住:两个 namenode 节点该目录中的数据结构是一致的!
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/hadoop/data/hadoopdata/</value>   // 拷贝地址
    # hadoop namenode -bootstrapStandby  拷贝或在另一个namenode (slave2)上执行
    
    上面原因是: master的namenode(格式化未启动所以连接不上) → 开启 → 在执行即可。
    下面把master节点上生成的元数据 给复制到slave1上。
    # scp -r /usr/local/hadoop/data/hadoopdata root@slave1:/usr/local/hadoop/data/  
    # hdfs zkfc -formatZK  格式化zkfc(只能在nameonde节点进行)(master,slave1)
    3.2启动
    # start-dfs.sh  启动集群(master)
    # start-yarn.sh  最好在YARN的主节点上执行,(在配置文件中设置yarn主节点在slave2)
    <!-- 分别指定RM的地址 -->
        <property>
            <name>yarn.resourcemanager.hostname.rm1</name>
            <value>slave2</value>
        </property>
    # yarn-daemon.sh start resourcemanager 启动另resourcemanager必须手动启动(slave3)
    # jps 查看进程

    进程架构图
    3.3浏览器验证
    a)验证1
    http://192.168.2.131:50070  访问web 页面查看(master) namenode状态

    Master(standby状态)
    b)验证2
    http://192.168.2.132:50070  访问web 页面查看(slave1) namenode状态
    Slave1(active状态)
    c)验证3
    http://192.168.2.133:8088   查看yarn节点(slave2)启动情况
    d)验证4
    查看各主节点的状态
    HDFS: 
    # hdfs haadmin -getServiceState nn1 
    # hdfs haadmin -getServiceState nn2
    YARN: 
    # yarn rmadmin -getServiceState rm1 
    # yarn rmadmin -getServiceState rm2

    启动 mapreduce 任务历史服务器
    # mr-jobhistory-daemon.sh start historyserver
    
    按照配置文件配置的历史服务器的 web 访问地址去访问: http://192.168.2.131:19888
    http://192.168.2.131:19888 
    
    3.4测试
    a) 干掉 active namenode看看集群有什么变化。
    
    查看(Slave1)web有没有从standby切换成active
    
    # hadoop-daemon.sh start namenode  为提起namenode服务命令(初次搭建备节点不需要提起)
    更多测试请参考连接:  https://blog.csdn.net/qq_41851454/article/details/79666066
    HA高可用搭建就搭好了
  • 相关阅读:
    2021年2月4号
    2021年2月3号
    2021年2月2号
    2021年2月1日
    2021年1月31日
    2021年1月30日
    20171205xlVBA往返航班组合
    选择文件
    从VBA过渡到Python
    20171114xlVba选定单行记录并打印
  • 原文地址:https://www.cnblogs.com/Agent9527/p/13196867.html
Copyright © 2011-2022 走看看