我开发的星火计划。我需要有一个文件的结果,所以有两种方式合并结果:星火聚结VS HDFS getmerge
- 合并(火花):
myRDD.coalesce(1,FALSE).saveAsTextFile (pathOut);
- 合并之后它在HDFS:
Hadoop的FS -getmerge pathOut了localPath
哪一个是最有效,最快捷?
是否有任何其他的方法来在HDFS文件合并,而不是它获取到本地路径(如“getmerge”)结果保存到HDFS,?
我开发的星火计划。我需要有一个文件的结果,所以有两种方式合并结果:星火聚结VS HDFS getmerge
myRDD.coalesce(1,FALSE).saveAsTextFile (pathOut);
Hadoop的FS -getmerge pathOut了localPath
哪一个是最有效,最快捷?
是否有任何其他的方法来在HDFS文件合并,而不是它获取到本地路径(如“getmerge”)结果保存到HDFS,?
如果您正在处理大型数据集(我假设您是),我建议让Spark将每个分区写入HDFS中自己的“part”文件,然后使用hadoop fs -getMerge
从HDFS中提取单个输出文件目录。
星火将数据分割成效率分区,所以它可以分发许多工人节点间的工作量。如果合并到一个小数目的分区,可以减少它的分发工作的能力,并且只需一分区你把一个节点上的所有工作。最好的情况是这样会变慢,在最坏的情况下,它会耗尽内存并使作业崩溃。
我强烈建议你不要使用'''FileUtil.copyMerge'''或'''Hadoop的FS -getmerge''',因为它把数据复制到驱动器(查看源代码)。 – Leonard
合并内存很大,也可能导致GC开销。我只是在bash脚本中使用cat *来合并文件,这可以在单独的json调用中触发。 – GameOfThrows