【Flink原理和应用】:Flink的Yarn模式安装部署

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxcaifly/article/details/84966527

一. 快速启动

在YARN上启动一个长时间运行的Flink集群

启动一个带有4个TaskManager的YARN会话(每一个TaskManager分配4GB的堆内存):

# 从Flink下载页下载hadoop2下载包。
# 下载地址为:http://flink.apache.org/downloads.html
curl -O <flink_hadoop2_download_url>
tar xvzf flink-1.6.1-bin-hadoop2.tgz
cd flink-1.6.1/
./bin/yarn-session.sh -n 4 -jm 1024m -tm 4096m

特别地 -s参数表示每个Task Manager的slot数量。一般我们推荐slot的数量为机器的处理器个数(核数)。

当YARN会话启动之后,就可以用./bin/flink工具来向集群提交任务了。

在YARN上运行Flink任务

curl -O <flink_hadoop2_download_url>
tar xvzf flink-1.6.1-bin-hadoop2.tgz
cd flink-1.6.1/
./bin/flink run -m yarn-cluster -yn 4 -yjm 1024m -ytm 4096m ./examples/batch/WordCount.jar

二. Flink YARN会话

Apache Hadoop YARN是一个集群资源管理框架。它允许在集群上运行各种分布式应用程序。Flink在YARN上运行,与其他应用程序类似。如果已经设置了YARN,则用户无需设置或安装任何内容。

要求

  • 至少是Apache Hadoop 2.2
  • HDFS (Hadoop Distributed File System) (或者被Hadoop支持的其他的分布式文件系统)

启动Flink会话

按照以下说明学习如何在YARN集群内启动Flink会话。

会话将启动所有需要的Flink服务(JobManager和TaskManager),以便您可以向集群提交程序。注意,每个会话可以运行多个程序。

下载Flink
下载Flink安装包,Hadoop >= 2。该包包含了我们要求的所有文件。
提取包:

tar xvzf flink-1.6.1-bin-hadoop2.tgz
cd flink-1.6.1/

启动会话
利用下面命令来启动会话:

./bin/yarn-session.sh

该命令的相关参数如下:

用法:
要求参数
-n,–container 分配的YARN容器数量(=Task Managers的数量)
可选参数
-D 动态配置参数
-d,–detached Start detached
-jm,–jobManagerMemory 分配给Job Manager容器的内存(default: MB)
-nm,–name 给YARN分配一个名字
-q,–query 展现可用的YARN资源(内存,核数)
-qu,–queue 指定YARN队列.
-s,–slots 每个TaskManager的slot数量
-tm,–taskManagerMemory 分配个人TaskManager的内存 (default: MB)
-z,–zookeeperNamespace 为HA模式创建ZK子目录的命名空间

请注意,客户端需要设置YARN_CONF_DIR或HADOOP_CONF_DIR环境变量以读取YARN和HDFS配置。

例如:下面这条指令是启动一个YARN会话,分配10个TaskManager,然后每个TaskManager的内存大小分配8G,并且每个TaskManagers分配了32个slots。

./bin/yarn-session.sh -n 10 -tm 8192 -s 32

YARN上的Flink将覆盖以下配置参数jobmanager.rpc.address(因为JobManager总是在不同的机器上分配)、taskmanager.tmp.dirs(我们正在使用YARN给出的tmp目录)和parallelism.default(如果指定了槽的数量)。

如果不想更改配置文件来设置配置参数,可以选择-D标志传递动态属性。比如利用下面这种方式来传递参数: -Dfs.overwrite-files=true -Dtaskmanager.network.memory.min=536346624。

示例调用启动11个容器(尽管只请求了10个容器),因为还需要一个额外的容器分配给ApplicationMaster和Job Manager。

在YARN集群中部署Flink之后,它将向您显示Job Manager的连接细节。

通过停止unix进程(使用CTRL+C)或向客户端输入“stop”来停止YARN会话。

只有在集群上有足够的可用资源时,YARN上的Flink才会启动所有请求的容器。大多数YARN调度程序负责容器的请求内存,有些还负责vcore的数量。默认情况下,vcore的数量等于处理slot(-s)参数。vcores允许用自定义值覆盖vcore的数量。为了使这个参数工作,您应该在集群中启用CPU调度。

独立YARN会话
如果不希望一直运行Fllink的YARN客户端,也可以启动独立的YARN会话。它的参数称为-d或–detached。

在这种情况下,Flink的YARN客户端将只向集群提交Flink, 然后关闭自身。注意,在这种情况下,不可能使用Flink停止YARN会话。

利用YARN工具 (yarn application -kill ) 来停止YARN会话.

附加到现有会话
使用以下命令启动会话:

./bin/yarn-session.sh

此命令将显示以下概述:

Required
-id,–applicationId YARN application Id

如前所述,必须设置YARN_CONF_DIR或HADOOP_CONF_DIR环境变量以读取YARN和HDFS配置。

示例:发出以下命令以附加到正在运行的Flink YARN会话application_1463870264508_0029:

./bin/yarn-session.sh -id application_1463870264508_0029

附加到正在运行的会话将使用YARN ResourceManager来确定作业管理器RPC端口。

通过停止unix进程(使用CTRL+C)或向客户端输入“stop”来停止YARN会话。

提交任务的Flink

使用以下命令向YARN集群提交Flink程序:

./bin/flink

相关参数,请参阅:command-line client
该命令将向您显示如下帮助菜单:

[...]
Action "run" compiles and runs a program.

  Syntax: run [OPTIONS] <jar-file> <arguments>
  "run" action arguments:
     -c,--class <classname>           Class with the program entry point ("main"
                                      method or "getPlan()" method. Only needed
                                      if the JAR file does not specify the class
                                      in its manifest.
     -m,--jobmanager <host:port>      Address of the JobManager (master) to
                                      which to connect. Use this flag to connect
                                      to a different JobManager than the one
                                      specified in the configuration.
     -p,--parallelism <parallelism>   The parallelism with which to run the
                                      program. Optional flag to override the
                                      default value specified in the
                                      configuration

使用run操作向YARN提交作业。客户端能够确定JobManager的地址。在偶尔出现问题的情况下,还可以使用-m参数传递JobManager地址。JobManager地址在YARN控制台中可见。

示例

wget -O LICENSE-2.0.txt http://www.apache.org/licenses/LICENSE-2.0.txt
hadoop fs -copyFromLocal LICENSE-2.0.txt hdfs:/// ...
./bin/flink run ./examples/batch/WordCount.jar \
        hdfs:///..../LICENSE-2.0.txt hdfs:///.../wordcount-result.txt

如果有以下错误,请确保所有TaskManager都已启动:

Exception in thread "main" org.apache.flink.compiler.CompilerException:
    Available instances could not be determined from job manager: Connection timed out.

您可以在JobManager网络接口中检查TaskManager的数量。此接口的地址打印在YARN会话控制台中。

如果任务管理器一分钟后没有出现,则应该使用日志文件调查问题。

在YARN上运行单个Flink作业

上面的文档描述了如何在Hadoop YARN环境中启动Flink集群。也可以仅在YARN内启动Flink,用于执行单个作业。

请注意,客户机期望设置-yn值(TaskManager的数量)。

示例

./bin/flink run -m yarn-cluster -yn 2 ./examples/batch/WordCount.jar

YARN会话的命令行选项也可以使用./bin/flink工具。它们前缀有y或yarn(用于长参数选项)。

注意:可以通过设置环境变量FLINK_CONF_DIR,为每个作业使用不同的配置目录。若要使用此副本,请从Flink发行版复制conf目录,并根据每个作业修改日志设置。

User jars & Classpath

默认情况下,Flink在运行单个作业时将包含用户jar到系统类路径中。可以使用yarn.per-job-cluster.include-user-jar参数控制此行为。

当将此设置为DISABLED时,Flink将包括用户类Classpath。

可以通过将参数设置为下列参数之一来控制Classpath中的用户jar位置:

  • ORDER: (default) 根据字典顺序将jar添加到系统类路径。
  • FIRST: 将jar添加到系统类路径的开头。
  • LAST: 将jar添加到系统类路径的末尾。

恢复Flink在YARN上的行为

Flink的YARN客户端具有以下配置参数,用于控制在容器发生故障时的行为。这些参数既可以从conf/flink-conf.yaml设置,也可以在启动YARN会话时使用-D参数设置。

  • yarn.reallocate-failed: 此参数控制Flink是否应该重新分配失败的TaskManager容器,Default:
    true。
  • yarn.maximum-failed-containers:ApplicationMaster在YARN会话失败之前接受的最大失败容器数量,Default:
    最初请求的TaskManagers的数量(-n)。
  • yarn.application-attempts: ApplicationMaster(+它的TaskManager容器)尝试的次数。如果将该值设置为1(默认),则当Application Master失败时,整个YARN会话将失败。较高的值指定由YARN重新启动ApplicationMaster的次数。

Debugging失败的YARN会话

Flink YARN会话部署失败的原因有很多。配置错误的Hadoop设置(HDFS权限、YARN配置)、版本不兼容(在Cloudera Hadoop上运行Flink要依赖于特定版本的Hadoop)或其他错误。

日志文件

Flink YARN会话在部署过程中失败的情况下,用户必须依赖Hadoop YARN的日志记录能力。最有用的特性是YARN日志聚合。为了启用它,用户必须在yarn-site.xml文件中将yarn.log-aggregation-enable属性设置为true。启用此功能后,用户可以使用以下命令来检索(失败的)YARN会话的所有日志文件。

yarn logs -applicationId <application ID>

请注意,会话完成之后需要几秒钟,直到日志显示出来。

YARN客户端控制台 & Web界面

Flink YARN客户端在运行时出现错误时(例如,如果任务管理器在一段时间后停止工作),也在终端中打印错误消息。

除此之外,还有YARN资源管理器网络接口(默认情况下在端口8088上)。资源管理器网络接口的端口由yarn.resourcemanager.webapp.address配置值决定。

它允许访问运行YARN应用程序的日志文件,并显示失败应用程序的诊断。

背景/内部

本章节简要描述了Flink和YARN如何交互。

YARN客户端需要访问Hadoop配置以连接到YARN资源管理器和HDFS。它使用以下策略确定Hadoop配置:

  • 测试是否设置了YARN_CONF_DIR、HADOOP_CONF_DIR或HADOOP_CONF_PATH(按照该顺序)。如果设置了这些变量之一,则使用它们读取配置。
  • 如果上面的策略失败(在正确的YARN设置中不应该出现这种情况),客户端将使用HADOOP_HOME环境变量。如果设置了,客户端尝试访问$HADOOP_HOME/etc/hadoop(Hadoop 2)和$HADOOP_HOME/conf(Hadoop 1)。
    在这里插入图片描述

当启动新的Flink YARN会话时,客户端首先检查请求的资源(容器和内存)是否可用。之后,它将包含Flink和配置的jar上传到HDFS(步骤1)。

客户端的下一步是请求(步骤2)YARN容器启动ApplicationMaster(步骤3)。由于客户机将配置和jar-file注册为容器的资源,所以运行在该特定机器上的YARN的NodeManager将负责准备容器(例如,下载文件)。完成之后,启动ApplicationMaster(AM)。

JobManager和AM在同一个容器中运行。一旦它们成功启动,AM就知道JobManager(它自己的主机)的地址。它为TaskManagers生成一个新的Flink配置文件(以便它们可以连接到JobManager)。该文件也被上传到HDFS。此外,AM容器还为Flink的网络接口提供服务。YARN代码分配的所有端口都是临时端口。这允许用户并行执行多个Flink YARN会话。

之后,AM开始为Flink的任务管理器分配容器,这将从HDFS下载jar文件和修改后的配置。完成这些步骤后,Flink就设置好了,准备接受Jobs。

猜你喜欢

转载自blog.csdn.net/hxcaifly/article/details/84966527