4

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

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

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

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

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

4

1 回答 1

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

于 2015-07-18T07:53:01.357 回答