This question already has answers here:
How does Spark partition(ing) work on files in HDFS?
(4个答案)
2年前关闭。
假设我有一个
我认为以这种方式确定不。分区数为文件大小/总数。集群中的核心数。如果确实如此,我将拥有
但是我认为
PS:我刚开始使用
(4个答案)
2年前关闭。
假设我有一个
4 nodes
簇,每个簇都有1 core
。我有一个600 Petabytes
大小的大文件,我想通过Spark
处理。文件可以存储在HDFS
中。我认为以这种方式确定不。分区数为文件大小/总数。集群中的核心数。如果确实如此,我将拥有
4 partitions
( 600/4 ),因此每个分区的大小均为125 PB
。但是我认为
125 PB
对于分区来说太大了,所以我的想法正确与推论否有关。分区。PS:我刚开始使用
Apache Spark
。因此,如果这是一个幼稚的问题,我们深表歉意。 最佳答案
当您将数据存储在HDFS上时,根据您的HDFS配置,数据将已经分区为64 MB或128 MB。 (假设128 MB块。)
因此600 PB将产生4687500000个块,每个块128 MB。 (600 PB / 128 MB)
现在,当您运行Spark作业时,每个执行程序将读取几个数据块(块数将等于执行程序中的内核数)并并行处理它们。
基本上,每个内核将处理1个分区。因此,您为执行者提供的内核越多,它可以处理的数据就越多,但是同时您将需要为执行者分配更多的内存,以处理加载到内存中的数据量。
建议有中等规模的执行者。过多的小型执行程序将导致大量数据混乱。
现在来看您的情况,如果您有一个4个节点群集,每个群集1个核心。您最多将有3个执行程序在其上运行,因为将使用1个内核作为spark驱动程序。
因此,要处理数据,您将能够并行处理3个分区。
因此,您的工作4687500000/3 = 1562500000迭代才能处理整个数据。
希望有帮助!
干杯!
关于apache-spark - Apache Spark如何对大文件的数据进行分区,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51561890/