This question already has answers here:
How does Spark partition(ing) work on files in HDFS?

(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/

10-10 19:57
查看更多