Flink on YARN单机部署全攻略:从环境配置到作业提交
2025.09.17 11:04浏览量:0简介:本文详细阐述Flink on YARN单机部署的全流程,涵盖环境准备、依赖安装、配置优化及作业提交等关键环节,助力开发者快速搭建高效流处理环境。
一、环境准备与依赖安装
1.1 硬件与软件要求
单机部署Flink on YARN需满足基础硬件条件:建议CPU核心数≥4、内存≥16GB、磁盘空间≥100GB(用于存储日志及临时文件)。操作系统推荐CentOS 7/8或Ubuntu 20.04 LTS,需确保系统已安装Java 11(LTS版本)并配置JAVA_HOME
环境变量。通过java -version
验证安装,输出应包含11.x.x
版本号。
1.2 Hadoop与YARN环境配置
YARN作为资源管理器,需单独部署Hadoop 3.x版本。步骤如下:
- 下载Hadoop:从Apache官网获取二进制包(如hadoop-3.3.4.tar.gz),解压至
/opt/hadoop
。 - 配置环境变量:在
~/.bashrc
中添加:export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- 修改核心配置:
etc/hadoop/core-site.xml
:设置HDFS默认路径<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
etc/hadoop/hdfs-site.xml
:配置单节点HDFS<property>
<name>dfs.replication</name>
<value>1</value>
</property>
etc/hadoop/mapred-site.xml
:启用YARN作为MapReduce框架<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
etc/hadoop/yarn-site.xml
:调整内存分配<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8192</value>
</property>
- 格式化HDFS并启动服务:
通过hdfs namenode -format
start-dfs.sh
start-yarn.sh
jps
验证进程(应包含NameNode
、DataNode
、ResourceManager
、NodeManager
)。
二、Flink安装与YARN集成
2.1 Flink二进制包部署
从Apache Flink官网下载与Hadoop兼容的版本(如flink-1.17.0-bin-scala_2.12.tgz),解压至/opt/flink
。修改conf/flink-conf.yaml
关键配置:
# 指定YARN作为任务管理器
jobmanager.rpc.address: localhost
taskmanager.numberOfTaskSlots: 4 # 根据CPU核心数调整
yarn.application.name: Flink-on-YARN-Demo
2.2 YARN会话模式配置
2.2.1 启动YARN会话
执行以下命令启动Flink集群:
/opt/flink/bin/yarn-session.sh \
-n 2 \ # 任务管理器数量
-tm 2048 \ # 每个任务管理器内存(MB)
-jm 1024 \ # JobManager内存(MB)
-Dyarn.application.name=Flink-Session # 自定义应用名
成功启动后,终端会输出YARN应用ID(如application_123456789_0001
)及Web UI地址(默认http://localhost:8088
)。
2.2.2 客户端连接配置
若需从其他节点提交作业,需在flink-conf.yaml
中添加:
rest.address: localhost # 或YARN NodeManager的IP
rest.port: 8081
通过netstat -tulnp | grep 8081
验证端口监听状态。
三、作业提交与调试
3.1 示例作业开发
使用Maven创建Flink项目,依赖如下:
<dependencies>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.12</artifactId>
<version>1.17.0</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients_2.12</artifactId>
<version>1.17.0</version>
</dependency>
</dependencies>
编写简单WordCount作业:
public class YarnWordCount {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<String> text = env.readTextFile("hdfs://localhost:9000/input.txt");
DataStream<Tuple2<String, Integer>> counts = text
.flatMap(new Tokenizer())
.keyBy(value -> value.f0)
.sum(1);
counts.print();
env.execute("Flink YARN WordCount");
}
public static class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {
@Override
public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
for (String word : value.split("\\s+")) {
out.collect(new Tuple2<>(word, 1));
}
}
}
}
3.2 作业提交与监控
3.2.1 提交到YARN会话
/opt/flink/bin/flink run \
-m yarn-cluster \ # 指定YARN模式
-yn 2 \ # 任务管理器数量
-yjm 1024 \ # JobManager内存
-ytm 2048 \ # 任务管理器内存
-c com.example.YarnWordCount \
/path/to/your-job.jar
3.2.2 监控作业状态
- YARN Web UI:访问
http://localhost:8088
,查看应用状态、日志及资源使用。 - Flink Web UI:通过YARN应用日志中的
tracking URL
访问(如http://localhost:8081
)。 - 命令行工具:
yarn application -list # 列出所有应用
yarn application -status <APP_ID> # 查看特定应用状态
四、常见问题与优化
4.1 内存不足错误
现象:Container killed by YARN for exceeding memory limits
解决方案:
- 调整
yarn-site.xml
中的yarn.nodemanager.resource.memory-mb
。 - 在提交作业时增加
-ytm
和-yjm
参数值。 - 检查Flink任务是否存在内存泄漏(如未关闭的
DataSet
)。
4.2 作业提交失败
现象:Application application_xxx failed 2 times
排查步骤:
- 查看YARN日志:
yarn logs -applicationId <APP_ID>
。 - 检查HDFS权限:确保Flink用户有读写权限。
- 验证网络连通性:使用
telnet localhost 8088
测试端口可达性。
4.3 性能优化建议
- 并行度调整:根据数据量设置
env.setParallelism(N)
。 - 检查点配置:启用检查点保障容错:
env.enableCheckpointing(5000); // 每5秒一次
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
- 资源动态分配:在
flink-conf.yaml
中启用:taskmanager.memory.process.size: 4096m
yarn.containers.vcores: 2 # 为每个TaskManager分配2个虚拟核
五、总结与扩展
Flink on YARN单机部署适合开发测试及轻量级生产场景。通过YARN的动态资源管理,可高效利用单机资源。未来可扩展至:
- 高可用配置:启用ZooKeeper实现JobManager HA。
- Kerberos集成:在安全环境中部署。
- Kubernetes迁移:将资源管理从YARN切换至K8s。
通过本文的详细步骤与优化建议,开发者可快速完成Flink on YARN的单机部署,并构建稳定的流处理管道。
发表评论
登录后可评论,请前往 登录 或 注册