如何在Cloud Dataproc中调整工作节点大小后更新spark配置

zyx*_*xue 6 google-compute-engine apache-spark google-cloud-platform google-cloud-dataproc

我有一个DataProc Spark集群.最初,主节点和2个工作节点的类型为n1-standard-4(4个vCPU,15.0 GB内存),然后我通过Web控制台将它们全部调整为n1-highmem-8(8个vCPU,52 GB内存).

我注意到两个工作节点没有被完全使用.特别是,第一个工作节点上只有2个执行程序,第二个工作节点上只有1个执行程序

spark.executor.cores 2
spark.executor.memory 4655m
Run Code Online (Sandbox Code Playgroud)

/usr/lib/spark/conf/spark-defaults.conf.我想spark.dynamicAllocation.enabled true,执行器的数量会自动增加.

此外,Web控制台的DataProc页面上的信息也不会自动更新.似乎DataProc仍然认为所有节点都是n1-standard-4.

我的问题是

  1. 为什么第一个工作节点上的执行器多于第二个?
  2. 为什么没有更多的执行器添加到每个节点?
  3. 理想情况下,如果火花配置需要更新,我希望整个群集得到充分利用,如何?

Ang*_*vis 6

如您所见,首次创建群集时会设置群集的配置,而不会调整为手动调整大小.

回答你的问题:

  1. Spark ApplicationMaster在工作节点上的YARN中占用一个容器,如果只运行一个spark应用程序,通常是第一个工作者.
  2. 启动集群时,Dataproc会尝试为每台计算机安装两个YARN容器.
  3. 每台计算机上的YARN NodeManager配置确定应将多少机器资源专用于YARN.这可以在/etc/hadoop/conf/yarn-site.xml下的每个VM上更改,然后是sudo服务hadoop-yarn-nodemanager restart.一旦机器向ResourceManager宣传更多资源,Spark就可以启动更多容器.向YARN添加更多资源后,您可能希望通过修改spark.executor.memory和spark.executor.cores来修改Spark请求的容器大小.

不要调整群集节点的大小并在之后手动编辑配置文件,而是考虑启动具有新计算机大小的新群集,并将旧群集中的所有数据复制到新群集.通常,移动数据的最简单方法是使用hadoop内置的distcp实用程序.一个示例用法将是:

$ hadoop distcp hdfs:///some_directory hdfs://other-cluster-m:8020/
Run Code Online (Sandbox Code Playgroud)

或者,如果您可以使用云存储:

$ hadoop distcp hdfs:///some_directory gs://<your_bucket>/some_directory
Run Code Online (Sandbox Code Playgroud)

或者,考虑始终将数据存储在云存储中,并将每个群集视为可以随时拆除和重新创建的短暂资源.通常,只要将数据保存到HDFS,您也可以将其保存为:

gs://<your_bucket>/path/to/file
Run Code Online (Sandbox Code Playgroud)

保存到GCS有一个很好的好处,允许您在不使用时删除您的群集(以及HDFS中的数据,在永久磁盘上).