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集群实现,

  • 相关阅读:
    【HDOJ】2267 How Many People Can Survive
    【HDOJ】2268 How To Use The Car
    【HDOJ】2266 How Many Equations Can You Find
    【POJ】2278 DNA Sequence
    【ZOJ】3430 Detect the Virus
    【HDOJ】2896 病毒侵袭
    求奇数的乘积
    平方和与立方和
    求数列的和
    水仙花数
  • 原文地址:https://www.cnblogs.com/xiaolong1032/p/4656823.html
Copyright © 2011-2022 走看看