JoinWithTiny、JoinWithHuge 和 joinHint 的区别和好处

The difference and benefit of JoinWithTiny, JoinWithHuge and joinHint

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

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

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

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

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

是的,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 程序的执行方式。