Spark 作业似乎只使用少量资源
Spark jobs seem to only be using a small amount of resources
请耐心等待,因为我对 Spark 还是很陌生。
我有一个 GCP DataProc 集群,我正在使用它来 运行 大量 Spark 作业,一次 5 个。
集群为 1 + 16,每个节点 8 个内核/40gb 内存/1TB 存储空间。
现在我可能误解了某些事情或没有正确地做某事,但我目前有 5 个作业 运行ning 一次,而 Spark UI 显示只有 34/128 个 vcores 在使用,它们似乎分布不均匀(作业同时执行,但分布是 2/7/7/11/7。每个 运行ning 容器只分配一个核心。
我使用了标志 --executor-cores 4
和 --num-executors 6
,它们似乎没有任何区别。
任何人都可以提供一些 insight/resources 关于我如何微调这些作业以使用所有可用资源的方法吗?
Dataproc 默认配置应考虑执行程序的数量。 Dataproc 还支持动态分配,因此只有在需要时才会分配执行程序(根据 Spark)。
Spark 无法并行化超过 Dataset/RDD 中的分区数。您可能需要设置以下属性以获得良好的集群利用率:
spark.default.parallelism
:RDD 上转换的默认输出分区数(未明确设置时)
spark.sql.shuffle.partitions
:使用 SQL API 聚合的输出分区数
根据您的用例,为每个操作显式设置分区计数可能有意义。
我已经设法解决了这个问题 - 我没有限制内存使用量,所以看起来好像所有内存都分配给了每个节点的 2 个内核。
我添加了 属性 spark.executor.memory=4G
和 re-ran 作业,它立即分配了 92 个核心。
希望这对其他人有帮助!
请耐心等待,因为我对 Spark 还是很陌生。
我有一个 GCP DataProc 集群,我正在使用它来 运行 大量 Spark 作业,一次 5 个。
集群为 1 + 16,每个节点 8 个内核/40gb 内存/1TB 存储空间。
现在我可能误解了某些事情或没有正确地做某事,但我目前有 5 个作业 运行ning 一次,而 Spark UI 显示只有 34/128 个 vcores 在使用,它们似乎分布不均匀(作业同时执行,但分布是 2/7/7/11/7。每个 运行ning 容器只分配一个核心。
我使用了标志 --executor-cores 4
和 --num-executors 6
,它们似乎没有任何区别。
任何人都可以提供一些 insight/resources 关于我如何微调这些作业以使用所有可用资源的方法吗?
Dataproc 默认配置应考虑执行程序的数量。 Dataproc 还支持动态分配,因此只有在需要时才会分配执行程序(根据 Spark)。
Spark 无法并行化超过 Dataset/RDD 中的分区数。您可能需要设置以下属性以获得良好的集群利用率:
spark.default.parallelism
:RDD 上转换的默认输出分区数(未明确设置时)spark.sql.shuffle.partitions
:使用 SQL API 聚合的输出分区数
根据您的用例,为每个操作显式设置分区计数可能有意义。
我已经设法解决了这个问题 - 我没有限制内存使用量,所以看起来好像所有内存都分配给了每个节点的 2 个内核。
我添加了 属性 spark.executor.memory=4G
和 re-ran 作业,它立即分配了 92 个核心。
希望这对其他人有帮助!