我在文件夹输入下有1800 * .gz文件。每个* .gz文件大约300 M,解压缩后,每个文件都在3G左右。解压缩时总共5400G。
我无法拥有一个具有5400G执行程序内存的群集。是否可以读取输入文件夹下的所有文件,如下所示?
JavaRDD lines = ctx.textFile(" input");
那么这项工作需要多少执行程序内存?当数据无法完全融入内存时,Spark如何处理这种情况?
谢谢!
答案 0 :(得分:2)
创建指向文本文件目录的RDD对象本身不会将任何数据集加载到内存中。当您告诉Spark处理数据时,数据仅被加载到内存中,并且在许多(大多数?)情况下,这仍然不需要将完整数据集同时存储在内存中。你的5.4TB数据集需要多少内存,这取决于你将要用它做什么。
也就是说,可以选择如何在加载时保留RDD。默认情况下,Spark会将数据仅保留在内存中,但是当没有可用内存时,还有一些配置要溢出到磁盘。在Spark programming guide中有一个很好的写法。