Flink部署——Resource Providers之Apache Hadoop YARN

前言

Resource Providers有以下三种:

  • Standalone
  • Native Kubernetes
  • yarn

本文正是要将yarn,其他两个在Flink官网可查看。

入门

本入门部分将指导您在 YARN 上设置功能齐全的 Flink 集群。

简介

Apache Hadoop YARN是一个在许多数据处理框架中流行的资源提供程序。Flink 服务提交给 YARN 的 ResourceManager,它在 YARN NodeManager 管理的机器上生成容器。Flink 将其 JobManager 和 TaskManager 实例部署到此类容器中。

Flink 可以根据 JobManager 上运行的作业所需的处理槽数动态分配和取消分配 TaskManager 资源。

准备

本入门部分假定 YARN 环境从 2.8.5 版本开始。通过 Amazon EMR、Google Cloud DataProc 等服务或 Cloudera 等产品可以最方便地提供 YARN 环境。不建议在本地或集群上手动设置 YARN 环境来完成本入门教程。

  • 通过运行 确保您的 YARN 集群已准备好接受 Flink 应用程序yarn top。它应该不显示错误消息。
  • 从下载页面下载最近的 Flink 发行版并解压。
  • 重要确保HADOOP_CLASSPATH设置了环境变量(可以通过运行检查echo $HADOOP_CLASSPATH)。如果没有,请使用
    export HADOOP_CLASSPATH=hadoop classpath

在 YARN 上启动 Flink 会话

一旦你确定HADOOP_CLASSPATH环境变量设置好了,你就可以启动一个 Flink on YARN 会话,并提交一个示例作业:

# we assume to be in the root directory of 
# the unzipped Flink distribution

# (0) export HADOOP_CLASSPATH
export HADOOP_CLASSPATH=`hadoop classpath`

# (1) Start YARN Session
./bin/yarn-session.sh --detached

# (2) You can now access the Flink Web Interface through the
# URL printed in the last lines of the command output, or through
# the YARN ResourceManager web UI.

# (3) Submit example job
./bin/flink run ./examples/streaming/TopSpeedWindowing.jar

# (4) Stop YARN session (replace the application id based 
# on the output of the yarn-session.sh command)
echo "stop" | ./bin/yarn-session.sh -id application_XXXXX_XXX

恭喜!通过在 YARN 上部署 Flink,您已成功运行 Flink 应用程序。

Flink 在 YARN 上支持的部署模式

对于生产使用,我们建议以Per-job 或 Application Mode部署 Flink 应用程序,因为这些模式为应用程序提供了更好的隔离。

yarn-application 模式

Application Mode 将在 YARN 上启动 Flink 集群,其中应用程序 jar 的 main() 方法在 YARN 中的 JobManager 上执行。应用程序完成后,集群将立即关闭。yarn application -kill 您可以使用或取消 Flink 作业手动停止集群。

./bin/flink run-application -t yarn-application ./examples/streaming/TopSpeedWindowing.jar

部署应用程序模式集群后,您可以与其交互以执行取消或获取保存点等操作。

# List running job on the cluster
./bin/flink list -t yarn-application -Dyarn.application.id=application_XXXX_YY
# Cancel running job
./bin/flink cancel -t yarn-application -Dyarn.application.id=application_XXXX_YY <jobId>

请注意,取消应用程序集群上的作业将停止集群。

要释放应用程序模式的全部潜力,请考虑将其与yarn.provided.lib.dirs配置选项一起使用,并将您的应用程序 jar 预上传到集群中所有节点都可以访问的位置。在这种情况下,命令可能如下所示:

./bin/flink run-application -t yarn-application \
	-Dyarn.provided.lib.dirs="hdfs://myhdfs/my-remote-flink-dist-dir" \
	hdfs://myhdfs/jars/my-application.jar

以上将允许作业提交更加轻量级,因为所需的 Flink jar 和应用程序 jar 将由指定的远程位置拉取,而不是由客户端运送到集群。

per job 模式

Per-job Cluster 模式会在 YARN 上启动一个 Flink 集群,然后在本地运行提供的应用程序 jar,最后将 JobGraph 提交到 YARN 上的 JobManager。如果您传递–detached参数,一旦提交被接受,客户端将停止。

一旦作业停止,YARN 集群将停止。

./bin/flink run -t yarn-per-job --detached ./examples/streaming/TopSpeedWindowing.jar

部署 Per-Job 集群后,您可以与其交互以执行取消或获取保存点等操作。

# List running job on the cluster
./bin/flink list -t yarn-per-job -Dyarn.application.id=application_XXXX_YY
# Cancel running job
./bin/flink cancel -t yarn-per-job -Dyarn.application.id=application_XXXX_YY <jobId>

yarn session 模式

会话模式有两种操作模式:

  • 附加模式(默认):yarn-session.sh客户端将 Flink 集群提交给 YARN,但客户端一直在运行,跟踪集群的状态。如果集群失败,客户端将显示错误。如果客户端被终止,它也会发出集群关闭的信号。
  • 分离模式(-d或–detached):yarn-session.sh客户端将 Flink 集群提交给 YARN,然后客户端返回。需要再次调用客户端或 YARN 工具来停止 Flink 集群。

会话模式将在 /tmp/.yarn-properties- 中创建一个隐藏的 YARN 属性文件,提交作业时,命令行界面将选取该文件以进行群集发现。

您也可以在提交 Flink 作业时在命令行界面中手动指定目标 YARN 集群。这是一个例子:

./bin/flink run -t yarn-session \
  -Dyarn.application.id=application_XXXX_YY \
  ./examples/streaming/TopSpeedWindowing.jar

您可以使用以下命令重新附加到 YARN 会话:

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

除了通过文件传递配置外conf/flink-conf.yaml,您还可以在提交时./bin/yarn-session.sh使用-Dkey=value参数将任何配置传递给客户端。

YARN 会话客户端也有一些常用设置的“快捷参数”。它们可以用 列出./bin/yarn-session.sh -h。

Flink on YARN 参考

在 YARN 上配置 Flink

YARN 特定的配置列在配置页面上

以下配置参数由 Flink on YARN 管理,因为它们可能在运行时被框架覆盖:

  • jobmanager.rpc.address(Flink on YARN动态设置为JobManager容器的地址)
  • io.tmp.dirs(如果不设置,Flink 设置 YARN 定义的临时目录)
  • high-availability.cluster-id(HA服务中自动生成ID区分多个集群)

如果你需要向 Flink 传递额外的 Hadoop 配置文件,你可以通过HADOOP_CONF_DIR环境变量来完成,它接受一个包含 Hadoop 配置文件的目录名。默认情况下,所有必需的 Hadoop 配置文件都是通过HADOOP_CLASSPATH环境变量从类路径加载的。

资源分配行为

如果在 YARN 上运行的 JobManager 无法使用现有资源运行所有提交的作业,它将请求额外的 TaskManager。特别是在会话模式下运行时,如果需要,JobManager 将在提交额外作业时分配额外的 TaskManager。超时后未使用的 TaskManager 会再次被释放。

JobManager 和 TaskManager 进程的内存配置将受到 YARN 实现的制约。默认情况下,报告的 VCore 数等于每个 TaskManager 配置的插槽数。yarn.containers.vcores允许使用自定义值覆盖vcore的数量。为了让这个参数起作用,你应该在你的 YARN 集群中启用 CPU 调度。

失败的容器(包括 JobManager)被 YARN 替换。JobManager容器重启的最大次数是通过yarn.application-attempts配置的(默认为 1)。一旦所有尝试都用尽,YARN 应用程序将失败。

YARN 上的高可用性

YARN 上的高可用性是通过 YARN 和高可用性服务的组合来实现的。

一旦配置了 HA 服务,它将持久化 JobManager 元数据并执行领导者选举。

YARN 负责重启失败的 JobManager。JobManager 的最大重启次数是通过两个配置参数定义的。首先 Flink 的yarn.application-attempts配置会默认为 2。这个值受 YARN 的yarn.resourcemanager.am.max-attempts限制,也默认为 2。

请注意,Flinkhigh-availability.cluster-id在 YARN 上部署时正在管理配置参数。Flink 将其默认设置为 YARN 应用程序 ID。 在 YARN 上部署 HA 集群时,不应覆盖此参数。集群 ID 用于区分 HA 后端(例如 Zookeeper)中的多个 HA 集群。覆盖此配置参数会导致多个 YARN 集群相互影响。

Container容器关闭行为

  • YARN 2.3.0 < version < 2.4.0 如果应用的appmaster失败,那么所有container都会重启
  • YARN 2.4.0 < version < 2.6.0 TaskManager 容器在应用程序主节点故障期间保持活动状态。这样做的优点是启动时间更快,并且用户不必等待再次获取容器资源。
  • YARN 2.6.0 <= version 将尝试失败有效间隔设置为 Flinks 的 Akka 超时值。尝试失败有效性间隔表示,只有在系统在一个时间间隔内看到应用程序尝试的最大次数后,应用程序才会被终止。这可以避免长时间的作业会耗尽其应用程序尝试次数。

Hadoop YARN 2.4.0 有一个主要 bug(在 2.5.0 中已修复),该错误阻止容器从重新启动的应用程序主机/作业管理器容器重新启动。有关详细信息,请参阅 FLINK-4142。我们建议至少使用Hadoop 2.5.0在YARN上进行高可用性设置。

支持的 Hadoop 版本

Flink on YARN 针对 Hadoop 2.8.5 编译,>= 2.8.5支持所有 Hadoop 版本,包括 Hadoop 3.x。

为了向 Flink 提供所需的 Hadoop 依赖项,我们建议设置已经在入门/准备HADOOP_CLASSPATH部分介绍的环境变量。

如果不行,也可以将依赖项放到lib/Flink 的文件夹中。

Flink 还提供了预先捆绑的 Hadoop fat jar,用于将它们放置在网站的Downloads / Additional Components部分的lib/文件夹中。这些预先捆绑的 fat jar 带有阴影,以避免与常见库的依赖冲突。Flink 社区没有针对这些预先捆绑的 jar 测试 YARN 集成。

在防火墙后面的 YARN 上运行 Flink

一些 YARN 集群使用防火墙来控制集群与网络其余部分之间的网络流量。在这些设置中,Flink 作业只能从集群网络内(防火墙后面)提交到 YARN 会话。如果这对于生产使用不可行,Flink 允许为其 REST 端点配置一个端口范围,用于客户端-集群通信。配置此范围后,用户还可以跨防火墙向 Flink 提交作业。

用于指定 REST 端点端口的配置参数是rest.bind-port。此配置选项接受单个端口(例如:“50010”)、范围(“50000-50025”)或两者的组合。

用户 jars & Classpath

会话模式

在 Yarn 上使用 Session Mode 部署 Flink 时,只有在启动命令中指定的 JAR 文件才会被识别为 user-jars 并包含在用户类路径中。

PerJob 模式和应用模式

在 Yarn 上以 PerJob/Application 模式部署 Flink 时,启动命令中指定的 JAR 文件和 Flinkusrlib文件夹中的所有 JAR 文件都会被识别为 user-jars。默认情况下,Flink 会将 user-jars 包含到系统类路径中。这种行为可以通过yarn.classpath.include-user-jar参数来控制。

当将此设置为DISABLEDFlink 时,会将 jar 包含在用户类路径中。

可以通过将参数设置为以下之一来控制类路径中的 user-jars 位置:

  • ORDER:(默认)根据字典顺序将 jar 添加到系统类路径中。
  • FIRST: 将 jar 添加到系统类路径的开头。
  • LAST:将 jar 添加到系统类路径的末尾。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

京河小蚁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值