同一节点的多个执行程序是否有可能在同一个分区上工作,例如在执行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上尝试了上面的代码,它就像魅力一样,但是当它出现在集群上时就失败了......
我突然想知道分区是否大,是否与其他节点分开,这可能是一个很好的策略,视情况而定,显然不是我的;)
所以我谦卑地请求你帮助解决这个小小的谜团。