Flink的并行度问题
Flink的并行度问题
package com.shujia.flink.core
import org.apache.flink.streaming.api.datastream.DataStreamSink
import org.apache.flink.streaming.api.scala._
object Demo4Parallelism {
def main(args: Array[String]): Unit = {
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
/**
* flink 的并行度
* 1、若代码中不设置并行度,提交任务的时候默认是1,可以在提交任务的时候指定并行度 参数: -p
* flink run -p 并行度的数量 -C 主类名 jar包名
*
* 2、代码中可以设置并行度 setParallelism ,代码的优先级比-p参数要高
* 3、每一个节点可以单独设置并行度
* 4、如果节点之前的关系没有产生 shuffle 并且并行度一致,
* 可以合并成一个task(就不用手动设置了)
*/
//设置默认的并行度
env.setParallelism(4)
//读取socket数据构建DS
val linesDS: DataStream[String] = env.socketTextStream("master", 8888)
linesDS.name("读取socket数据")
// .parallelism -- 获取DS的并行度
println(s"linesDS的并行度:${linesDS.parallelism}")
//结果发现 linesDS 的并行度还是1,并不是默认的4
//读取socket的并行度只能是1
//因为socket不支持同时被多个线程去读
/**
* 节点的并行度由默认并行度决定,
* 也可以单独设置每一个节点的并行度
* 单独设置并行度的优先级 > 默认并行度
* Flink中基本上所有的算子都可以改变它的并行度
*/
val wordsDS: DataStream[String] = linesDS.flatMap(_.split(","))
//单独设置每一个节点的并行度
wordsDS.setParallelism(1)
//设置节点的名称-- .name("展开数据")
wordsDS.name("展开数据")
println(s"wordsDS的并行度:${wordsDS.parallelism}")
//将数据转成kv格式
val kvDS: DataStream[(String, Int)] = wordsDS.map((_, 1))
/**
* 如果上游节点和下游节点并行度一样,同时算子不产生shuffle, 可以合并成一个task
*/
// kvDS.setParallelism(1)
kvDS.name("转换成kv")
println(s"kvDS的并行度:${kvDS.parallelism}")
/**
* keyBy不能设置名称和并行度,因为keyBy不构成一个节点,是一个隐藏的过程
*
* 在Flink中没有去重和排序,因为数据是一条一条流过来的
*/
val keyVyDS: KeyedStream[(String, Int), String] = kvDS.keyBy(_._1)
val countDS: DataStream[(String, Int)] = keyVyDS.sum(1)
countDS.name("统计单词的数量")
//countDS.setParallelism(2)
// print 也可以接收,返回 DataStreamSink
val print: DataStreamSink[(String, Int)] = countDS.print()
//基本上所有算子都可以设置并行度
//print.setParallelism(2)
//print也能设置节点的名字
print.name("打印结果")
env.execute()
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY