Spark重新分区不会将数据划分给所有执行程序

时间:2016-06-12 02:07:36

标签: apache-spark

我有8个执行器,每个执行器有4个核心,我将rdd重新分区为32个。我希望所有8个执行程序在我调用重新分区数据的下一个操作上发挥作用。但似乎有时3个遗嘱执行人参与,有时4个但不多于此。

如何确保数据在所有执行程序上划分?

rdd.repartition(32).foreachPartition {part =>           updateMem(部分)       } 最后一部分将inser / update调用到memsql中。

1 个答案:

答案 0 :(得分:0)

以下答案仅在您使用AWS-EMR时有效。 我不认为你有8个执行器,每个4个核心是正确的。这是解释。说,我使用的是m3.2xlarge机器(EMR)。

  • 每台机器包含30 GB内存(总计)8个vcores
  • 无法将所有30 GB内存用于执行程序 因为机器需要一些内存供自己使用。
  • 您希望留出足够的内存供机器自己使用(如操作系统) 和其他用法)这样就不会有任何系统故障。
  • 说,你想为机器留下10GB的内存然后你就离开了 20GB内存
  • 在20 GB内存中我可以有6个执行器(每个3GB,6 * 3GB = 18GB),可以 有4个执行器(每个5GB,4 * 5GB = 20GB)等
  • 因此,您可以根据需要决定执行者的数量 关于每个遗嘱执行人的记忆。

要特定于您的使用案例,请查看每台机器的可用内存总量以及这两个参数的spark-conf(/etc/spark/conf/spark-defaults.conf)并进行相应调整。

  • spark.executor.memory
  • spark.executor.cores