1. 问题
对于给定的文件,应该使用多少个分区?
例如,假设我有一个10GB 文件,3个执行器,每个执行器有 2 个内核,3G内存。
我应该重新分配吗?
我应该使用多少个分区?
做出选择的更好方法是什么?
会默认重新分区么?
分析
Spark可以为一个RDD的每个分区运行一个并发任务,直到并发任务数等于集群中的内核总数(逻辑内核-thread 数量)。
例如:
rdd = sc.textFile("file.txt", 5)
上面这行代码将创建一个带有 5 个分区的名为 textFile 的RDD。
假设您有一个具有3个内核的集群,并且假设每个分区需要处理5分钟。
对于上述带有5个分区的RDD, 3个分区进程将并行运行,因为有3个内核,而第4, 5个分区进程将在5分钟后处理,此时3个内核中的1个是空闲的。
结论
决定一个RDD中分区数量的最佳方法:是使分区数量等于集群中的核数量,这样所有分区都将并行处理,并且以最佳方式利用资源。
默认情况下,每个rdd都没有分区。为了以最优的方式使用现有的集群资源并加快速度,我们必须考虑重新分区,以确保所有内核都被利用,并且所有分区数据尽量均匀分布。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。