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

时间:2016-08-03 17:00:38

标签: apache-spark google-compute-engine 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
/usr/lib/spark/conf/spark-defaults.conf中的

。我想spark.dynamicAllocation.enabled true,执行者的数量会自动增加。

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

我的问题是

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

1 个答案:

答案 0 :(得分: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请求的容器大小。
  4. 不考虑调整群集节点的大小并在之后手动编辑配置文件,而是考虑使用新的计算机大小启动新群集,并将旧群集中的所有数据复制到新群集。通常,移动数据的最简单方法是使用内置于distcp实用程序中的hadoop。一个示例用法将是:

    $ hadoop distcp hdfs:///some_directory hdfs://other-cluster-m:8020/
    

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

    $ hadoop distcp hdfs:///some_directory gs://<your_bucket>/some_directory
    

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

    gs://<your_bucket>/path/to/file
    

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