【发布时间】:2017-04-21 16:29:53
【问题描述】:
spark 如何将分区分配给执行程序。
当我使用 1 个驱动程序和 5 个执行程序在 spark shell 中运行以下行时:
> var data = sc.textFile("file") // auto generates 2 partitions
> data.count() // materialize partitions on two nodes
> data = data.repartition(10) // repartition data.count()
> data.count() // 10 partitions still on original 2 nodes
重新分区后,10 个分区仍然位于原来的两个节点上(共 5 个)。这似乎非常低效,因为 5 个任务在每个包含分区的节点上重复运行,而不是均匀分布在节点之间。对于在同一个 rdds 上重复多次的迭代任务,效率低下最为明显。
所以我的问题是,spark 如何决定哪个节点有哪个分区,有没有办法可以强制将数据移动到其他节点?
【问题讨论】:
-
你说的是两个节点,但是你有一个 Executor,这没有多大意义。我们说的是哪个?
-
抱歉打错了,刚刚编辑。谢谢指出
-
您在 Sparks 任务分配方面遇到问题吗?或者这是一个普遍的问题?每个 Executor 有多少个核心?
-
我假设任务数与 rdd 分区数相同?运行任务的时候,因为我的10个partition是在2个节点上,那么10个task跑在2个节点上,效率比5个节点各2个partition,每个节点跑2个task效率低。所以我想知道 spark 是如何决定哪个分区到哪个节点的。
-
也许github.com/apache/spark/pull/8280 可以帮助...
标签: apache-spark rdd