1. 高可用性の概要Hadoop High Availability は、HDFS High Availability と YARN High Availability に分かれています。この 2 つの実装は基本的に似ていますが、HDFS NameNode は YARN ResourceManager よりもデータ ストレージと一貫性の要件がはるかに高いため、実装もより複雑になります。そのため、最初に説明します。 1.1 可用性の高い全体アーキテクチャHDFS の高可用性アーキテクチャは次のとおりです。 画像ソース: https://www.edureka.co/blog/how-to-set-up-hadoop-cluster-with-hdfs-high-availability/ HDFS 高可用性アーキテクチャは、主に次のコンポーネントで構成されています。 アクティブ ネームノードとスタンバイ ネームノード: 2 つのネームノードが相互バックアップを形成します。1 つはアクティブ状態でプライマリ ネームノードとなり、もう 1 つはスタンバイ状態でバックアップ ネームノードとなります。プライマリ ネームノードのみが外部に対して読み取りおよび書き込みサービスを提供できます。
1.2 QJMに基づく共有ストレージシステムのデータ同期メカニズムの分析現在、Hadoop は、共有ストレージ システムとして Quorum Journal Manager (QJM) または Network File System (NFS) の使用をサポートしています。ここでは、QJM クラスターを例として使用します。アクティブ NameNode は最初に EditLog を JournalNode クラスターに送信し、次にスタンバイ NameNode は定期的に JournalNode クラスターから EditLog を同期します。アクティブ NameNode がダウンすると、スタンバイ NameNode はメタデータが完全に同期されていることを確認した後、外部サービスを提供できます。 JournalNode クラスターへの EditLog の書き込みは、「エントリの半分以上が書き込まれたら成功」という戦略に従うため、少なくとも 3 つの JournalNode ノードが必要であることに注意してください。もちろん、ノードの数を増やし続けることもできますが、ノードの合計数は奇数である必要があります。同時に、ジャーナルノードが 2N+1 個ある場合、多数決書き込みの原則に従って、最大 N 個のジャーナルノードの障害を許容できます。 1.3 NameNode アクティブ/スタンバイ スイッチオーバーNameNode がアクティブ/スタンバイ切り替えを実装するプロセスを次の図に示します。 HealthMonitor は初期化された後、内部スレッドを開始し、NameNode に対応する HAServiceProtocol RPC インターフェースのメソッドを定期的に呼び出して、NameNode のヘルス状態を検出します。 HealthMonitor は、NameNode のヘルス ステータスが変化したことを検出すると、処理のために ZKFailoverController によって登録された対応するメソッドをコールバックします。 ZKFailoverController は、アクティブ/スタンバイの切り替えが必要であると判断した場合、まず ActiveStandbyElector を使用してアクティブ/スタンバイ ノードを自動的に選択します。 ActiveStandbyElector は Zookeeper と対話して、自動マスター/スレーブ選択を完了します。 マスター/スレーブの選出が完了すると、ActiveStandbyElector は ZKFailoverController の対応するメソッドをコールバックして、現在の NameNode がマスター NameNode またはスタンバイ NameNode になるように通知します。 ZKFailoverController は、対応する NameNode の HAServiceProtocol RPC インターフェースのメソッドを呼び出して、NameNode をアクティブ状態またはスタンバイ状態に変換します。 1.4 YARN 高可用性YARN ResourceManager の高可用性は HDFS NameNode と似ていますが、NameNode とは異なり、ResourceManager には維持するメタデータ情報がそれほど多くないため、そのステータス情報は Zookeeper に直接書き込まれ、マスター/スレーブの選択は Zookeeper に依存できます。 2. クラスター計画高可用性の設計目標によれば、少なくとも 2 つの NameNode (1 つはアクティブ、もう 1 つはスタンバイ) と 2 つの ResourceManager (1 つはアクティブ、もう 1 つはスタンバイ) が存在する必要があります。同時に、「書き込みの半分以上が成功する」という原則を満たすには、少なくとも 3 つの JournalNode ノードが必要です。ここでは 3 つのホストが構築に使用され、クラスター計画は次のようになります。 3. 前提条件 すべてのサーバーに JDK がインストールされていること。インストール手順については、「 Linux での JDK のインストール」および「ZooKeeper クラスターのセットアップ」を参照してください。構築手順については、 「Zookeeper スタンドアロン環境」および「クラスター環境の構築」を参照してください。すべてのサーバー間で SSH パスワードフリー ログインが構成されています。4. クラスタ構成4.1 ダウンロードして解凍するHadoop をダウンロードします。ここで Hadoop の CDH バージョンをダウンロードしました。ダウンロード アドレスは次のとおりです: http://archive.cloudera.com/cdh5/cdh/5/
4.2 環境変数を設定する
次の構成を追加します。 設定をすぐに有効にするには、 4.3 構成の変更
1. hadoop-env.sh 2. コアサイト.xml <構成> <プロパティ> <!-- ネームノードの HDFS プロトコル ファイル システムの通信アドレスを指定します --> <name>fs.defaultFS</name> <値>hdfs://hadoop001:8020</値> </プロパティ> <プロパティ> <!-- Hadoop クラスターが一時ファイルを保存するディレクトリを指定します --> <name>hadoop.tmp.dir</name> <値>/home/hadoop/tmp</値> </プロパティ> <プロパティ> <!-- ZooKeeper クラスターのアドレス --> <name>ha.zookeeper.quorum</name> <値>hadoop001:2181、hadoop002:2181、hadoop002:2181</値> </プロパティ> <プロパティ> <!-- ZKFC が ZooKeeper に接続してタイムアウト --> <name>ha.zookeeper.session-timeout.ms</name> <値>10000</値> </プロパティ> </構成> 3. hdfs-site.xml <構成> <プロパティ> <!-- HDFS レプリカの数を指定します --> <name>dfs.replication</name> <値>3</値> </プロパティ> <プロパティ> <!-- ネームノード ノード データ (メタデータなど) の保存場所。フォールト トレランスを実現するために複数のディレクトリを指定できます。複数のディレクトリはカンマで区切られます。 --> <name>dfs.namenode.name.dir</name> <値>/home/hadoop/namenode/data</値> </プロパティ> <プロパティ> <!-- データノード ノード データ (つまりデータ ブロック) の保存場所 --> <name>dfs.datanode.data.dir</name> <値>/home/hadoop/datanode/data</値> </プロパティ> <プロパティ> <!-- クラスター サービスの論理名 --> <name>dfs.nameservices</name> <値>mycluster</値> </プロパティ> <プロパティ> <!-- NameNode ID リスト --> <name>dfs.ha.namenodes.mycluster</name> <値>nn1,nn2</値> </プロパティ> <プロパティ> <!-- nn1 の RPC 通信アドレス --> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <値>hadoop001:8020</値> </プロパティ> <プロパティ> <!-- nn2 の RPC 通信アドレス --> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <値>hadoop002:8020</値> </プロパティ> <プロパティ> <!-- nn1 の http 通信アドレス --> <name>dfs.namenode.http-address.mycluster.nn1</name> <値>hadoop001:50070</値> </プロパティ> <プロパティ> <!-- nn2 の http 通信アドレス --> <name>dfs.namenode.http-address.mycluster.nn2</name> <値>hadoop002:50070</値> </プロパティ> <プロパティ> <!-- JournalNode 上の NameNode メタデータの共有ストレージ ディレクトリ --> <name>dfs.namenode.shared.edits.dir</name> <値>qjournal://hadoop001:8485;hadoop002:8485;hadoop003:8485/mycluster</値> </プロパティ> <プロパティ> <!-- ジャーナル編集ファイルの保存ディレクトリ --> <name>dfs.journalnode.edits.dir</name> <値>/home/hadoop/journalnode/data</値> </プロパティ> <プロパティ> <!-- 分離メカニズムを構成して、常に 1 つの NameNode のみがアクティブになるようにします --> <name>dfs.ha.fencing.methods</name> <値>sshfence</値> </プロパティ> <プロパティ> <!-- sshfence メカニズムを使用する場合は SSH パスワードなしのログインが必要です --> <name>dfs.ha.fencing.ssh.秘密鍵ファイル</name> <値>/root/.ssh/id_rsa</値> </プロパティ> <プロパティ> <!-- SSH タイムアウト --> <name>dfs.ha.fencing.ssh.connect-timeout</name> <値>30000</値> </プロパティ> <プロパティ> <!-- アクセス プロキシ クラス。現在アクティブ状態にある NameNode を判別するために使用されます --> <name>dfs.client.failover.proxy.provider.mycluster</name> <値>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</値> </プロパティ> <プロパティ> <!-- 自動フェイルオーバーを有効にする --> <name>dfs.ha.automatic-failover.enabled</name> <値>真</値> </プロパティ> </構成> 4. 糸サイト.xml <構成> <プロパティ> <!--NodeManager で実行される補助サービスを設定します。 MapReduce プログラムは、mapreduce_shuffle が設定された後にのみ Yarn 上で実行できます。 --> <name>yarn.nodemanager.aux-services</name> <値>mapreduce_shuffle</値> </プロパティ> <プロパティ> <!-- ログ集約を有効にするかどうか (オプション) --> <name>yarn.log-aggregation-enable</name> <値>真</値> </プロパティ> <プロパティ> <!-- ログ保存時間の集計 (オプション) --> <name>yarn.log-aggregation.retain-seconds</name> <値>86400</値> </プロパティ> <プロパティ> <!-- RM HA を有効にする --> <name>yarn.resourcemanager.ha.enabled</name> <値>真</値> </プロパティ> <プロパティ> <!-- RM クラスター識別子 --> <name>yarn.resourcemanager.cluster-id</name> <value>my-yarn-cluster</value> </プロパティ> <プロパティ> <!-- RM 論理 ID リスト --> <name>yarn.resourcemanager.ha.rm-ids</name> <値>rm1,rm2</値> </プロパティ> <プロパティ> <!-- RM1 サービス アドレス --> <name>yarn.resourcemanager.hostname.rm1</name> <値>hadoop002</値> </プロパティ> <プロパティ> <!-- RM2 サービス アドレス --> <name>yarn.resourcemanager.hostname.rm2</name> <値>hadoop003</値> </プロパティ> <プロパティ> <!-- RM1 Web アプリケーションのアドレス --> <name>yarn.resourcemanager.webapp.address.rm1</name> <値>hadoop002:8088</値> </プロパティ> <プロパティ> <!-- RM2 Web アプリケーションのアドレス --> <name>yarn.resourcemanager.webapp.address.rm2</name> <値>hadoop003:8088</値> </プロパティ> <プロパティ> <!-- ZooKeeper クラスターのアドレス --> <name>yarn.resourcemanager.zk-address</name> <値>hadoop001:2181、hadoop002:2181、hadoop003:2181</値> </プロパティ> <プロパティ> <!-- 自動回復を有効にする --> <name>yarn.resourcemanager.recovery.enabled</name> <値>真</値> </プロパティ> <プロパティ> <!-- 永続ストレージのクラス--> <name>yarn.resourcemanager.store.class</name> <値>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</値> </プロパティ> </構成> 5. mapred-site.xml <構成> <プロパティ> <!--YARN で実行する MapReduce ジョブを指定します--> <name>mapreduce.framework.name</name> <value>糸</value> </プロパティ> </構成> 5. 奴隷 すべてのスレーブ ノードのホスト名または IP アドレスを 1 行に 1 つずつ設定します。すべてのスレーブ ノードで
4.4 配布手順Hadoop インストール パッケージを他の 2 台のサーバーに配布します。配布後、2 台のサーバーで Hadoop 環境変数を構成することをお勧めします。 # インストールパッケージをhadoop002に配布する scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/ hadoop002:/usr/app/ # インストールパッケージをhadoop003に配布する scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/ hadoop003:/usr/app/ 5.1 ZooKeeperを起動する3 つのサーバーでそれぞれ ZooKeeper サービスを開始します。
5.2 ジャーナルノードを起動する3 つのサーバーのそれぞれの 5.3 NameNodeの初期化
初期化コマンドを実行した後、
5.4 HAステータスの初期化ZooKeeper の HA 状態を初期化するには、任意の 5.5 HDFSを起動する
5.6 YARNの起動
6. クラスターを表示する6.1 プロセスの表示起動が成功すると、各サーバーのプロセスは次のようになります。 [root@hadoop001 sbin]# jps 4512 DFSZKフェールオーバーコントローラ 3714 ジャーナルノード 4114 ネームノード 3668 クォーラムピアメイン 5012 データノード 4639 ノードマネージャー [root@hadoop002 sbin]# jps 4499 リソースマネージャー 4595 ノードマネージャー 3465 クォーラムピアメイン 3705 ネームノード 3915 DFSZKフェールオーバーコントローラ 5211 データノード 3533 ジャーナルノード [root@hadoop003 sbin]# jps 3491 ジャーナルノード 3942 ノードマネージャー 4102 リソースマネージャー 4201 データノード 3435 クォーラムピアメイン 6.2 Web UIを表示するHDFS と YARN のポート番号はそれぞれ 現時点では、hadoop001 上の hadoop002 上の hadoop002 の hadoop003 上の 同時に、インターフェースには 7. クラスターの二次起動上記のクラスターの初期起動には、いくつかの必要な初期化操作が含まれるため、プロセスは少し面倒です。ただし、クラスターが構築されたら、再度有効にすると便利です。手順は次のとおりです (まず ZooKeeper クラスターが起動していることを確認します)。 この時点では、 参考文献 上記の構築手順は主に公式ドキュメントから参照されています。 クォーラムジャーナルマネージャを使用したHDFSの高可用性ResourceManagerの高可用性 要約する 上記は、ZooKeeper をベースにした Hadoop 高可用性クラスターを構築する方法に関するチュートリアルです。お役に立てれば幸いです。ご質問がある場合は、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
今日は折り紙飛行機(飛べる飛行機)を作ります基本的にすべてCSSで実装されており、JSはごく一部に過...
Mysql を完全にアンインストールするにはどうすればいいですか?以下の手順に従って実行してくださ...
信頼性が高く、人気があり、簡単に構成できる Web サーバーである Apache で独自の Web ...
この記事では、Linux におけるいくつかの主要なゼロコピー テクノロジと、ゼロコピー テクノロジを...
最近、小さなプログラムを書いています。その小さなプログラムの公式ウェブサイトはhttpsを使用する必...
最近のプロジェクトでは、多くのフォーム、特にチェックボックスとラジオボタンの作成が含まれます。しかし...
目次1. 集計クエリ1. COUNT関数2. SUM関数3. AVG関数4. MAX関数とMIN関数...
1. mysqlbackup の紹介mysqlbackup は、MySQL Enterprise B...
目次プロトタイプチェーンプロトタイプチェーンに基づいてシンプルなJQueryライブラリを実装すること...
目次LinuxでTCPを作成する手順サーバクライアントTCP確立プロセスサンプルコードLinuxでT...
目次01 sql_slave_skip_counter パラメータ02 スレーブスキップエラーパラメ...
<base target=_blank> は、基本リンクのターゲット フレームを新しいペ...
SQL (Structured Query Language) ステートメント、つまり構造化クエリ言...
思いつきで、小さなボールが跳ね返るケーススタディを書いてみました。具体的な内容は以下のとおりです。主...
序文Docker はコンテナの環境変数を設定できます。設定方法は 2 つあります。イメージを作成する...