2017-09-08 120 views
0

我一直在努力研究一段时间,但一些领域对我来说依然灰暗,如果有人能深入研究这一点,那将是一个很大的帮助。 1)如果我有下面的spark提交配置,并且spark创建了大约100个分区,那么这个分区如何在一个执行器中被逐个或者并行地处理? > 1执行者将会是什么情况。Apache Spark:如何在执行器中处理分区

--master yarn \ 
--deploy-mode cluster \ 
--num-executors 1 \ 
--executor-memory 3g \ 
--executor-cores 3 \ 

2)我们可以控制spark中的分区处理吗? 3)我理解执行者核心帮助并行分区中的任务,如果我有一个用例,我有一个foreachPartition方法,我正在做一些处理消息,如最大和最小并发送此消息给卡夫卡,什么角色执行器核心将在此操作中发挥作用。

回答

0
  1. 现在你已经指定遗嘱执行人的数量为1,执行内核是3所以你的机器只有一个执行程序将运行 将在同一时间最多3个任务运行。执行程序内存指定Spark可以缓存的数据量。 因此,最多3个执行器上的100个分区可并行处理。

  2. 我们可以使用重新分区方法来更改spark中RDD的分区。另外reduceByKey和其他一些方法有一个选项 来传递输出RDD中的分区数作为参数传递。

  3. 我完全不明白你最后的问题。但执行程序核心将扮演与上述相同的角色,在一个执行程序上并行运行任务 。

+1

'执行程序内存指定了Spark可以缓存的数据量,我不认为这是真的,执行程序内存用于缓存和执行代码。 –

+0

好吧,这意味着如果我从1增加执行器到2,那么可以并行处理的最大分区数将是6,因为我正在为每个执行器分配3个内核。 – nilesh1212

+0

@RaphaelRoth感谢您的补充。我在回答时错过了执行代码的观点。 – SagarKhandagale

相关问题