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



--
Sent from: http://apache-flink.147419.n8.nabble.com/

回复