Spark作业似乎仅使用少量资源

时间:2019-06-25 09:02:31

标签: apache-spark google-cloud-dataproc

请忍受,因为我还是Spark的新手。

我有一个GCP DataProc集群,该集群用于一次运行5个Spark作业。

每个节点的群集为1 + 16、8核/ 40GB内存/ 1TB存储。

现在我可能会误解某些事情或做某件事没有正确做,但是我目前一次运行5个作业,Spark UI显示只有34/128个vcore正在使用,并且它们似乎分布不均(作业是同时执行的,但是分配为2/7/7/11/7。每个运行中的容器仅分配了一个核心。

我使用了标志--executor-cores 4--num-executors 6,它们似乎没有什么区别。

任何人都可以提供一些关于如何调整这些作业以使用所有可用资源的见解/资源吗?

2 个答案:

答案 0 :(得分:1)

我设法解决了这个问题-内存使用量没有上限,因此看起来每个节点上所有内存仅分配给2个核心。

我添加了属性spark.executor.memory=4G并重新运行该作业,它立即分配了92个内核。

希望这对其他人有帮助!

答案 1 :(得分:0)

Dataproc默认配置应注意执行程序的数量。 Dataproc还支持动态分配,因此仅在需要时才分配执行程序(根据Spark)。

Spark无法并行化超出数据集/ RDD中的分区数量。您可能需要设置以下属性以获得良好的群集利用率:

  • spark.default.parallelism:RDD上转换的默认输出分区数(未明确设置时)
  • spark.sql.shuffle.partitions:使用SQL API的聚合输出分区的数量

根据您的用例,为每个操作显式设置分区计数可能很有意义。