使用 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 程序的执行方式。
关于apache-flink - JoinWithTiny、JoinWithHuge 和 joinHint 的区别和好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31484856/