我有一个Spark SQL,它过去执行了不到10分钟,现在在集群迁移后3小时运行,需要深入研究其实际功能。我是新来的火花,请不要介意我是否在询问无关的内容。
spark.executor.memory
增加了,但是没有运气。
Env:Azure存储上的Azure HDInsight Spark 2.4
SQL:读取并联接一些数据,最后将结果写入Hive元存储。
spark.sql
脚本以以下代码结尾:
.write.mode("overwrite").saveAsTable("default.mikemiketable")
应用程序行为: 在前15分钟内,它将加载并完成大多数任务(199/200);只剩下1个执行程序,这个程序还活着,并在不断地改组读/写数据。因为现在只剩下1个执行程序,所以我们需要等待3个小时才能完成此应用程序。
因此,我将spark.executor.memory增加到20g,但是没有任何变化。从Ambari和YARN中,我可以告诉集群剩余很多资源。
非常感谢任何指导。
答案 0 :(得分:0)
我想从您的情况开始一些观察:
作为解决方案,我将尝试以下几件事:
repartition()
或通过带有spark.sql.shuffle.partitions
的Spark设置将分区数量增加到满足上述要求的数量,即1000或更多。partitionBy
引入分区数据,即日/月/年