一个火花分区上的活动执行程序

时间:2017-02-03 13:31:26

标签: scala apache-spark mapreduce scalability

同一节点的多个执行程序是否有可能在同一个分区上工作,例如在执行spark 1.6.2的reduceByKey期间。

我的结果是我不明白的。在我查看密钥后的reduceByKey之后,同样出现多次,就像我想的每个节点的执行器数一样多。此外,当我杀死两个奴隶之一时,我注意到同样的结果。 有两次相同的密钥,我认为这是由于每个节点的执行者数量默认设置为2。

val rdd = sc.parallelize(1 to 1000).map(x=>(x%5,x))
val rrdd = rdd.reduceByKey(_+_)

我获得了

rrdd.count = 10

而不是我想的是

rrdd.count = 5

我试过这个

val rdd2 = rdd.partitionBy(new HashPartitioner(8))
val rrdd = rdd2.reduceByKey(_+_)

那个

val rdd3 = rdd.reduceByKey(new HashPartitioner(8), _+_)

没有得到我想要的东西。

当然,我可以将执行者的数量减少到一个,但执行者将使用超过5个核心的效率减少。

我在spark-shell上尝试了上面的代码,它就像魅力一样,但是当它出现在集群上时就失败了......

我突然想知道分区是否大,是否与其他节点分开,这可能是一个很好的策略,视情况而定,显然不是我的;)

所以我谦卑地请求你帮助解决这个小小的谜团。

0 个答案:

没有答案