Hadoopフレームワーク:HDFS高可用性環境構成

この記事のソースコード:GitHub・ここをクリック|| GitEE・ここをクリック

1.HDFSの高可用性

1.基本的な説明

単一ポイントまたは少数のノード障害の場合でも、クラスターは正常にサービスを提供できます。HDFS高可用性メカニズムは、アクティブ/スタンバイ2つのNameNodeノードを構成してクラスター内のNameNodeのホットスタンバイを実現することにより、単一ノード障害の問題を排除できます。単一のノードに障害が発生した場合、この方法でNameNodeを別のノードにすばやく切り替えることができます。

2.詳細なメカニズム

Hadoopフレームワーク:HDFS高可用性環境構成

  • 共有編集ファイルと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

現在のステータスを表示

Hadoopフレームワーク:HDFS高可用性環境構成

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

Hadoopフレームワーク:HDFS高可用性環境構成

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

Hadoopフレームワーク:HDFS高可用性環境構成

hop02のNameNodeプロセスを終了します

kill -9 14422

しばらく待って、hop01のステータスを確認してください

[root@hop01 hadoop2.7]# bin/hdfs haadmin -getServiceState nn1
active

3、YARNの高可用性

1.基本的な説明

Hadoopフレームワーク:HDFS高可用性環境構成

基本的なプロセスと考え方は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

Hadoopフレームワーク:HDFS高可用性環境構成

第四に、ソースコードアドレス

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・ここをクリック ☆☆☆☆☆

おすすめ

転載: blog.51cto.com/14439672/2544554