使用joinHint和joinWithTiny,joinWithHuge有什么区别?
关于joinHint,我们可以使用 BROADCAST_HASH_FIRST:提示第一个连接输入比第二个小得多。 REPARTITION_HASH_FIRST:提示第一个连接输入比第二个小一点。
同时,我们也可以使用joinWithHuge和joinWithTiny
它们是一样的吗?所以joinWithTiny正在使用BROADCAST_HASH_FIRST?
利用这些的好处是Flink作业节省了检查加入数据大小的时间吗?
答案 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程序的执行方式。