08使用のZooKeeper名前ノード、のResourceManager高可用性を確保

前回の記事、私たちは、Hadoopクラスタのインストールを完了し、私たちは名前ノードを見ることができるノードプロファイル織機は、マシンがダウンしていると、その後、HDFSの服用を中止、マスタマシン上に存在するので、我々はメカニズムが必要高可用性を確保するために、名前ノード、このリスクはまた、ResourceManagerに存在します。この記事では、名前ノードののResourceManagerと高可用性を確保するために、飼育係が使用されます。

1つのシステム、ソフトウェア、および制約の前提

2操作

2.1シャットダウンし、すべてのノード[サービス] ZKは空にする前のデータで行うことができます

ssh master;
hadoop-2.5.2/sbin/stop-all.sh
cd hadoop-2.5.2/dfs;
rm -rf *
mkdir data
mkdir name
# 其他两台机子也做相同清空操作

2.2マスターとコピーで設定ファイルを変更します

  • 変更されたコア - site.xmlに
<configuration>
            <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://master:9000</value>
            </property>
            <property>
                    <name>hadoop.tmp.dir</name>
                    <value>file:/root/hadoop-2.5.2/tmp</value>
                    <description>Abase for other temporary directories.</description>
            </property>

    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://myha01/</value>
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>master:2181,slave1:2181,slave2:2181</value>
    </property>
    <property>
        <name>ha.zookeeper.session-timeout.ms</name>
        <value>5000</value>
    </property>
</configuration>
  • HDFS-site.xmlのを修正

<configuration>
<property>
                    <name>dfs.namenode.secondary.http-address</name>
                    <value>master:50090</value>
            </property>
            <property>
                    <name>dfs.replication</name>
                    <value>2</value>
            </property>
            <property>
                    <name>dfs.namenode.name.dir</name>
                    <value>file:/root/hadoop-2.5.2/dfs/name</value>
            </property>
            <property>
                    <name>dfs.datanode.data.dir</name>
                    <value>file:/root/hadoop-2.5.2/dfs/data</value>
            </property>

        <!-- /meservice为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>/root/hadoop-2.5.2/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
        </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>
</configuration>
  • 糸-site.xmlのを修正
<configuration>

<!-- Site specific YARN configuration properties -->
            <property>
                    <name>yarn.resourcemanager.hostname</name>
                    <value>master</value>
            </property>
            <property>
                    <name>yarn.nodemanager.aux-services</name>
                    <value>mapreduce_shuffle</value>
            </property>

    <!-- 开启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>master</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>slave1</value>
    </property>

    <!-- 指定zk集群地址 -->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>master:2181,slave1:2181,slave2:2181</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>
</configuration>
  • 奴隷を変更
master
slave1
slave2
  • 別のマシンにプロファイルをコピーします。
cd /root/hadoop-2.5.2/etc/hadoop
scp * slave1:$PWD
scp * slave2:$PWD

2.3を起動し、関連サービス

  • マスターでは、スレーブ1、スレーブ2は、それぞれjournalnodeを開始します
cd /root/hadoop-2.5.2/sbin
./hadoop-daemons.sh start journalnode
  • マスターのフォーマットzkfc上の2
cd /root/hadoop-2.5.2/bin
./hdfs zkfc -formatZK
  • マスターのフォーマット名前ノード上の3
cd /root/hadoop-2.5.2/bin
./hdfs namenode -format
  • 4マスターに名前ノードの開始
cd /root/hadoop-2.5.2/sbin
./hadoop-daemon.sh start namenode
  • 5 SLAVE1名前ノードにスタンバイ開始
cd /root/hadoop-2.5.2/bin
./hdfs namenode -bootstrapStandby
cd /root/hadoop-2.5.2/sbin
./hadoop-daemon.sh start namenode
  • 6は、プライマリマスタ上に設けられています
cd /root/hadoop-2.5.2/bin
./hdfs haadmin -transitionToActive --forcemanual nn1
  • マスターブートデータノード上の7
cd /root/hadoop-2.5.2/sbin
./hadoop-daemons.sh start datanode
  • 8マスターとスレーブ1に糸を開始します
cd /root/hadoop-2.5.2/sbin
./start-yarn.sh
  • マスターブートzkfcに9
cd /root/hadoop-2.5.2/sbin
./hadoop-daemons.sh start zkfc 

すべてのブートが完了すると次のように、各ノードはJPSを行い、処理情報がある:
マスター:

[root@master ~]# jps
14962 Jps
12474 NameNode
12161 JournalNode
12757 DataNode
14838 NodeManager
7930 QuorumPeerMain
13757 ResourceManager
13366 DFSZKFailoverController

スレーブ1:

[root@slave1 ~]# jps
10564 DataNode
10378 NameNode
12161 NodeManager
8736 QuorumPeerMain
11231 DFSZKFailoverController
10159 JournalNode
12287 Jps
12673 ResourceManager

スレーブ2:

[root@slave2 ~]# jps
12706 Jps
11449 NodeManager
10764 QuorumPeerMain
10884 JournalNode
11171 DataNode

2.4テスト

おすすめ

転載: blog.csdn.net/weixin_33858336/article/details/90772915