当前位置:  开发笔记 > 运维 > 正文

在Hadoop中将多个文件合并为一个文件

如何解决《在Hadoop中将多个文件合并为一个文件》经验,为你挑选了3个好方法。

我将多个小文件放入我的输入目录,我希望将其合并到一个文件中,而不使用本地文件系统或编写mapred.有没有办法可以使用hadoof fs命令或猪?

谢谢!



1> Guy B..:

为了保持网格上的所有内容,使用带有单个reducer和cat作为mapper和reducer(基本上是noop)的hadoop流 - 使用MR标志添加压缩.

hadoop jar \
    $HADOOP_PREFIX/share/hadoop/tools/lib/hadoop-streaming.jar \
-Dmapred.reduce.tasks=1 \ -Dmapred.job.queue.name=$QUEUE \ -input "$INPUT" \ -output "$OUTPUT" \ -mapper cat \ -reducer cat

如果要压缩,请添加
-Dmapred.output.compress = true\-Dmapred.output.compression.codec = org.apache.hadoop.io.compress.GzipCodec



2> Harsha Hulag..:
hadoop fs -getmerge  


我认为`mergedsinglefile`是本地的,不是分发的
这将导致本地文件系统上的文件,OP希望避免这些文件
奇怪的是,这没有给我任何结果.不知道为什么.

3> uHadoop..:

好吧......我想出了一种使用hadoop fs命令的方法-

hadoop fs -cat [dir]/* | hadoop fs -put - [destination file]

它在我测试时起作用了......人们可以想到的任何陷阱?

谢谢!


但是在这种情况下,您将所有数据从HDFS下载到您正在运行命令的节点(本地一个?),然后将其上传到HDFS.如果您有大量数据,这不是太有效
推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有