一.Flink和spark在处理数据的思想上有什么区别?
1.在Flink的世界观中,一切数据皆是流。离线的数据是有界的流,实时的数据是无界的流。
2.在Spark的世界观中,一切数据皆是批,流是特殊的批。
总结:Flink更底层,需要有更好的编程能力,API发展迅速,未来可期;Spark发展的相对更加完善和成熟,随着Structured Streaming的到来,也弥补了实时性不强的弱点。
二.Flink有哪些特点?
1.事件驱动型:根据event触发计算,状态更新和其他外部操作。类比kafka的消息队列
2.既可以进行流处理也可以进行批处理。
3.API分层:
三.Flink的逻辑架构是什么?
Client:提交,更新和取消 Job 的客户端。
JobManager:应用程序执行的主进程(应用程序含JobGraph,logical dataflow graph,含类,库及其他资源的JAR包)。将JobGraph转化成可并发执行的ExecutionGraph,请求slots资源,分发执行图到TaskManeger并协调checkpoint。
TaskManager:具体的工作进程,包含了一定数量的slots;TaskManager需要注册slots,资源才能被JobManager调用。
四.提交一个Flink任务几种方式?
1.启动yarn-session
./yarn-session.sh -n 2 -s 2 -jm 1024 -tm 1024 -nm test -d
2.取消yarn-session任务
yarn application --list (查询application的ID)
yarn application --kill application_1577588252906_0001
3.直接执行job
./flink run –m yarn-cluster -c com.baidu.wc.WordCount FlinkTutorial-1.0-SNAPSHOT-jar-with-dependencies.jar --host lcoalhost –port 4444
注释:
-n(--container):TaskManager数量。
-s(--slots): 每个TaskManager的slot数量。
-jm:JobManager的内存(单位MB)。
-tm:每个taskmanager的内存(单位MB)。
-nm:yarn 的appName(现在yarn的ui上的名字)。
-d:后台执行
五.如何在linux后台停止一个Flink的job任务?
flink list 查任务ID
flink cancel 任务ID
六.Flink的图有哪几层?都是在哪个阶段提出来的?
Flink 中的执行图可以分成四层:StreamGraph -> JobGraph ->ExecutionGraph -> 物理执行图。
StreamGraph: 用户根据StreamAPI 编写代码生成的最初的图,用来表示程序的拓扑结构。
JobGraph:StreamGraph经过优化后生成了JobGraph,提交给 JobManager 的数据结构。主要的优化为,将多个符合条件的节点 chain 在一起作为一个节点,这样可以减少数据在节点之间流动所需要的序列化/反序列化/传输消耗。
ExecutionGraph:JobManager 根据 JobGraph 生成ExecutionGraph。ExecutionGraph是JobGraph的并行化版本,是调度层最核心的数据结构。
物理执行图:JobManager 根据 ExecutionGraph 对 Job 进行调度后,在各个TaskManager 上部署 Task 后形成的“图”,并不是一个具体的数据结构。
七.Flink中如何优化shuffle?
将产生shuffle的任务放在同一个slot中 执行,减少IO消耗。
八.Flink中设置的并行度优先等级?
代码中算子设置的并行度>代码中全局设置的并行度>web页面配置参数>conf配置文件中设置
九. 为什么多个task可以合并成一个task?
具有one-to-one操作和并行度相同的相邻算子可以合并task
十.如何判断一个程序中需要多少个slot?
一段程序需要的slot数量一般设置成所有任务中设置的最大并行度数。