![](/img/trans.png)
[英]How to handle Spark Executors when number of partitions do not match no of Executors?
[英]When and how does spark distribute partitions on executors
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如何决定哪个节点具有哪个分区,有没有办法可以强制数据移动到其他节点?
我只是在这里提供一个猜测来显示逻辑(不一定是真正发生的事情)。
让我们假设您的文件不是很大,即它适合1块HDFS。 并假设该块被复制到2个节点。 如果您想在第三个节点上进行处理,那么这意味着您需要复制它。 由于计数是一个相对较快的计算,因此处理任务所需的时间可能相对较小。 Spark可能已经决定最好等待并在本地进行处理,而不是将数据混洗到其他节点(您可以配置此参数)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.