hadoop2.6.0 HA高信頼クラスタ環境構築
12071 ワード
Hadoop 2.0.0の前に、HDFSクラスタでNamenodeは単一の障害(SPOF)であった.各クラスタにはノードがあり、マシンまたはプロシージャが使用不可になった場合、nnが再起動する前または別のクラスタに配備される前にクラスタは使用できません.
主にクラスタが不可能になる2つの方法:マシンがハングアップするまでクラスタは使用できません. ソフトウェアやハードウェアなどの修理プロジェクトのアップグレードを計画しているNamenodeマシンは、クラスタのダウンタイムを引き起こす可能性があります.
HDFSの高可用性機能は、上記の問題を解決し、2つの冗長ノードを同じクラスタで実行するアクティブ/パッシブ構成デュアルマシンホットスペアオプションを提供することによって解決される.これにより、次の新しいノード、マシンのクラッシュ、または優雅な管理者が開始した計画的な点検の目的のフェイルオーバに迅速に切り替えることができます.
HA環境は主に2つのマスタスイッチNNによって高い信頼性を実現し,スタンバイノードはJNSによって同期マスタノード状態を維持し,マスタノードが取り外されるとスタンバイノードはマスタノードとなる.
HAクラスタを配備するには、次の手順に従います.
NameNodeマシン-マシン上で実行されるアクティブおよびスタンバイノードは、同じハードウェアと同等のハードウェアをHA以外のクラスタで使用する必要があります.
journalnodeマシン-マシン上でjournalnodesを実行するjournalnodeデーモンは比較的軽いので、ノード、JobTracker、ResourceManagerなどの他のHadoopデーモンとのマシンを合理的に構成できます.注意:editlogの変更には多くのJNSが必要であるため、少なくとも3つのjournalnodeデーモンプロセスが必要です.これにより、システムがシングルマシンの障害を許容できます.3 journalnodesを超えることもできますが、本当に障害システムが許容できる数を高めるためには、JNS奇数(3、5、7など)を実行する必要があります.なお、N journalnodesを実行すると、システムは最大(n−1)/2の失敗を許容し、正常に継続することができる.
Secondary Nameノードを起動しないでください.エラーが発生します.
いくつかの構成の説明:
hdfs-site.xml
dfs.nameservices-ネーミングスペースの論理名
dfs.ha.namenodes.[nameserviceID]-ネーミングスペース内の各namenodeの一意のID
dfs.namenode.rpc-address.[nameservice ID].[name node ID]-namenodeが傍受するrpcポート
dfs.namenode.http-address.[nameservice ID].[name node ID]-namenodeが傍受するhttpポート
dfs.namenode.shared.edits.dir-NameNode読み書きJNsグループのuri
dfs.client.failover.proxy.provider.[nameserviceID]-HDFS CLIENTSアクティブnnに接続するj'avaメソッド
sshfence-sshからアクティブNNへとプロセスを殺します
The configuration of automatic failover requires the addition of two new parameters to your configuration. In your hdfs-site.xml file, add:
This specifies that the cluster should be set up for automatic failover. In your core-site.xml file, add:
This lists the host-port pairs running the ZooKeeper service.
core-site.xml
fs.defaultFS-ネーミングスペース
dfs.journalnode.edits.dir-JNストレージデータローカルパス
OS:centos 7
jdk: 1.7
hadoop: 2.6.0
zk : 3.4.6
ssh免登をしっかりと行い、zookeeperは仕事を開始します.
ノードプロセスのリスト:
ノード
NameNode
DataNode
JournalNode
DFSZKFailoverController
ResourceManager
NodeManager
QuorumPeerMain
zoo1
Y
Y
Y
Y
zoo2
Y
Y
Y
Y
Y
Y
Y
zoo3
Y
Y
Y
Y
zoo4
Y
Y
Y
リファレンスプロファイルの内容は次のとおりです.
core-site.xml
hdfs-site.xml
yarn-site.xml
maperd-site.xml
slaves
起動順序(厳密には順序)
1.jnの起動
2.最初のnn上zoo 1上でhdfsをフォーマットする
3.起動前にフォーマットしたnn,zoo 1で実行
4.別のnnでzoo 2運転
5.hdfsのすべてのサービスを停止する
6.zk nodeを初期化し、そのうちの1つのnnで実行
7.hdfsのすべてのサービスを開始する
8.実行
これで各ノードのサービスはすべて起動して完了するはずです.
まずzoo 1のhdfsページを見てみましょう.
http://zoo1:50070
zoo 1がactiveであることがわかります
そしてzoo 2のページstandybyを見て
次のテストでは、プライマリ・スタンバイの切り替えを行います.
zoo 1でkillがnamenodeを落とす過程でzoo 2がactiveになったことがわかります.
環境構築に成功
主にクラスタが不可能になる2つの方法:
HDFSの高可用性機能は、上記の問題を解決し、2つの冗長ノードを同じクラスタで実行するアクティブ/パッシブ構成デュアルマシンホットスペアオプションを提供することによって解決される.これにより、次の新しいノード、マシンのクラッシュ、または優雅な管理者が開始した計画的な点検の目的のフェイルオーバに迅速に切り替えることができます.
HA環境は主に2つのマスタスイッチNNによって高い信頼性を実現し,スタンバイノードはJNSによって同期マスタノード状態を維持し,マスタノードが取り外されるとスタンバイノードはマスタノードとなる.
HAクラスタを配備するには、次の手順に従います.
NameNodeマシン-マシン上で実行されるアクティブおよびスタンバイノードは、同じハードウェアと同等のハードウェアをHA以外のクラスタで使用する必要があります.
journalnodeマシン-マシン上でjournalnodesを実行するjournalnodeデーモンは比較的軽いので、ノード、JobTracker、ResourceManagerなどの他のHadoopデーモンとのマシンを合理的に構成できます.注意:editlogの変更には多くのJNSが必要であるため、少なくとも3つのjournalnodeデーモンプロセスが必要です.これにより、システムがシングルマシンの障害を許容できます.3 journalnodesを超えることもできますが、本当に障害システムが許容できる数を高めるためには、JNS奇数(3、5、7など)を実行する必要があります.なお、N journalnodesを実行すると、システムは最大(n−1)/2の失敗を許容し、正常に継続することができる.
Secondary Nameノードを起動しないでください.エラーが発生します.
いくつかの構成の説明:
hdfs-site.xml
dfs.nameservices-ネーミングスペースの論理名
<property>
<name>dfs.nameservices</name>
<value>hacluster</value>
</property>
dfs.ha.namenodes.[nameserviceID]-ネーミングスペース内の各namenodeの一意のID
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
dfs.namenode.rpc-address.[nameservice ID].[name node ID]-namenodeが傍受するrpcポート
property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>machine1.example.com:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>machine2.example.com:8020</value>
</property>
dfs.namenode.http-address.[nameservice ID].[name node ID]-namenodeが傍受するhttpポート
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>machine1.example.com:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>machine2.example.com:50070</value>
</property>
dfs.namenode.shared.edits.dir-NameNode読み書きJNsグループのuri
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster</value>
</property>
dfs.client.failover.proxy.provider.[nameserviceID]-HDFS CLIENTSアクティブnnに接続するj'avaメソッド
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
sshfence-sshからアクティブNNへとプロセスを殺します
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/exampleuser/.ssh/id_rsa</value>
</property>
The configuration of automatic failover requires the addition of two new parameters to your configuration. In your hdfs-site.xml file, add:
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
This specifies that the cluster should be set up for automatic failover. In your core-site.xml file, add:
<property>
<name>ha.zookeeper.quorum</name>
<value>zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181</value>
</property>
This lists the host-port pairs running the ZooKeeper service.
core-site.xml
fs.defaultFS-ネーミングスペース
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
dfs.journalnode.edits.dir-JNストレージデータローカルパス
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/path/to/journal/node/local/data</value>
</property>
OS:centos 7
jdk: 1.7
hadoop: 2.6.0
zk : 3.4.6
ssh免登をしっかりと行い、zookeeperは仕事を開始します.
ノードプロセスのリスト:
ノード
NameNode
DataNode
JournalNode
DFSZKFailoverController
ResourceManager
NodeManager
QuorumPeerMain
zoo1
Y
Y
Y
Y
zoo2
Y
Y
Y
Y
Y
Y
Y
zoo3
Y
Y
Y
Y
zoo4
Y
Y
Y
リファレンスプロファイルの内容は次のとおりです.
core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/app/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hacluster</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>1031072</value>
</property>
<property>
<name>hadoop.native.lib</name>
<value>true</value>
<description>Should native hadoop libraries, if present, be used.</description>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>zoo1:2181,zoo2:2181,zoo3:2181</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/app/hadoop-2.6.0/jnd</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/app/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/app/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>hacluster</value>
</property>
<property>
<name>dfs.ha.namenodes.hacluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hacluster.nn1</name>
<value>zoo1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hacluster.nn2</name>
<value>zoo2:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.hacluster.nn1</name>
<value>zoo1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.hacluster.nn2</name>
<value>zoo2:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://zoo2:8485;zoo3:8485;zoo4:8485/hacluster</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.hacluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://zoo2:8485;zoo3:8485;zoo4:8485/mycluster</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn-ha</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- RM-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>zoo1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>zoo2</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>zoo1:2181,zoo2:2181,zoo3:2181</value>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
maperd-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
slaves
zoo2
zoo3
zoo4
起動順序(厳密には順序)
1.jnの起動
hadoop-daemon.sh start journalnode
2.最初のnn上zoo 1上でhdfsをフォーマットする
hdfs namenode -format
3.起動前にフォーマットしたnn,zoo 1で実行
hadoop-daemon.sh start namenode
4.別のnnでzoo 2運転
hdfs namenode -bootstrapStandby
5.hdfsのすべてのサービスを停止する
stop-dfs.sh
6.zk nodeを初期化し、そのうちの1つのnnで実行
hdfs zkfc -formatZk
7.hdfsのすべてのサービスを開始する
start-dfs.sh
8.実行
start-yarn.sh
これで各ノードのサービスはすべて起動して完了するはずです.
まずzoo 1のhdfsページを見てみましょう.
http://zoo1:50070
zoo 1がactiveであることがわかります
そしてzoo 2のページstandybyを見て
次のテストでは、プライマリ・スタンバイの切り替えを行います.
zoo 1でkillがnamenodeを落とす過程でzoo 2がactiveになったことがわかります.
環境構築に成功