【发布时间】:2020-11-17 10:36:30
【问题描述】:
我正在尝试使用 delta Lake oss 实现合并,我的历史数据大约有 70 亿条记录,而 delta 大约有 500 万条记录。
合并基于复合键(5 列)。
我正在启动一个 10 节点集群 r5d.12xlarge(~3TB 内存/~480 个核心)。
该作业第一次需要 35 分钟,后续运行需要更多时间。
尝试使用优化技术,但没有任何效果,并且在 3 次运行后我开始出现堆内存问题,我在数据洗牌时看到磁盘上有很多溢出,尝试使用合并键上的 order by 重写历史记录,获得了性能改进和合并在 20 分钟内完成,泄漏量约为 2TB,但问题是作为合并过程的一部分写入的数据顺序不同,因为我无法控制写入数据的顺序,因此后续运行需要更长的时间。
我无法在 delta Lake oss 中使用 Zorder,因为它只附带订阅。我尝试了压缩,但这也没有帮助。 如果有更好的方法来优化合并过程,请告诉我。
【问题讨论】:
标签: apache-spark pyspark apache-spark-sql query-optimization databricks