在云Datafusion
中,我使用连接器转换来连接两个表。
其中一个是一个大约有 87M 连接的大表,而另一个是一个只有约 250 条记录的小表。我在连接器中使用了 200 个分区。
这会导致以下故障:
org.apache.spark.SparkException:作业因阶段失败而中止:阶段 7.0 中的任务 50 失败 4 次,最近一次失败:阶段 7.0 中丢失任务 50.3(TID xxx,cluster_workerx.c.project.internal,执行程序 6): ExecutorLostFailure(由于其中一项正在运行的任务导致执行器 6 退出) 原因:执行器心跳在 133355 毫秒后超时 java.util.concurrent.ExecutionException: java.lang.RuntimeException: org.apache.spark.SparkException: Application application_xxxxx finished with failed status
仔细查看 Spark UI 的 200 个 Join 任务,87m 条记录中有近 80% 进入一个任务 O/P,该任务 O/P 因心跳错误而失败,而成功的任务几乎没有记录 O/P ~<10k记录
似乎 spark 执行了一个随机哈希连接,在 datafusion/cdap 中是否有一种方法可以强制广播连接,因为我的一个表非常小?或者我可以对集群配置进行配置更改以使此加入工作吗?
我可以在数据融合管道中进行哪些性能调整。我没有找到对配置的任何参考,在 Datafusion 文档中进行了调整