この記事では、CentOS 7 で高可用性 Hadoop 2.10 クラスターを構築する方法を紹介します。まず、6 台のマシンを準備します。2 台の NN (ネームノード)、4 台の DN (データノード)、3 台の JNS (ジャーナルノード)
各マシンのJpsプロセス: 私はvmwareの仮想マシンを使用しているため、1台のマシンを設定した後、cloneを使用して残りのマシンをクローンし、ホスト名とIPを変更して、各マシンの構成が統一されるようにします。各マシン構成にhdfsユーザーとユーザーグループを追加し、jdk環境を構成し、hadoopをインストールします。今回は、hdfsユーザーの下に高可用性クラスターを構築します。参照してください:CentOS 7はhadoop 2.10疑似分散モードを構築します 高可用性クラスターをインストールするための手順と詳細は次のとおりです。 1. 各マシンのホスト名とホストを設定する hosts ファイルを変更します。ホストが設定されると、ホスト名を使用してマシンにアクセスできます。これはより便利です。次のように変更します。 127.0.0.1 ローカルホスト 192.168.30.141 s141 192.168.30.142 s142 192.168.30.143 s143 192.168.30.144 s144 192.168.30.145 s145 192.168.30.146 s146 2. ssh パスワードフリー ログインを設定します。s141 と s146 はどちらもネームノードなので、これら 2 台のマシンからすべてのマシンにパスワードなしでログインする必要があります。hdfs ユーザーと root ユーザーの両方にパスワードフリー ログインを設定するのが最適です。 s141 を nn1 に、s146 を nn2 に設定します。s141 と s146 は、パスワードなしで ssh 経由で他のマシンにログインできるようにする必要があります。これを行うには、s141 および s146 マシンの hdfs ユーザーでキー ペアを生成し、s141 および s146 の公開キーを他のマシンに送信して、~/.ssh/authorized_keys ファイルに配置する必要があります。より正確には、すべてのマシン (自分自身を含む) に公開キーを追加する必要があります。 s141 および s146 マシンでキー ペアを生成します。 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa id_rsa.pub ファイルの内容を s141-s146 マシンの /home/hdfs/.ssh/authorized_keys に追加します。他のマシンには authorized_keys ファイルがないため、id_rsa.pub の名前を authorized_keys に変更できます。他のマシンに authorized_keys ファイルがすでにある場合は、id_rsa.pub の内容をファイルに追加できます。リモート コピーの場合は、scp コマンドを使用できます。 s141マシンの公開鍵を他のマシンにコピーする scp id_rsa.pub hdfs@s141:/home/hdfs/.ssh/id_rsa_141.pub scp id_rsa.pub hdfs@s142:/home/hdfs/.ssh/id_rsa_141.pub scp id_rsa.pub hdfs@s143:/home/hdfs/.ssh/id_rsa_141.pub scp id_rsa.pub hdfs@s144:/home/hdfs/.ssh/id_rsa_141.pub scp id_rsa.pub hdfs@s145:/home/hdfs/.ssh/id_rsa_141.pub scp id_rsa.pub hdfs@s146:/home/hdfs/.ssh/id_rsa_141.pub s146マシンの公開鍵を他のマシンにコピーする scp id_rsa.pub hdfs@s141:/home/hdfs/.ssh/id_rsa_146.pub scp id_rsa.pub hdfs@s142:/home/hdfs/.ssh/id_rsa_146.pub scp id_rsa.pub hdfs@s143:/home/hdfs/.ssh/id_rsa_146.pub scp id_rsa.pub hdfs@s144:/home/hdfs/.ssh/id_rsa_146.pub scp id_rsa.pub hdfs@s145:/home/hdfs/.ssh/id_rsa_146.pub scp id_rsa.pub hdfs@s146:/home/hdfs/.ssh/id_rsa_146.pub 各マシンでcatを使用してキーをauthorized_keysファイルに追加できます。 cat id_rsa_141.pub >> authorized_keys cat id_rsa_146.pub >> authorized_keys このとき、authorized_keys ファイルの権限を 644 に変更する必要があります (この権限の問題により、ssh パスワードなしログインが失敗することが多いことに注意してください) chmod 644 承認済みキー 3. Hadoop 設定ファイル (${hadoop_home}/etc/hadoop/) を設定します。 構成の詳細: 注: s141 と s146 は、特に ssh に関してはまったく同じ構成になっています。 1) ネームサービスを構成する [hdfs-site.xml] <プロパティ> <name>dfs.nameservices</name> <値>mycluster</値> </プロパティ>
[hdfs-site.xml] <!-- myucluster の下の名前ノードの 2 つの ID --> <プロパティ> <name>dfs.ha.namenodes.mycluster</name> <値>nn1,nn2</値> </プロパティ> 3) dfs.namenode.rpc-address.[ネームサービスID].[ネームノードID] [hdfs-site.xml] 各 nn の rpc アドレスを設定します。 <プロパティ> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <値>s141:8020</値> </プロパティ> <プロパティ> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <値>s146:8020</値> </プロパティ> 4) dfs.namenode.http-address.[ネームサービスID].[ネームノードID] [hdfs-site.xml] <プロパティ> <name>dfs.namenode.http-address.mycluster.nn1</name> <値>s141:50070</値> </プロパティ> <プロパティ> <name>dfs.namenode.http-address.mycluster.nn2</name> <値>s146:50070</値> </プロパティ> 5) dfs.namenode.shared.edits.dir [hdfs-site.xml] <プロパティ> <name>dfs.namenode.shared.edits.dir</name> <値>qjournal://s142:8485;s143:8485;s144:8485/mycluster</値> </プロパティ> 6) dfs.client.failover.proxy.provider.[ネームサービスID] [hdfs-site.xml] <プロパティ> <name>dfs.client.failover.proxy.provider.mycluster</name> <値>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</値> </プロパティ> 7) dfs.ha.フェンシング.メソッド [hdfs-site.xml] <プロパティ> <name>dfs.ha.fencing.methods</name> <値>sshfence</値> </プロパティ> <プロパティ> <name>dfs.ha.fencing.ssh.秘密鍵ファイル</name> <値>/home/hdfs/.ssh/id_rsa</値> </プロパティ> 8) fs.defaultFS [コアサイト.xml] <プロパティ> <name>fs.defaultFS</name> <値>hdfs://mycluster</値> </プロパティ> 9) dfs.journalnode.edits.dir [hdfs-site.xml] <プロパティ> <name>dfs.journalnode.edits.dir</name> <値>/home/hdfs/hadoop/journal</値> </プロパティ> 完全な構成ファイル: コアサイト.xml <?xml バージョン="1.0" エンコーディング="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <構成> <プロパティ> <name>fs.defaultFS</name> <値>hdfs://mycluster/</値> </プロパティ> <プロパティ> <name>hadoop.tmp.dir</name> <値>/home/hdfs/hadoop</値> </プロパティ> </構成> hdfs-サイト.xml <?xml バージョン="1.0" エンコーディング="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <構成> <プロパティ> <name>dfs.replication</name> <値>3</値> </プロパティ> <プロパティ> <name>dfs.hosts</name> <値>/opt/soft/hadoop/etc/dfs.include.txt</値> </プロパティ> <プロパティ> <name>dfs.hosts.exclude</name> <値>/opt/soft/hadoop/etc/dfs.hosts.exclude.txt</値> </プロパティ> <プロパティ> <name>dfs.nameservices</name> <値>mycluster</値> </プロパティ> <プロパティ> <name>dfs.ha.namenodes.mycluster</name> <値>nn1,nn2</値> </プロパティ> <プロパティ> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <値>s141:8020</値> </プロパティ> <プロパティ> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <値>s146:8020</値> </プロパティ> <プロパティ> <name>dfs.namenode.http-address.mycluster.nn1</name> <値>s141:50070</値> </プロパティ> <プロパティ> <name>dfs.namenode.http-address.mycluster.nn2</name> <値>s146:50070</値> </プロパティ> <プロパティ> <name>dfs.namenode.shared.edits.dir</name> <値>qjournal://s142:8485;s143:8485;s144:8485/mycluster</値> </プロパティ> <プロパティ> <name>dfs.client.failover.proxy.provider.mycluster</name> <値>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</値> </プロパティ> <プロパティ> <name>dfs.ha.fencing.methods</name> <値>sshfence</値> </プロパティ> <プロパティ> <name>dfs.ha.fencing.ssh.秘密鍵ファイル</name> <値>/home/hdfs/.ssh/id_rsa</値> </プロパティ> <プロパティ> <name>dfs.journalnode.edits.dir</name> <値>/home/hdfs/hadoop/journal</値> </プロパティ> </構成> マップレッドサイト.xml <?xml バージョン="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <構成> <プロパティ> <name>mapreduce.framework.name</name> <value>糸</value> </プロパティ> </構成> 糸サイト.xml <?xml バージョン="1.0"?> <構成> <!-- サイト固有の YARN 構成プロパティ --> <プロパティ> <name>yarn.resourcemanager.ホスト名</name> <値>s141</値> </プロパティ> <プロパティ> <name>yarn.nodemanager.aux-services</name> <値>mapreduce_shuffle</値> </プロパティ> </構成> 4. 展開の詳細 1) jnノード上でそれぞれjnプロセス(s142、s143、s144)を起動する hadoop-daemon.sh ジャーナルノードを起動します 2) jnを起動した後、2つのNN間でディスクメタデータを同期します。 a) まったく新しいクラスターの場合は、まずファイル システムをフォーマットします。これは 1 つの NN でのみ実行する必要があります。 hadoop ネームノード -フォーマット b) 非 HA クラスターを HA クラスターに変換する場合は、元の NN のメタデータを別の NN にコピーします。 1. ステップ1 s141マシンで、hadoopデータをs146に対応するディレクトリにコピーします。 scp -r /home/hdfs/hadoop/dfs hdfs@s146:/home/hdfs/hadoop/ 2. 手順 2: 新しい nn (フォーマットされていない nn、私の場合は s146) で次のコマンドを実行して、スタンバイ モードで起動します。注意: s141namenode を起動する必要があります (hadoop-daemon.sh start namenode を実行できます)。 hdfs ネームノード -bootstrapStandby s141 名前ノードが起動されていない場合は、図に示すように失敗します。 s141ネームノードを起動した後、s141でコマンドを実行します。 hadoop-daemon.sh ネームノードを起動します 次に、スタンバイ ブート コマンドを実行します。注意: フォーマットするかどうかを尋ねられた場合は、図に示すように N を選択します。 3. ステップ3 いずれかの NN で次のコマンドを実行して、編集ログの jn ノードへの送信を完了します。 hdfs ネームノード -initializeSharedEdits 実行中に java.nio.channels.OverlappingFileLockException エラーが報告された場合: namenode が起動しており、停止する必要があることを示します (hadoop-daemon.sh stop namenode) 実行後、s142、s143、s144 に編集データがあるかどうかを確認します。ここでは、次のように編集ログデータを含む mycluster ディレクトリが生成されていることを確認します。 4. ステップ4 すべてのノードを起動します。 s141 上の名前ノードとすべてのデータノードを起動します。 hadoop-daemon.sh ネームノードを起動します hadoop-daemons.sh データノードを起動する s146で名前ノードを起動する hadoop-daemon.sh ネームノードを起動します この時点で、ブラウザで http://192.168.30.141:50070/ と http://192.168.30.146:50070/ にアクセスすると、両方のネームノードがスタンバイ状態であることがわかります。 このとき、コマンドを使用して手動で1つをアクティブ状態に切り替える必要があります。ここでは、s141(nn1)をアクティブに設定します。 hdfs haadmin -transitionToActive nn1 現時点ではs141がアクティブです hdfs haadmin の一般的なコマンド: この時点で、手動の災害復旧高可用性構成は完了ですが、この方法はインテリジェントではなく、災害復旧を自動的に感知できないため、次に自動災害復旧構成を紹介します。 5. 自動災害復旧構成 2 つのコンポーネントを導入する必要があります: zookeeperquarum と zk 災害復旧コントローラー (ZKFC) Zookeeper クラスターを構築し、3 台のマシン s141、s142、s143 を選択し、zookeeper をダウンロードします: http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.6 1) Zookeeper を解凍します。 tar -xzvf apache-zookeeper-3.5.6-bin.tar.gz -C /opt/soft/zookeeper-3.5.6 2) 環境変数を設定し、/etc/profileにzk環境変数を追加し、/etc/profileファイルを再コンパイルします。 次のようにコードをコピーします。 ソース /etc/profile 3) zk設定ファイルを設定し、3台のマシンの設定ファイルを統合する # 各ティックのミリ秒数 ティックタイム=2000 # 初期値であるティック数 # 同期フェーズは 初期制限=10 # 通過できるティック数 # リクエストを送信し、確認応答を受け取る 同期制限=5 # スナップショットが保存されるディレクトリ。 # /tmpをストレージとして使用しないでください。ここでの/tmpは # 例のため。 データディレクトリ=/home/hdfs/zookeeper # クライアントが接続するポート クライアントポート=2181 # クライアント接続の最大数。 # より多くのクライアントを処理する必要がある場合は、これを増やします #最大クライアント接続数=60 # # 必ずメンテナンスセクションをお読みください # 自動消去をオンにする前に管理者ガイドを参照してください。 # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # dataDir に保持するスナップショットの数 #自動パージ.スナップ保持カウント=3 # 消去タスク間隔(時間単位) # 自動パージ機能を無効にするには「0」に設定します #自動パージ.パージ間隔=1 サーバー.1=s141:2888:3888 サーバー2=s142:2888:3888 サーバー3=s143:2888:3888 4) それぞれ s141 の /home/hdfs/zookeeper ディレクトリ (zoo.cfg 構成ファイルで設定された dataDir パス) に、値 1 (zoo.cfg 構成ファイルの server.1 に対応) の myid ファイルを作成します。 s142 の /home/hdfs/zookeeper ディレクトリ (zoo.cfg 構成ファイルで構成された dataDir パス) に、値 2 (zoo.cfg 構成ファイルの server.2 に対応) の myid ファイルを作成します。 s143 の /home/hdfs/zookeeper ディレクトリ (zoo.cfg 構成ファイルで設定された dataDir パス) に、値 3 (zoo.cfg 構成ファイルの server.3 に対応) の myid ファイルを作成します。 5) 各マシンでzkを個別に起動する zkServer.sh 開始 起動が成功すると、zk プロセスが表示されます。 HDFs 関連の設定を構成します。 1) すべてのHDFSプロセスを停止する すべて停止.sh 2) hdfs-site.xml を構成し、自動災害復旧を有効にします。 [hdfs-site.xml] <プロパティ> <name>dfs.ha.automatic-failover.enabled</name> <値>真</値> </プロパティ> 3) core-site.xml を設定し、zk の接続アドレスを指定します。 <プロパティ> <name>ha.zookeeper.quorum</name> <値>s141:2181、s142:2181、s143:2181</値> </プロパティ> 4) 上記の 2 つのファイルをすべてのノードに配布します。 5) NNの1つ(s141)で、ZKのHA状態を初期化する hdfs zkfc -formatZK 次の結果は成功を示します。 zk でも確認できます: 6) HDFSクラスタを起動する dfs.shを起動します 各マシンのプロセスを表示します。 起動に成功しました。WebUIをご覧ください s146が起動します s141はスタンバイモードです この時点で、Hadoop自動災害復旧HAが構築されます。 要約する 以上、centos7 上で hadoop2.10 の高可用性 (HA) を構築する方法についてご紹介しました。参考になれば幸いです。 以下もご興味があるかもしれません:
|
<<: vue3でDOMをマウントするためのプラグインを書く際の問題について
>>: Vue3.0 は虫眼鏡効果のケーススタディを実装します
CSS 3.0 とビデオを組み合わせて実現したクリエイティブなオープニングをご紹介します。効果は次の...
目次React Hooks に基づく状態共有の実装ユーザーエクスペリエンスこの記事では、主に Rea...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
1. 分散ストレージシステムの概要情報技術の継続的な発展により、利便性がもたらされる一方で、データ量...
以前はMySQLをあまり使用していなかったため、MySQLの機能にあまり詳しくありませんでした。この...
成果を達成する 実装コードhtml <div class="wrap"&g...
事前に言っておくNodejs はデータベースを非同期操作として読み取るため、データベースがデータを読...
1. 埋め込みは違法です<embed> タグは Netscape のプライベート タグで...
この記事では、期間限定フラッシュセール機能を実装するためのJavaScriptの具体的なコードを参考...
序文この記事では、Windows 10 システムで MySQL を完全に削除してアンインストールする...
MySQL バージョン 5.5 および 5.6 を標的とする Riddle 脆弱性により、中間者攻撃...
各ブラウザの select タグのプロパティと各ブラウザのサポートが多少異なるため、各ブラウザでの選...
目次導入なぜわざわざ?落とし穴のあるコミュニティソリューション(Vue を例に挙げる)現時点では良い...
背景グループでは、CSS を使用してインセット コーナー ボタンを実装する方法や、矢印付きのボタンを...
CSS変数の知識を使って、追加したコードとコメントを直接投稿します <!DOCTYPE htm...