この記事のソースコード:GitHub・ここをクリック|| GitEE・ここをクリック
1.HDFSの高可用性
1.基本的な説明
単一ポイントまたは少数のノード障害の場合でも、クラスターは正常にサービスを提供できます。HDFS高可用性メカニズムは、アクティブ/スタンバイ2つのNameNodeノードを構成してクラスター内のNameNodeのホットスタンバイを実現することにより、単一ノード障害の問題を排除できます。単一のノードに障害が発生した場合、この方法でNameNodeを別のノードにすばやく切り替えることができます。
2.詳細なメカニズム
- 共有編集ファイルとZookeeperクラスターに依存する2つのNameNodeに基づく高可用性。
- 各NameNodeノードはZKfailoverプロセスで構成され、NameNodeノードのステータスを監視します。
- NameNodeは、ZooKeeperクラスターとの永続的なセッションを維持します。
- アクティブノードに障害が発生してシャットダウンした場合、ZooKeeperはスタンバイ状態のNameNodeノードに通知します。
- ZKfailoverプロセスが、障害が発生したノードが機能できないことを検出して確認した後。
- ZKfailoverは、スタンバイ状態のNameNodeノードに、サービスを続行するためにアクティブ状態に切り替えるように通知します。
ZooKeeperは、ビッグデータシステムで非常に重要です。さまざまなコンポーネントの作業を調整し、データを維持および送信します。たとえば、高可用性での上記の自動フェイルオーバーは、ZooKeeperコンポーネントに依存します。
2、HDFSの高可用性
1.全体的な構成
サービスリスト | HDFSファイル | YARNスケジューリング | シングルサービス | 共有ドキュメント | Zkクラスター |
---|---|---|---|---|---|
hop01 | DataNode | NodeManager | NameNode | JournalNode | ZK-hop01 |
hop02 | DataNode | NodeManager | ResourceManager | JournalNode | ZK-hop02 |
hop03 | DataNode | NodeManager | SecondaryNameNode | JournalNode | ZK-hop03 |
2.JournalNodeを構成します
ディレクトリを作成する
[root@hop01 opt]# mkdir hopHA
Hadoopディレクトリをコピーします
cp -r /opt/hadoop2.7/ /opt/hopHA/
配置core-site.xml
<configuration>
<!-- NameNode集群模式 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hopHA/hadoop2.7/data/tmp</value>
</property>
</configuration>
hdfs-site.xmlを構成し、次のコンテンツを追加します
<!-- 分布式集群名称 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- 集群中NameNode节点 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!-- NN1 RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>hop01:9000</value>
</property>
<!-- NN2 RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>hop02:9000</value>
</property>
<!-- NN1 Http通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>hop01:50070</value>
</property>
<!-- NN2 Http通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hop02:50070</value>
</property>
<!-- 指定NameNode元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hop01:8485;hop02:8485;hop03:8485/mycluster</value>
</property>
<!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
<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>
<!-- 声明journalnode服务器存储目录-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/hopHA/hadoop2.7/data/jn</value>
</property>
<!-- 关闭权限检查-->
<property>
<name>dfs.permissions.enable</name>
<value>false</value>
</property>
<!-- 访问代理类失败自动切换实现方式-->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
ジャーナルノードサービスを順番に開始します
[root@hop01 hadoop2.7]# pwd
/opt/hopHA/hadoop2.7
[root@hop01 hadoop2.7]# sbin/hadoop-daemon.sh start journalnode
hopHAの下のデータを削除します
[root@hop01 hadoop2.7]# rm -rf data/ logs/
NN1形式でNameNodeを開始します
[root@hop01 hadoop2.7]# pwd
/opt/hopHA/hadoop2.7
bin/hdfs namenode -format
sbin/hadoop-daemon.sh start namenode
NN2はNN1データを同期します
[root@hop02 hadoop2.7]# bin/hdfs namenode -bootstrapStandby
NN2がNameNodeを開始します
[root@hop02 hadoop2.7]# sbin/hadoop-daemon.sh start namenode
現在のステータスを表示
NN1ですべてのDataNodeを開始します
[root@hop01 hadoop2.7]# sbin/hadoop-daemons.sh start datanode
NN1がアクティブ状態に切り替わります
[root@hop01 hadoop2.7]# bin/hdfs haadmin -transitionToActive nn1
[root@hop01 hadoop2.7]# bin/hdfs haadmin -getServiceState nn1
active
3.フェイルオーバー構成
hdfs-site.xmlを構成します。新しいコンテンツは次のとおりです。クラスターを同期します。
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
core-site.xmlを構成します。新しいコンテンツは次のとおりです。クラスターを同期します。
<property>
<name>ha.zookeeper.quorum</name>
<value>hop01:2181,hop02:2181,hop03:2181</value>
</property>
すべてのHDFSサービスを閉じる
[root@hop01 hadoop2.7]# sbin/stop-dfs.sh
Zookeeperクラスターを開始します
/opt/zookeeper3.4/bin/zkServer.sh start
hop01はZookeeperのHA状態を初期化します
[root@hop01 hadoop2.7]# bin/hdfs zkfc -formatZK
hop01はHDFSサービスを開始します
[root@hop01 hadoop2.7]# sbin/start-dfs.sh
NameNodeノードがZKFailoverを開始します
ここで、最初に開始されたhop01とhop02のサービスステータスはアクティブであり、hop02が最初に開始されます。
[hadoop2.7]# sbin/hadoop-daemon.sh start zkfc
hop02のNameNodeプロセスを終了します
kill -9 14422
しばらく待って、hop01のステータスを確認してください
[root@hop01 hadoop2.7]# bin/hdfs haadmin -getServiceState nn1
active
3、YARNの高可用性
1.基本的な説明
基本的なプロセスと考え方はHDFSメカニズムに似ており、Zookeeperクラスターに依存しています。アクティブノードに障害が発生すると、スタンバイノードは継続的なサービスのためにアクティブ状態に切り替わります。
2.詳細な構成
環境もhop01とhop02に基づいて示されています。
クラスタの下でサービスを同期するようにyarn-site.xmlを構成します
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--启用HA机制-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--声明Resourcemanager服务-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster-yarn01</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hop01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hop02</value>
</property>
<!--Zookeeper集群的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hop01:2181,hop02:2181,hop03:2181</value>
</property>
<!--启用自动恢复机制-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--指定状态存储Zookeeper集群-->
<property>
<name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
</configuration>
ジャーナルノードノードを再起動します
sbin/hadoop-daemon.sh start journalnode
NN1サービスをフォーマットして開始します
[root@hop01 hadoop2.7]# bin/hdfs namenode -format
[root@hop01 hadoop2.7]# sbin/hadoop-daemon.sh start namenode
NN2でNN1メタデータを同期します
[root@hop02 hadoop2.7]# bin/hdfs namenode -bootstrapStandby
クラスタの下でDataNodeを起動します
[root@hop01 hadoop2.7]# sbin/hadoop-daemons.sh start datanode
NN1がアクティブ状態に設定されている
最初にhop01を開始し、次にhop02を開始します。
[root@hop01 hadoop2.7]# sbin/hadoop-daemon.sh start zkfc
hop01スタートヤーン
[root@hop01 hadoop2.7]# sbin/start-yarn.sh
hop02 startResourceManager
[root@hop02 hadoop2.7]# sbin/yarn-daemon.sh start resourcemanager
ステータスを確認する
[root@hop01 hadoop2.7]# bin/yarn rmadmin -getServiceState rm1
第四に、ソースコードアドレス
GitHub·地址
https://github.com/cicadasmile/big-data-parent
GitEE·地址
https://gitee.com/cicadasmile/big-data-parent
推奨読書:仕上げプログラミングシステム
シリアルナンバー | プロジェクト名 | GitHubアドレス | GitEEアドレス | 推奨 |
---|---|---|---|---|
01 | Javaは、設計パターン、アルゴリズム、およびデータ構造を記述します | GitHub・ここをクリック | GitEE・ここをクリック | ☆☆☆☆☆ |
02 | Javaの基盤、並行性、オブジェクト指向、Web開発 | GitHub・ここをクリック | GitEE・ここをクリック | ☆☆☆☆ |
03 | SpringCloudマイクロサービスの基本コンポーネントケースの詳細な説明 | GitHub・ここをクリック | GitEE・ここをクリック | ☆☆☆ |
04 | SpringCloudマイクロサービスアーキテクチャの実際の戦闘の包括的なケース | GitHub・ここをクリック | GitEE・ここをクリック | ☆☆☆☆☆ |
05 | SpringBootフレームワークの基本的なアプリケーションから高度なものまで | GitHub・ここをクリック | GitEE・ここをクリック | ☆☆☆☆ |
06 | SpringBootフレームワークは、一般的なミドルウェアを統合および開発します | GitHub・ここをクリック | GitEE・ここをクリック | ☆☆☆☆☆ |
07 | データ管理、配布、アーキテクチャ設計の基本的なケース | GitHub・ここをクリック | GitEE・ここをクリック | ☆☆☆☆☆ |
08 | ビッグデータシリーズ、ストレージ、コンポーネント、コンピューティング、その他のフレームワーク | GitHub・ここをクリック | GitEE・ここをクリック | ☆☆☆☆☆ |