JoinWithTiny,JoinWithHuge和joinHint的区别和好处

时间:2015-07-17 21:17:38

标签: apache-flink

使用joinHint和joinWithTiny,joinWithHuge有什么区别?

关于joinHint,我们可以使用 BROADCAST_HASH_FIRST:提示第一个连接输入比第二个小得多。 REPARTITION_HASH_FIRST:提示第一个连接输入比第二个小一点。

同时,我们也可以使用joinWithHuge和joinWithTiny

它们是一样的吗?所以joinWithTiny正在使用BROADCAST_HASH_FIRST?

利用这些的好处是Flink作业节省了检查加入数据大小的时间吗?

1 个答案:

答案 0 :(得分:6)

是的,DataSet.joinWithTiny(DataSet other)DataSet.join(DataSet other, JoinHint.BROADCAST_HASH_SECOND)的快捷方式,DataSet.joinWithHuge(DataSet other)DataSet.join(DataSet other, JoinHint.BROADCAST_HASH_FIRST)的快捷方式。

Apache Flink具有基于成本的优化器。基于成本的优化需要估算运营商的输入规模。在具有用户定义功能的设置中,这可能非常困难(甚至不可能),这在Flink程序中很常见。如果Flink的优化器无法获得有意义的大小估计,那么它将回归到强大且可扩展的执行策略,例如重新分配而不是广播。优化程序提示允许用户准确指定要使用的连接策略。如果用户知道有关数据的某些属性,这有助于提高程序的性能。

因此优化器提示不是缩短获取估计的时间,而是让用户完全控制Flink程序的执行方式。