我正在使用每个5gb的2个大型输入文件。 它是Hadoop map reduce的输出,但由于我无法在Map reduce中进行依赖项计算,我将切换到优化的for循环进行最终计算(请参阅我之前关于map reduce design Recursive calculations using Mapreduce的问题
我想有关于在java中读取这些大文件并做一些基本操作的建议,最后我将写出大约5gb的数据。
感谢您的帮助
答案 0 :(得分:1)
如果文件具有您所描述的属性,即每个键100个整数值,每个10GB,那么您谈论的是非常多的键,远远超出您可以适应内存的范围。如果您可以在处理之前订购文件,例如使用OS排序实用程序或使用单个reducer的MapReduce作业,您可以同时读取两个文件,执行处理和输出结果,而不会在内存中保留太多数据。
答案 1 :(得分:1)
听起来似乎没有太多简单的实现。只需为文件打开InputStream / Reader,然后循环播放:
如果您的结果集太大而无法保留在内存中,一种简单的方法就是使用H2 database和本地文件存储。
答案 2 :(得分:0)
我的方法,
将map reduce程序配置为使用16个reducers,因此最终输出包含300个MB的16个文件(part-00000到part-00015),并且两个输入文件的键按相同的顺序排序。
现在在每个阶段我都会读取2个输入文件(大约600 MB)并进行处理。所以在每个阶段我都必须保持600 MB的内存,系统可以很好地管理。
该程序很快花了大约20分钟完成处理。
感谢所有建议!,感谢您的帮助