当pyspark交互式shell创建4时,Spark-submit只创建1个执行器(两者都使用yarn客户端)



我使用带有Pyspark(1.6.0)和Yarn(包括MR2)的quickstart cloudera VM(CDH 5.10.1)来聚合每小时的数字数据。我有一个4核的CPU和32 Go的RAM。

我有一个名为aggregate.py的文件,但直到今天我从未使用spark-submit提交过作业,我使用了pyspark交互式shell并复制/粘贴代码来测试它。当启动pyspark交互式shell时,我使用了:

pyspark --master yarn-client

我在quickstart.cloudera:808/cluster上查看了web UI中的处理,可以看到Yarn创建了3个执行器和1个驱动程序,每个驱动程序都有一个核心(这不是一个好的配置,但主要目的是进行概念验证,直到我们移到一个真正的集群)

当提交与spark提交相同的代码时:

spark-submit --verbose 
--master yarn 
--deploy-mode client 
--num-executors 2 
--driver-memory 3G 
--executor-memory 6G 
--executor-cores 2 
aggregate.py

我只有驱动程序,它也执行任务。请注意,spark.dynamicAllocation.enabled在环境选项卡中设置为true,spark.dynamicAllocation.minExecutors设置为2。

我试着只使用spark-submit aggregate.py,但仍然只得到了作为执行器的驱动程序。我不能用spark提交超过1个执行器,但它在spark交互式shell中工作!

我的纱线配置如下:

yarn.nodemanager.resource.memory-mb=17 GiB

yarn.nodemanager.resource.cpu-vcores=4

yarn.scheduler.minimum-allocation-mb=3 GiB

yarn.scheduler.maximum-allocation-mb=16 GiB

yarn.scheduler.minimum-allocation-vcores=1

yarn.scheduler.maximum-allocation-vcores=2

如果有人能解释我做错了什么,那将是一个很大的帮助!

您必须将驱动程序内存和执行程序内存设置为spark-defaults.conf。它位于

$SPARK_HOME/conf/SPARK-defaults.conf

并且如果存在类似的文件

spark-defaults.conf.template

然后您必须将文件重命名为

spark-defaults.conf

,然后设置执行器的数量、执行器内存、执行器内核的数量。你可以从模板文件中得到这个例子,或者检查这个链接

https://spark.apache.org/docs/latest/configuration.html.

当我们使用pyspark时,它使用了默认的执行器内存,但在spark-submit中,您将执行器内存设置为6G。我认为你必须减少内存或删除这个字段,这样它才能使用默认内存。

只是一个猜测,正如您之前所说的"Yarn创建了3个执行器和1个驱动程序,每个驱动程序都有一个内核",所以您总共有4个内核。

现在根据您的spark提交声明,

cores = num-executors 2 * executor-cores 2 + for_driver 1 = 5
#but in total you have 4 cores. So it is unable to give you executors(as after driver only 3 cores left)
#Check if this is the issue.

相关内容

  • 没有找到相关文章

最新更新