Mar*_*cos 5 partitioning apache-spark rdd
I know that I can repartition an RDD to increase its partitions and use coalesce to decrease its partitions. I have two questions regarding this that I cannot completely understand after reading different resources.
生成RDD时,Spark将使用合理的默认值(每个块1个分区,第一个版本为64MB,现在为128MB)。但我也读到,建议使用运行作业的内核数的2或3倍。因此,问题来了:
给定文件应使用多少个分区?例如,假设我有一个10GB的.parquet文件,3个执行器,每个执行器具有2个内核和3GB内存。我应该分区吗?我应该使用几个分区?做出选择的更好方法是什么?
如果未提供分区,默认情况下是否对所有数据类型(即.txt,.parquet等)进行重新分区?
Spark可以为RDD的每个分区运行一个并发任务,最多可以达到集群中内核的总数。
例如 :
val rdd= sc.textFile ("file.txt", 5)
Run Code Online (Sandbox Code Playgroud)
上面的代码行将创建一个具有5个分区的名为textFile的RDD。
假设您有一个具有4个核心的集群,并假设每个分区需要处理5分钟。对于具有5个分区的上述RDD,由于有4个内核,因此将并行运行4个分区进程,而当4个内核之一空闲时,第5个分区进程将在5分钟后处理。
整个处理过程将在10分钟内完成,并且在第5个分区过程中,资源(剩余3个内核)将保持空闲状态。
确定a中的分区数的最佳方法
RDD是使分区数等于集群中的核心数,以便所有分区将并行处理,并且资源将以最佳方式利用。
问题:如果未提供分区,默认情况下是否会重新分区所有数据类型(例如.txt,.parquet等)?
每个rdd默认没有分区数。检查您可以rdd.partitions.length在rdd创建后立即使用。
为了以最佳方式使用现有群集资源并加快速度,我们必须考虑重新分区以确保使用所有核心,并且所有分区都具有足够数量的均匀分布的记录。
为了更好地理解,还请查看https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-rdd-partitions.html
(numOf执行程序*内核数)*复制系数(可能是原来的2或3倍)
| 归档时间: |
|
| 查看次数: |
2686 次 |
| 最近记录: |