google-app-engine - 更改 GCP DataProc 集群的调度程序属性

标签 google-app-engine google-cloud-platform google-cloud-dataproc

当我运行使用 Dataproc 集群 Web 界面的 Jupyter Notebook 创建的 PySpark 代码时,我发现正在运行的代码并未使用主节点或工作节点的所有资源。它仅使用其中的一部分。我在回答“将调度程序属性更改为 FIFO”的问题时找到了此问题的解决方案。

我有两个问题: 1) 如何更改调度程序属性?
2)除了更改Scheduler属性之外,还有其他方法可以让PySpark使用所有资源吗?

提前致谢

最佳答案

如果您只是想获取更多资源,则不想更改 Spark 调度程序。相反,您希望确保您的数据被分成足够的分区,您有足够的执行器并且每个执行器有足够的内存等等,以使您的作业运行良好。

Some properties you may want to consider :

  • spark.executor.cores - 每个执行器的 CPU 线程数。
  • spark.executor.memory - 为每个执行器分配的内存量。
  • spark.dynamicAllocation.enabled=true - 启用动态分配。这使得 Spark 执行器的数量可以根据作业的需求进行扩展。
  • spark.default.parallelism - 配置作业的默认并行度。除了存储分区方案之外,此属性是对于给定作业正确设置的最重要的属性。
  • spark.sql.shuffle.partitions - 与 spark.default.parallelism 类似,但用于 Spark SQL 聚合操作。

请注意,除了 spark.default.parallelismspark.sql.shuffle.partitions 之外,您很可能不想触及上述任何内容(除非您'在代码中设置显式 RDD 分区计数)。 Dataproc 上的 YARN 和 Spark 的配置使得(如果没有其他作业正在运行)给定的 Spark 作业将占用所有工作核心和(大部分)工作内存。 (一些内存仍然保留给系统资源。)

如果您已将 spark.default.parallelism 设置得足够高,但集群利用率仍然较低,那么您的作业可能不够大,无法需要这些资源您的输入数据集的可分割性不够。

请注意,如果您使用 HDFS 或 GCS(Google 云存储)进行数据存储,则默认 block 大小分别为 64 MiB 或 128 MiB。输入数据的分割不会超出 block 大小,因此您的初始并行度(分区计数)将限制为data_size/block_size。拥有比分区更多的执行器核心是没有意义的,因为那些多余的执行器将没有工作可做。

关于google-app-engine - 更改 GCP DataProc 集群的调度程序属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59124295/

相关文章:

python - 模块未找到错误 : No module named 'google.cloud'

google-cloud-platform - Dataproc 从 Google Cloud Storage 读取

python - Dataproc 配置单元运算符(operator)未运行存储在存储桶中的 hql 文件

python - Google App Engine 多对多对自身

google-cloud-platform - 如何自动化 BigQuery SQL 管道

java - 如何使用 Google Cloud Shell 构建和部署我的代码

Flutter - Firebase Firestore 文档 uid 不存在

google-cloud-dataproc - 与 Dataproc + Datalab + 源代码存储库集成

google-app-engine - 访问生产中的 Google App Engine Python 应用程序代码

java - 在 Jetty 实例之间共享 Memcached