Apache spark Spark-加载包含500G数据的目录

Apache spark Spark-加载包含500G数据的目录,apache-spark,partitioning,zipfile,Apache Spark,Partitioning,Zipfile,我对Spark和分布式计算相当陌生。加载一个csv文件或文本文件,将其放入驱动程序内存,这是非常简单的。 但在这里,我有一个真实的场景,我发现很难找到方法 我试图访问S3中大约500G的数据,这是由Zip文件组成的。 因为这些是ZipFile,所以我使用ZipFileInputFormat作为详细说明。它确保文件不会在分区之间分割 这是我的密码 val sc=新的SparkContext(配置) 这在几个100mb的输入上运行良好。但是,一旦它超过集群的内存限制,我就要解决outofMemory

我对Spark和分布式计算相当陌生。加载一个csv文件或文本文件,将其放入驱动程序内存,这是非常简单的。 但在这里,我有一个真实的场景,我发现很难找到方法

我试图访问S3中大约500G的数据,这是由Zip文件组成的。 因为这些是ZipFile,所以我使用ZipFileInputFormat作为详细说明。它确保文件不会在分区之间分割

这是我的密码 val sc=新的SparkContext(配置)

这在几个100mb的输入上运行良好。但是,一旦它超过集群的内存限制,我就要解决outofMemory问题

解决这个问题的正确方法是什么? -我应该为每个zip文件创建一个RDD并将输出保存到文件中,然后将所有输出加载到一个单独的RDD中吗? -有没有办法将基本目录加载到Spark上下文并分区

我有一个HDP集群,有5个节点和一个主节点,每个节点有15G内存


非常感谢所有答案/指针/链接

zip
文件不可拆分,因此处理单个文件对您没有任何好处。如果您不想进行扩展,您应该完全避免或至少避免硬限制归档文件的大小。

我同意zip文件不可拆分,但每个文件的最大容量为1gb。我观察到创建的分区数量,以及每个zip文件有一个分区。那么,这是否意味着分区大小越来越大,超过了驱动程序/执行程序内存,从而导致了问题?Not splittable=>每个文件一个分区是正确的。内存问题不是超出限制就是GC。
val inputLocation = args(0) 
val emailData = sc.newAPIHadoopFile(inputLocation, classOf[ZipFileInputFormat], classOf[Text], classOf[BytesWritable]);

val filesRDD = emailData.filter(_._1.toString().endsWith(".txt")).map( x => new String(x._2.getBytes))