zoukankan      html  css  js  c++  java
  • Hadoop2.2.0 手动切换HA环境搭建

        ssh-copy-id -i hadoop5含义:

        节点hadoop4上执行ssh-copy-id -i hadoop5的含义是把hadoop4上的公钥id_rsa.pub的内容追加到hadoop5的授权文件authorized_keys中。

        zookeeper在hadoop2中实现的一个作用是HA的自动切换。
        journalnode是实现active和standby两个数据节点的数据同步。
        搭建手工切换的HA (比hadoop1集群搭建多了一个journalnode)

    机器分配:

        namenode:hadoop4,hadoop5
        datanode:hadoop4,hadoop5,hadoop6
        journalnode:hadoop4,hadoop5,hadoop6,仅仅是为了实现HA,和集群没有任何关系,最少三个机器,奇数个
        resourcemanager:hadoop4
        nodemanager:hadoop4,hadoop5,hadoop6

    1.1 配置文件:(hadoop-env.sh,core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml)

      1.1.1 hadoop-env.sh 修改JAVA_HOME

    export JAVA_HOME=/usr/local/jdk

      1.1.2 core-site.xml

    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://cluster1</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
    </property>

      1.1.3 hdsf-site.xml

    <!-- 副本数 默认值3个 -->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <!-- 配置有几个集群 -->
    <property>
        <name>dfs.nameservices</name>
        <value>cluster1</value>
    </property>
    <!-- 指定集群cluster1具有哪些namenode节点,这里是逻辑名称,不重复即可 -->
    <property>
        <name>dfs.ha.namenodes.cluster1</name>
        <value>hadoop101,hadoop102</value>
    </property>
    <!-- 指定hadoop101RPC的地址 -->
    <property>
        <name>dfs.namenode.rpc-address.cluster1.hadoop101</name>
        <value>hadoop4:9000</value>
    </property>
    <!-- 指定hadoop101http的地址 -->
    <property>
        <name>dfs.namenode.http-address.cluster1.hadoop101</name>
        <value>hadoop4:50070</value>
    </property>
    <!-- 指定hadoop102RPC的地址 -->
    <property>
        <name>dfs.namenode.rpc-address.cluster1.hadoop102</name>
        <value>hadoop5:9000</value>
    </property>
    <!-- 指定hadoop102http的地址 -->
    <property>
        <name>dfs.namenode.http-address.cluster1.hadoop102</name>
        <value>hadoop5:50070</value>
    </property>
    <!-- 是否启用自动故障恢复,即namenode出故障时,是否自动切换到另一台namenode-->
    <property>
        <name>dfs.ha.automatic-failover.enabled.cluster1</name>
        <value>false</value>
    </property>
    <!-- 指定cluster1的两个namenode共享edits文件目录时,使用journalnode集群信息 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://hadoop4:8485;hadoop5:8485;hadoop6:8485/cluster1</value>
    </property>
    <!-- 指定journalnode集群在对namenode的目录进行共享时,自己存储数据的磁盘路径 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/usr/local/hadoop/tmp/journal</value>
    </property>
    <!-- 需要namenode切换,使用ssh进行切换 -->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <!-- 使用ssh进行故障切换,使用的密钥存储位置 -->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>
    <!-- 指定cluster1出故障时,哪个实现类负责执行故障切换 -->
    <property>
        <name>dfs.client.failover.proxy.provider.cluster1</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    hdsf-site.xml 配置

      1.1.4 yarn-site.xml

    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop4</value>
    </property>
    
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

      1.1.5 mapred-site.xml

         重命名mapred-site.xml.template 为mapred-site.xml
         mv mapred-site.xml.template mapred-site.xml

    <!-- 指定mapreduce运行环境时yarn,和hadoop1不同的地 -->
    <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
    </property>

      1.1.6 slaves

    hadoop4
    hadoop5
    hadoop6

      1.1.7 把hadoop4上的hadoop文件夹复制到hadoop5、hadoop6节点

    直接复制:
        scp -rq hadoop hadoop5:/usr/local/    r:是否强制覆盖    q:安静
    也可以写一个脚本:
        vi bcp.sh
        #!/bin/sh
        for((i=5;i<=6;i++));
        do
        scp -rq /usr/local/$1 hadoop$i:/usr/local/$2
        echo "copy done at hadoop$i"
        done
    执行:
        chmod u+x bcp.sh
        bcp.sh hadoop .

    1.2 启动journalnode集群

      在hadoop4、hadoop5、hadoop6上分别执行hadoop/sbin/hadoop-daemon.sh start journalnode

    1.3 格式化namenode,启动namenode

      hadoop4上执行格式化:hadoop/bin/hdfs namenode -format
      hadoop4上执行 hadoop/sbin/hadoop-daemon.sh start namenode
      hadoop5上执行 hadoop/bin/hdfs namenode -bootstrapStandby
      hadoop5上执行 hadoop/sbin/hadoop-daemon.sh start namenode
      将hadoop4上standby状态的转换为active状态
      hadoop/bin/hdfs haadmin -failover --forceactive hadoop101 hadoop102 forceactive:将一个转成active,forcefence:将状态互换
      ll -h :查看文件大小

    1.4 启动datanode

      在hadoop4上执行hadoop/sbin/hadoop-daemons.sh start datanode
      hadoop5格式化命令,实际上是把hadoop4上的fsimage和edits两个文件copy到hadoop5上

    1.5 启动resourcemanager和nodemanager

      在hadoop4上执行hadoop/sbin/start-yarn.sh start resourcemanager
      和原来的集群相比多了一个HA,HA由我们的journalnode集群实现,

  • 相关阅读:
    一道简单的递推题(快速幂+矩阵乘法优化+滚动数组)
    玲珑OJ 1129
    (转)Python函数式编程——map()、reduce()
    在windows中安装两个不同版本的Python
    Python 安装 pytesser 处理验证码出现的问题
    Python爬虫之HDU提交数据
    Python SGMLParser 的1个BUG??
    CF622F:The Sum of the k-th Powers
    LuoGuP3321:[SDOI2015]序列统计
    卡马克开方膜拜笔记
  • 原文地址:https://www.cnblogs.com/xiaolong1032/p/4656823.html
Copyright © 2011-2022 走看看