ビッグ データ - データで遊ぶ - FLINK (Yarn モード) のインストールと展開

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

おすすめ

転載: blog.csdn.net/s_unbo/article/details/130524930