1. Yarn HA モードで Flink を使用する理由
デフォルトでは、Flink には JobManager が 1 つだけあり、単一障害点が発生します。JobManager HA を使用すると、クラスターは単一障害点から回復できるため、単一障害点を回避できます。スタンドアロンで Flink クラスター HA を構成できます。または Flink on Yarn クラスター (高可用性)。実際、Flink on Yarn の高可用性は、主に Yarn のタスク回復メカニズムを使用することによって実現されます。Yarn は実稼働環境に推奨されます。
まず、クラスターが実行されている場合、MapReduce、Spark、Flink などを含むクラスター インスタンスが多数存在する可能性があります。それらがすべて Yarn に基づいている場合、リソース割り当てを完了できるため、単一インスタンス クラスターのメンテナンスが軽減され、パフォーマンスが向上します。クラスターの使用率。
第 2 に、Flink はビッグ データ コンピューティング フレームワークであり、リソース スケジューリング フレームワークではありませんが、これは Flink の強みではありません。したがって、プロフェッショナルなフレームワークにはプロフェッショナルな作業を許可する必要があり、他のリソース スケジューリング フレームワークとの統合はより信頼性が高くなります。現在のビッグ データ エコロジーにおいて、中国で最も広く使用されているリソース管理プラットフォームは YARN です。Flink が強力な YARN プラットフォームにどのように統合され、展開されるか。全体として、YARN でのデプロイメント プロセスは次のとおりです。クライアントは Flink アプリケーションを Yarn の ResourceManager に送信し、Yarn の ResourceManager は Yarn の NodeManager からコンテナーを申請します。これらのコンテナ上で、Flink は JobManager と TaskManager のインスタンスをデプロイし、クラスターを開始します。Flink は、JobManager で実行されているジョブに必要なスロットの数に応じて、TaskManager リソースを動的に割り当てます。
さらに、Flink on Yarn モードのインストールとデプロイメントは、実際にはそれほどやるべきことはなく、通常の手順は、バイナリ パッケージをアップロードし、解凍し、ファイル名を変更し、環境変数を設定することです。
さらに、Fink on Yarn には 2 つのメモリ管理モードがあります。
集中メモリ管理モード: Yarn で Flink クラスターを初期化し、指定されたリソースを開くと、送信するすべての Flink J がこの Flink 糸セッションに含まれます。つまり、どれだけ多くのジョブが送信されたとしても、これらのジョブはでリクエストされたリソースの先頭で、yarn 内のリソースを共有します。この Flink クラスターは、手動で停止しない限り、Yarn クラスター内に常駐します。
メモリ ジョブ管理モード [推奨使用法]: Yarn では、ジョブが送信されるたびに新しい Flink クラスターが作成され、タスクは互いに独立しており、相互に影響を与えず、管理が容易です。タスク実行完了後に作成されたクラスタも消滅します。
2. Flink on Yarn HA モードの展開
2.1. 基本的な環境構築
2.1.1. 仮想マシンのクローンを作成し、Hadoop ユーザーを作成する
Hadoop100、hadoop101、hadoop102、hadoop103、hadoop104 5 つの仮想マシン (仮想マシンの構成については、「仮想マシン環境」を参照) と補足情報
root ユーザーとしてログインし、hadoop ユーザーを作成し (useradd hadoop)、
hadoop パスワードを変更し (passwd hadoop)
、hadoop ユーザーに root 権限を付与します。
/etc/passwd ファイルを変更し、次の行を見つけて、ユーザー ID を次のように変更します。 0、以下に示すように:
admin:x:500:500:admin:/home/tommy:/bin/bash
への変更:
admin:x:0:500:admin:/home/tommy:/bin/bash
2.1.2. 仮想マシンのホスト名の変更
[root@hadoop100 ~]# vi /etc/hostname
再起動後に有効になります
2.1.3. 仮想マシンホストの変更
[root@hadoop100 ~]# vi /etc/hosts
2.1.4. 仮想マシンのパスワード不要ログインの設定
パスワード不要のログインに関するリファレンス
2.1.5. 仮想マシンのファイアウォールをオフにする
[root@hadoop100 ~]# systemctl disable firewalld
[root@hadoop100 ~]# chkconfig iptables off
2.1.6. カタログの企画
計画のインストール ディレクトリ: /home/hadoop/apps
計画のデータ ディレクトリ: /home/hadoop/data
注: アプリとデータ フォルダーは個別に作成する必要があります
2.1.7. JDK 1.8のインストールと設定
https://www.oracle.com/java/technologies/downloads/#java8
jdk-8u371-linux-x64.tar.gz をダウンロードし
、インストール パッケージを hadoop100 /home/hadoop/apps ディレクトリにアップロードします。そうでない場合は作成します。 。
解凍する
[root@hadoop100 apps]# tar -zxvf jdk-8u371-linux-x64.tar.gz
名前を変更する
[root@hadoop100 apps]# mv jdk1.8.0_371 jdk1.8
JAVA_HOMEの構成
[root@hadoop100 apps]# vi /etc/profile
最後に追加します
export JAVA_HOME=/home/hadoop/apps/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
[root@hadoop100 apps]# source /etc/profile
[root@hadoop100 apps]# java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
ディレクトリを他の 4 つのノードに配布し、環境を有効にします。
[root@hadoop100 apps]# scp -r /home/hadoop/apps/ hadoop101:/home/hadoop/apps/
[root@hadoop100 apps]# scp -r /etc/profile hadoop101:/etc/
[root@hadoop101 ~]# source /etc/profile
2.2. Hadoop クラスター環境のインストール
Hadoop ノード: hadoop100、hadoop101、hadoop102
2.2.1. Hadoop インストールパッケージのダウンロード
ダウンロードアドレス https://hadoop.apache.org/releases.html
バイナリは編集されています、ソース
を編集する必要があります hadoop-2.10.1.tar.gz をアプリディレクトリにコピーします、hadoop ユーザー
解凍する
[root@hadoop100 apps]# tar -zxvf hadoop-2.10.1.tar.gz
2.2.2. Hadoop関連の設定ファイルを変更する
[root@hadoop100 apps]# cd hadoop-2.10.1/etc/hadoop/
hadoop-env.sh を構成する
[root@hadoop100 hadoop]# vi hadoop-env.sh
export JAVA_HOME=/home/hadoop/apps/jdk1.8
export HADOOP_LOG_DIR=/home/hadoop/data/hadoop_repo/logs/hadoop
糸環境.shを設定する
[root@hadoop100 hadoop]# vi yarn-env.sh
export JAVA_HOME=/home/hadoop/apps/jdk1.8
export YARN_LOG_DIR=/home/hadoop/data/hadoop_repo/logs/yarn
core-site.xmlを構成する
[root@hadoop100 hadoop]# vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop100:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/data/hadoop_repo</value>
</property>
</configuration>
hdfs-site.xml を構成する
[root@hadoop100 hadoop]# vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>HDFS 的数据块的副本存储个数, 默认是3</description>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>hadoop100:50090</value>
<description>secondarynamenode 运行节点的信息,和 namenode 不同节点</description>
</property>
</configuration>
yarn-site.xml を設定する
[root@hadoop100 hadoop]# vi yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop100</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>YARN 集群为 MapReduce 程序提供的 shuffle 服务</description>
</property>
</configuration>
名前を変更するようにmapred-site.xmlを構成する
[root@hadoop100 hadoop]# mv mapred-site.xml.template mapred-site.xml
[root@hadoop100 hadoop]# vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
スレーブの構成
[root@hadoop100 hadoop]# vi slaves
hadoop101
hadoop102
2.2.3. ディストリビューションのインストールディレクトリ
hadoop100 上の変更された Hadoop インストール ディレクトリを他の 2 つのノード hadoop101、hadoop102 にコピーします。
[root@hadoop100 apps]# scp -r hadoop-2.10.1 hadoop101:/home/hadoop/apps/
2.2.4、HDFS フォーマット
/home/hadoop/apps/hadoop-2.10.1 ディレクトリ内の hadoop100 でフォーマットする
[root@hadoop100 hadoop-2.10.1]# bin/hdfs namenode -format
2.2.5、Hadoopを開始する
[root@hadoop100 hadoop-2.10.1]# sbin/start-all.sh
2.2.6. 検証
[root@hadoop100 hadoop-2.10.1]# jps
7248 NameNode
7444 SecondaryNameNode
7597 ResourceManager
7869 Jps
[root@hadoop101 hadoop]# jps
7204 Jps
6667 DataNode
7080 NodeManager
[root@hadoop102 hadoop]# jps
6697 DataNode
6810 NodeManager
6942 Jps
2.2.7. HADOOP_HOME 環境変数の設定
後続の操作の便宜のために、以前の JAVA_HOME に基づいて、HADOOP_HOME 構成済みの hadoop100が追加されます。
export JAVA_HOME=/home/hadoop/apps/jdk1.8
export HADOOP_HOME=/home/hadoop/apps/hadoop-2.10.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
2.3. ZooKeeper クラスターのインストール
hadoop100、hadoop101、hadoop102 で ZooKeeper クラスターを構成する
2.3.1. ZooKeeper インストールパッケージをダウンロードする
https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.8.1/apache-zookeeper-3.8.1-bin.tar.gz では
、bin パッケージ apache-zookeeper-3.8 をダウンロードする必要があります。 1-bin.tar.gz
Hadoopユーザーログイン(root権限あり)
[root@hadoop100 apps]# tar -zxvf apache-zookeeper-3.8.1-bin.tar.gz
2.3.2、Zookeeper の構成
ファイル名の変更
[root@hadoop100 apps]# mv apache-zookeeper-3.8.1-bin zookeeper-3.8.1
設定ファイルの名前変更
[root@hadoop100 apps]# cd apache-zookeeper-3.8.1-bin/conf
[root@hadoop100 conf]# mv zoo_sample.cfg zoo.cfg
データなしでzoo.cfgを設定し
、ログディレクトリを作成します。 注: ポートの後にスペースを入れることはできません
dataDir=/home/hadoop/apps/zookeeper-3.8.1/data
dataLogDir=/home/hadoop/apps/zookeeper-3.8.1/log
server.1=hadoop100:2888:3888
server.2=hadoop101:2888:3888
server.3=hadoop102:2888:3888
myid ファイルを作成し、ファイルに数字 0 を入力して
データ ディレクトリに移動します。
[root@hadoop100 data]# vi myid
1
管理の便宜のために、hadoop100 に Zookeeper 環境変数を追加します (以前の環境変数に基づいて)
export JAVA_HOME=/home/hadoop/apps/jdk1.8
export HADOOP_HOME=/home/hadoop/apps/hadoop-2.10.1
export ZOOKEEPER_HOME=/home/hadoop/apps/zookeeper-3.8.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
環境変数が有効になる
[root@hadoop100 apps]# source /etc/profile
構成されたインストール パッケージを hadoop101、hadoop102 ノードにコピーします。
[root@hadoop100 apps]# scp -r zookeeper-3.8.1/ hadoop101:/home/hadoop/apps/
hadoop101 ノードと hadoop102 ノードの myid を
それぞれ 2 と 3 に変更します
変更した環境変数ファイルを hadoop101 と hadoop102 に配布します
注: クラスター環境変数を専用に変更します 他のアプリケーションがインストールされている場合は、環境変数が上書きされることに注意してください、単独でのみ使用できます。
[root@hadoop100 apps]# scp /etc/profile hadoop101:/etc/
ソース 環境変数を hadoop101 と hadoop102 に有効にします
2.3.3. ZooKeeper クラスターの起動
hadoop100、hadoop101、hadoop102 でそれぞれ ZooKeeper を起動します
[root@hadoop100 apps]# zkServer.sh start
5040 SecondaryNameNode
6914 QuorumPeerMain
6949 Jps
4838 NameNode
5196 ResourceManager
2.3.4. 検証
QuorumPeerMain プロセスを確認すると、起動が成功したことがわかります。
[root@hadoop100 conf]# zkServer.sh status
3 つのホストをそれぞれチェックしたところ、
ZooKeeper にはリーダー ノードと 2 つのフォロワー ノードがあることがわかりました。
2.4 Yarn HA への Flink のインストール
YARN モードの高可用性の原理は、スタンドアロン モード (Standalone) の原理とは異なります。スタンドアロンモードでは、複数のジョブマネージャーが同時に起動され、1 つがリーダーとなり、他のジョブマネージャーがスタンバイとなり、リーダーが電話を切ると、他のジョブマネージャーの 1 つがリーダーになります。YARN の高可用性はジョブマネージャーを 1 つだけ起動することであり、ジョブマネージャーがハングアップすると YARN は別のジョブマネージャーを起動するため、実際には YARN のリトライ回数を利用して高可用性を実現します。
YARN にデプロイする場合、Flink が high-availability.cluster-id 構成パラメーターを管理することに注意してください。Flink は、デフォルトでこれを YARN アプリケーションの ID に設定します。YARN に HA クラスターをデプロイする場合は、このパラメーターをオーバーライドしないでください。クラスター ID は、HA バックエンド (Zookeeper など) の複数の HA クラスターを区別するために使用されます。この構成パラメーターをオーバーライドすると、複数の YARN クラスターが相互に対話します。
2.4.1. YarnのHadoop環境変更との比較
まず、hadoop100 の Yarn-site.xml でアプリケーションの送信試行の最大試行回数を設定し、仮想メモリをチェックしない値を設定します。そうしないと、 /home/hadoop/apps/hadoop-2.10 でエラーが報告されます。.1/etc/hadoop ディレクトリ ダウン
[root@hadoop100 hadoop]# vi yarn-site.xml
<property>
<name>yarn.resourcemanager.am.max-attempts</name>
<value>4</value>
<description>
The maximum number of application master execution attempts.
</description>
</property>
<!-- 设置不检查虚拟内存的值,不然内存不够会报错 -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
変更した設定ファイルをhadoop101、hadoop102に配布します。
[root@hadoop100 hadoop]# scp yarn-site.xml hadoop101:/home/hadoop/apps/hadoop-2.10.1/etc/hadoop/
Hadoop と Zookeeper クラスターを再起動します
2.4.1. Flink インストールパッケージをダウンロードする
https://www.apache.org/dyn/closer.lua/flink/flink-1.17.0/flink-1.17.0-bin-scala_2.12.tgz
2.3.2. Flink インストールパッケージを解凍します。
まず、hadoop100 で新しい Flink インストール パッケージを解凍します。
[root@BIGDATA ~] tar -zxvf flink-1.17.0-bin-scala_2.12.tgz
[root@BIGDATA ~]cd flink-1.17.0/
2.3.3. フリンクの設定
前述の内容に基づいて環境変数を追加します。
[root@hadoop100 apps]# vi /etc/profile
export JAVA_HOME=/home/hadoop/apps/jdk1.8
export HADOOP_HOME=/home/hadoop/apps/hadoop-2.10.1
export ZOOKEEPER_HOME=/home/hadoop/apps/zookeeper-3.8.1
export HADOOP_CLASSPATH=`hadoop classpath`
export FLINK_HOME=/home/hadoop/apps/flink-1.17.0export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$FLINK_HOME/bin
環境が有効になる
[root@hadoop100 apps]# source /etc/profile
flink-conf.yaml を構成する
[root@hadoop100 conf]# vi flink-conf.yaml
high-availability.type: zookeeper
# JobManager元数据保留在文件系统storageDir中 指向此状态的指针存储在ZooKeeper中
high-availability.storageDir: hdfs://hadoop100:9000/flink/ha-yarn
#
# # Zookeeper集群 修改自己的集群
high-availability.zookeeper.quorum: hadoop100:2181,hadoop101:2181
#
# # 在zookeeper下的根目录
high-availability.zookeeper.path.root: /flink_yarn
#
# # zookeeper节点下的集群ID 该节点下放置了集群所需的所有协调数据 多个flink集群连接同一套zookeeper集群需要配置各自不同的集群ID,官方建议这个配置最好去掉,因为在 Yarn(以及Mesos)模式下,cluster-id 如果不配置的话,会配置成 Yarn 上的 Application ID ,从而可以保证唯一性。 (不配,如果配的话,启动两个及以上job会报错)
#high-availability.cluster-id: /default_yarn
#
# # 单个flink job重启次数 必须小于等于yarn-site.xml中Application Master配置的尝试次数
yarn.application-attempts: 4
#
#如果 ZooKeeper 在 Kerberos 的安全模式下运行
#
## default is "zookeeper". If the ZooKeeper quorum is configured
## with a different service name then it can be supplied here.
#
#zookeeper.sasl.service-name: zookeeper
#
## default is "Client". The value needs to match one of the values
## configured in "security.kerberos.login.contexts".
#zookeeper.sasl.login-context-name: Client
前の環境変数に基づいて追加します
export HADOOP_CLASSPATH=`hadoop classpath`
[root@hadoop100 ~]# vi /etc/profile
export HADOOP_CLASSPATH=`hadoop classpath`
export JAVA_HOME=/home/hadoop/apps/jdk1.8
export HADOOP_HOME=/home/hadoop/apps/hadoop-2.10.1
export ZOOKEEPER_HOME=/home/hadoop/apps/zookeeper-3.8.1
export HADOOP_CLASSPATH=`hadoop classpath`
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
設定後に解凍したパッケージを hadoop101、hadoop102 に送信します。
2.3.4. Flink クラスターの起動
糸で Flink を開始するには、主に 2 つの方法があります。
Yarn セッションを開始します (Yarn クラスター内に常駐する Flink クラスターを初期化し、実行を継続します)
糸で Flink ジョブを直接送信して実行します (ジョブが糸クラスターに送信されるたびに、糸クラスターは Flink コレクションを初期化するためにリソースを開きます)
Flink は、yarn 上で実行される 3 つのモード、つまりアプリケーション モード (1.12)、セッション クラスター モード、ジョブ クラスターごとのモードを提供します。
アプリケーションモードではYarn上でクラスターが起動し、アプリケーションjarパッケージのメイン関数(ユーザークラスのメイン関数)がJobManager上で実行され、アプリケーションの実行が終了するとすぐにFlinkクラスターがシャットダウンされます。クラスターを手動で停止することもできます。ジョブごとのクラスターとの違い: アプリケーション モードでは、ユーザーのメイン機能はクラスター (ジョブ マネージャー) で実行されます。
公式提案:
運用ニーズの場合は、アプリケーションの分離が向上するため、ジョブごとまたはアプリケーション モードを使用することをお勧めします。
ジョブは Flink クラスターに対応します。送信された各ジョブは、ジョブの実行が完了するまで、それぞれの状況に応じてリソースの Yarn に個別に適用されます。ジョブの失敗は、次のジョブの通常の送信および操作には影響しません。オンデマンドでリソース アプリケーションを受け入れる専用のディスパッチャーとリソース マネージャー。大規模で長時間実行されるジョブに適しています。送信ごとに新しい flink クラスターが作成され、タスクは互いに独立しており、相互に影響を与えないため、管理に便利です。タスク実行完了後に作成されたクラスタも消滅します。
Yarn モードでの高可用性の原理はスタンドアロン モードとは異なります。スタンドアロン モードでは
、複数のジョブマネージャーが同時に起動され、1 つはリーダー、もう 1 つはスタンバイになります。リーダーに障害が発生すると、他の 1 つがジョブマネージャーになります。リーダー。
ヤーンの高可用性は、同時に 1 つのジョブマネージャーのみを開始することです。ジョブマネージャーがハングアップすると、ヤーンは再びジョブマネージャーを開始します。実際、高可用性は、ヤーンの再試行回数を使用することで実現されます。
/home/hadoop/apps/flink-1.17.0 ディレクトリのhadoop100 上で Flink on Yarn HA クラスターを開始します。
[root@hadoop100 flink-1.17.0]# bin/yarn-session.sh -n 2
2.3.5. 検証
http://192.168.220.100:8088/クラスター
https://blog.51cto.com/u_12902538/5394081
https://blog.csdn.net/wuxintdrh/article/details/106885847