开发者社区> 问答> 正文

讨论分析:数据类型对于shuffle时数据传输IO速度的影响(数十倍的差距)

Hi all, 在使用flink的shuffle功能时,我发现在operator chain中不同的位置进行shuffle,IO速度有非常明显的差距。

比如我的这个例子:

source-->cal--->sort--->SinkConversionToRow--->sink

从hive读数据,计算,排序,转化为外部类型行,写入hive。

当我把shuffle加到cal和sort中间时,

source-->cal-- (rebalance)->sort--->SinkConversionToRow--->sink

shuffle的数据传输IO速度是3G/s

当我把shuffle加到SinkConversionToRow和sink中间时,

source-->cal-- ->sort--->SinkConversionToRow--(rebalance)-->sink

shuffle的数据传输IO速度是0.1G/s

足足差了30倍!

我猜测这是由于SinkConversionToRow将数据转化为了外部格式,外部格式传输速度慢,内部格式传输速度快。

但是为什么差距这么大? 内部格式如何做到传输速度这么快,外部格式又为什么传输速度这么慢?

SinkConversionToRow代码位置: org.apache.flink.table.planner.plan.nodes.physical.batch.BatchExecSink#translateToTransformation*来自志愿者整理的flink

展开
收起
毛毛虫雨 2021-12-05 21:25:18 607 0
1 条回答
写回答
取消 提交回答
  • 你是用的Filesystem connector读写hdfs的吗? 由于source和sink的并发已经确定了,中间不管哪个阶段进行shuffle,其实对首尾的处理速度应该影响不大。

    当我把shuffle加到cal和sort中间时,

    source(640并发)-->cal(640并发)-- (rebalance)->sort(64并发)--->SinkConversionToRow(64并发)--->sink(64并发)

    shuffle的数据传输IO速度是3G/s,370G文件传输花费2分钟。

    当我把shuffle加到SinkConversionToRow和sink中间时,

    source(640并发)-->cal(640并发)-- ->sort(640并发)--->SinkConversionToRow(640并发)--(rebalance)-->sink(64并发)

    shuffle的数据传输IO速度是0.1G/s,250G文件传输花费40分钟。*来自志愿者整理的flink

    2021-12-05 23:42:39
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
多IO线程优化版 立即下载
Flink中的两类新型状态存储 立即下载
改善弱网络-探索移动互联网下弱网络处理方式 立即下载