基于Yarn搭建Flink

基于Yarn搭建Flink

1. 概述

1.1 Yarn 简介

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

在这里插入图片描述

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

1.2 Flink的重要角色

  • JobManager:类似spark中master,负责资源申请,任务分发,任务调度执行,checkpoint的协调执行;可以搭建HA,双master。

  • TaskManager:类似spark中的worker,负责任务的执行,基于dataflow(spark中DAG)划分出的task;与jobmanager保持心跳,汇报任务状态。

在这里插入图片描述

2. Yarn环境准备

本环境基于Hadoop-3.1.4搭建,可以参考《Hadoop3.1.4分布式搭建》

  • 通过运行 yarn top 来确保您的 YARN 集群已准备好接受 Flink 应用程序。它应该不显示任何错误消息。

    yarn top
    

在这里插入图片描述

  • 从下载页面下载最近的 Flink 发行版并解压缩。

    wget https://archive.apache.org/dist/flink/flink-1.15.4/flink-1.15.4-bin-scala_2.12.tgz
    
  • 重要事项 请确保设置了HADOOP_CLASSPATH环境变量(可以通过运行 echo $HADOOP_CLASSPATH 进行检查)。如果没有,请配置使用。

    for i in {133..135} 151 157;
    do
    	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
    	scp ~/Downloads/flink-1.15.4-bin-scala_2.12.tgz ubuntu@10.10.10.$i:~/;
    	ssh ubuntu@10.10.10.$i 'sudo mkdir -p /opt/software/; \
    	#sudo rm -f /etc/profile.d/Z99-wntime-env-config.sh; \
    	sudo touch /etc/profile.d/Z99-wntime-env-config.sh; \
    	sudo tar -zxf ~/flink-1.15.4-bin-scala_2.12.tgz -C /opt/software/;';
    	# config env
    	rm -rf /tmp/"10.10.10.$i"/;
    	mkdir -p /tmp/"10.10.10.$i"/;
    	scp ubuntu@10.10.10.$i:/etc/profile.d/Z99-wntime-env-config.sh /tmp/"10.10.10.$i"/Z99-wntime-env-config.sh;
    	sudo cat>>/tmp/"10.10.10.$i"/Z99-wntime-env-config.sh<<EOF
    # HADOOP_CLASSPATH
    export HADOOP_CLASSPATH=\`hadoop classpath\`
    export FLINK_HOME=/opt/software/flink-1.15.4
    export PATH=\$PATH:\$FLINK_HOME/bin  
    
    EOF
    	cat /tmp/10.10.10.$i/Z99-wntime-env-config.sh;
    	scp /tmp/10.10.10.$i/Z99-wntime-env-config.sh ubuntu@10.10.10.$i:~/Z99-wntime-env-config.sh;
    	ssh ubuntu@10.10.10.$i 'sudo mv ~/Z99-wntime-env-config.sh /etc/profile.d/Z99-wntime-env-config.sh; \
    	sudo chmod +x /etc/profile.d/Z99-wntime-env-config.sh; \
    	source /etc/profile; \
    	echo $HADOOP_CLASSPATH;'	
    done;
    
    

    配置conf及权限

    for i in {133..135} 151 157;
    do
    	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
    	ssh ubuntu@10.10.10.$i 'sudo chown -R ubuntu:ubuntu /opt/software/; \
    	source /etc/profile; \
    	flink -v;';
    done;
    
    
    for i in {133..135} 151 157;
    do
    	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
    	# 指定jobmanager,yarn模式会被覆盖不起作用;
    	ssh ubuntu@10.10.10.$i "sed -i 's/jobmanager.rpc.address: localhost/jobmanager.rpc.address: k8s-m134/g' /opt/software/flink-1.15.4/conf/flink-conf.yaml";
    	ssh ubuntu@10.10.10.$i "sed -i 's/host: localhost/host: 0.0.0.0/g' /opt/software/flink-1.15.4/conf/flink-conf.yaml";
    	ssh ubuntu@10.10.10.$i "sed -i 's/address: localhost/address: 0.0.0.0/g' /opt/software/flink-1.15.4/conf/flink-conf.yaml";
    	# yarn模式仍旧起作用;
    	ssh ubuntu@10.10.10.$i "sed -i 's/#web.submit.enable: false/web.submit.enable: true/g' /opt/software/flink-1.15.4/conf/flink-conf.yaml";
    	ssh ubuntu@10.10.10.$i "sed -i 's/#web.cancel.enable: false/web.cancel.enable: true/g' /opt/software/flink-1.15.4/conf/flink-conf.yaml";
    	ssh ubuntu@10.10.10.$i "sed -i 's/# io.tmp.dirs: \/tmp/io.tmp.dirs: \/opt\/software\/flink-1.15.4\/data/g' /opt/software/flink-1.15.4/conf/flink-conf.yaml";
        ssh ubuntu@10.10.10.$i "sed -i 's/#rest.port: 8081/#rest.port: 8081\nrest.flamegraph.enabled: true/g' /opt/software/flink-1.15.4/conf/flink-conf.yaml";
        # classloader.check-leaked-classloader
        ssh ubuntu@10.10.10.$i "sed -i 's/# classloader.resolve-order: child-first/# classloader.resolve-order: child-first\nclassloader.check-leaked-classloader: false/g' /opt/software/flink-1.15.4/conf/flink-conf.yaml";
    done;
    
    

3. FLINK 在 YARN 上支持的部署模式

对于生产使用,官方建议在 Application Mode下部署Flink应用程序,因为它可以在应用程序之间提供更好的隔离。

3.1 Session Mode

此部署模式,共享jobmanager和taskmanager,所有的job都在一个runtime中运行。

在这里插入图片描述

  • 优点:
    • 启动集群只有jobmanager,提交job才去yarn申请资源启动taskmanager,任务完成自动释放taskmanager,资源伸缩性好。
    • 资源利用率高。
  • 缺点:
    • 资源隔离性差
开启flink yarn-session集群
使用bin/yarn-session.sh --help 查看可用参数

在这里插入图片描述

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

  • attached mode(默认):yarn-session.sh 客户端将 Flink 集群提交到 YARN,但客户端继续运行,跟踪集群的状态。如果群集失败,客户端将显示错误。如果客户端被终止,它也会向群集发出关闭信号。

  • detached mode(-d 或 --detached):yarn-session.sh 客户端将 Flink 集群提交到 YARN,然后客户端返回。需要再次调用客户端或 YARN 工具来停止 Flink 集群。

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

# 输出
2023-05-30 13:33:24,304 INFO  org.apache.flink.yarn.YarnClusterDescriptor                  [] - Found Web Inter
JobManager Web Interface: http://k8s-m135:38027
2023-05-30 13:33:24,541 INFO  org.apache.flink.yarn.cli.FlinkYarnSessionCli                [] - The Flink YARN
$ echo "stop" | ./bin/yarn-session.sh -id application_1685349449822_0003
If this should not be possible, then you can also kill Flink via YARN's web interface or via:
$ yarn application -kill application_1685349449822_0003
Note that killing Flink might not clean up all job artifacts and temporary files.

此时 Flink JobManager 运行在 k8s-m135节点,WebUI访问地址 http://k8s-m135:38027

在这里插入图片描述

也可以通过Yarn WebUI访问

在这里插入图片描述
在这里插入图片描述

提交任务
  • 方式一,指定flink集群,application_1685349449822_0006是flink集群yarn app-id
./bin/flink run -t yarn-session -c org.apache.flink.streaming.examples.windowing.TopSpeedWindowing -Dyarn.application.id=application_1685349449822_0007 ./examples/streaming/TopSpeedWindowing.jar

注意:

若未指定 -c fullclassname时,报以下错误:

在这里插入图片描述

若未指定 -Dyarn.application.id时,可能报与上面同样错误,或No ExecutorFactory found to execute the application

测试最终需要同时指定 -c 及 -Dyarn.application.id,任务才能正常启动

在这里插入图片描述

/tmp/.yarn-properties-ubuntu已发现,但不知什么原因未生效。

  • 方式二,在flink web界面上传jar包提交
停止flink yarn-session集群
  • 进入客户端交互界面
./bin/yarn-session.sh -id application_1685349449822_0003
优雅地停止任务
echo "stop" | ./bin/yarn-session.sh -id application_1685349449822_0003
  • 强制杀掉任务
yarn application -kill application_1685349449822_0003

NOTE: 启动集群只有jobmanager,提交job才去yarn申请资源启动taskmanager,任务完成自动释放taskmanager

3.2 Per-Job Mode (deprecated)

独享jobmanager和taskmanager,为每一个job独胆启动一个runtime

在这里插入图片描述

  • 优点:
    • 资源充分隔离
  • 劣势:
    • 资源相对比较浪费

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

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

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

若提示以下错误,需要在conf/flink-conf.yml配置classloader.check-leaked-classloader: false

在这里插入图片描述

配置后无报错

在这里插入图片描述

一旦部署了“Per-Job Cluster”,就可以与它交互以执行、取消或获取保存点等操作。

# 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>

3.3 Application Mode

application的main()运行在jobmanager上,而不是在客户端。每一个application对应一个runtime,application中可以含有多个job。

在这里插入图片描述

  • 优点:
    • job graph在flink集群内部生成,可以减轻客户端压力
    • application实现了更合理的资源隔离策略
  • 缺点:
    • 新功能,尚未经过生产大规模验证
开启flink yarn-application集群
./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

停止flink yarn-application集群
./bin/flink cancel -t yarn-application -Dyarn.application.id=application_XXXX_YY <jobId>

注意:

当同时运行多个任务时,会出现有的任务一直处于ACCEPTED

在这里插入图片描述

解决这个问题,只需要更改Hadoop的配置文件:…/etc/hadoop/capacity-scheduler.xml

选项:yarn.scheduler.capacity.maximum-am-resource-percent从0.1改成更大,最大为1;

意思是集群中可用于运行应用程序主机的最大资源百分比 - 控制并发活动应用程序的数量。每个队列的限制与其队列容量和用户限制成正比。官方文档默认是每个队列最大使用10%的资源,即0.1

yarn.scheduler.capacity.maximum-am-resource-percent

for i in {133..135} 151 157;
do
	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
	ssh ubuntu@10.10.10.$i 'cat /opt/software/hadoop-3.1.4/etc/hadoop/capacity-scheduler.xml|grep "percent";';
	# 这个配置文件中只有这个是percent,所以直接修改了
	ssh ubuntu@10.10.10.$i "sed -i 's/<value>0.1<\/value>/<value>0.5<\/value>/' /opt/software/hadoop-3.1.4/etc/hadoop/capacity-scheduler.xml;";
done;

<think>好的,我现在需要帮用户介绍如何在YARN搭建Flink集群。首先,我得回忆一下FlinkYARN的基本概念。Flink是一个流处理框架,支持批处理和流处理,而YARNHadoop的资源管理器,负责集群资源的调度。基于YARN部署Flink可以让Flink利用YARN的资源管理功能,方便在已有Hadoop集群上运行。 接下来,我应该考虑搭建的前提条件。用户需要已经安装好Hadoop集群,并且确保YARN正常运行。可能还需要JDK,因为Flink是基于Java的。版本兼容性也很重要,比如FlinkHadoop的版本是否匹配,用户需要检查官方文档确认兼容性。 然后,步骤大概包括下载Flink、配置环境变量、修改Flink的配置文件,比如yarn-site.xml相关的配置,设置YARN的Application Master的内存等。然后通过命令行提交作业到YARN。可能还需要配置高可用性、日志聚合这些高级特性,但用户如果只是基础搭建,可能先关注基本步骤。 需要提醒用户注意的地方,比如网络配置,确保Flink能够访问YARN的资源管理器。还有资源分配的问题,比如每个TaskManager的内存和CPU设置是否合理,避免资源冲突。另外,安全方面,如果集群开启了Kerberos认证,可能需要额外的配置。 可能用户在实际操作中会遇到问题,比如提交作业后无法启动,这时候需要查看YARN的日志,或者Flink的日志,帮助诊断问题。常见的错误可能有端口冲突、内存不足、类路径问题等。 另外,用户可能想知道如何验证集群是否搭建成功,比如提交一个示例作业,看是否能正常运行。或者通过YARN的Web UI查看Flink应用的状态。 最后,应该总结一下步骤,让用户有个清晰的流程,从准备环境到配置,再到提交作业,验证结果。可能还需要给出一些参考链接,比如官方文档或者相关的配置示例,方便用户深入阅读。</think>以下为基于YARN搭建Apache Flink集群的详细步骤: --- ### 一、前置条件 1. **Hadoop集群**:版本建议≥2.4(需包含YARN) 2. **Flink安装包**:从[官网](https://flink.apache.org/downloads.html)下载与Hadoop兼容的版本(选择`Pre-bundled Hadoop`版本) 3. **环境变量**: ```bash export HADOOP_CONF_DIR=/path/to/hadoop/etc/hadoop # Hadoop配置文件目录 export HADOOP_CLASSPATH=`hadoop classpath` # Hadoop类路径 ``` --- ### 二、核心配置 修改Flink配置文件 `conf/flink-conf.yaml`: ```yaml # 指定YARN为部署模式 execution.target: yarn-per-job # 或 yarn-session # 设置JobManager内存(默认1GB) jobmanager.memory.process.size: 2048m # 设置TaskManager内存(默认1GB) taskmanager.memory.process.size: 4096m # 配置高可用(可选) high-availability: zookeeper high-availability.storageDir: hdfs:///flink/ha/ high-availability.zookeeper.quorum: zk1:2181,zk2:2181,zk3:2181 ``` --- ### 三、部署模式 #### 1. Session Cluster(常驻集群) ```bash # 启动YARN Session ./bin/yarn-session.sh -nm MyFlinkSession -jm 2048m -tm 4096m -s 2 # 参数说明: # -nm 应用名称 # -jm JobManager内存 # -tm 每个TaskManager内存 # -s 每个TaskManager的Slot数量 ``` #### 2. Per-Job Cluster(作业独立集群) ```bash # 直接提交作业到YARN ./bin/flink run -t yarn-per-job -yjm 2048m -ytm 4096m ./examples/streaming/WordCount.jar ``` --- ### 四、验证部署 1. **YARN Web UI**:访问 `http://<yarn-resourcemanager>:8088` 查看运行中的Flink应用 2. **Flink Dashboard**:通过YARN Application详情页链接访问Flink Web UI 3. **日志查看**: ```bash yarn logs -applicationId <application_id> ``` --- ### 五、关键配置项 | 配置文件 | 关键参数 | 说明 | |-------------------|-----------------------------------|-----------------------------| | `flink-conf.yaml` | `yarn.application.name` | 在YARN上显示的应用名称 | | | `yarn.application.queue` | 指定YARN队列 | | `log4j.properties`| `rootLogger.appenderRef.file.ref`| 日志输出路径配置 | --- ### 六、常见问题 1. **端口冲突**:修改`conf/flink-conf.yaml`中的`rest.port` 2. **类路径错误**:检查`HADOOP_CLASSPATH`是否包含Hadoop依赖 3. **内存不足**:增加`jobmanager.memory.process.size`和`taskmanager.memory.process.size` > 建议参考[官方文档](https://ci.apache.org/projects/flink/flink-docs-stable/deployment/resource-providers/yarn.html)获取最新配置指南。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值