如何让s3distcp与换行符合并

时间:2015-07-13 21:20:22

标签: hadoop amazon-s3 hadoop-streaming amazon-emr

我有数以百万计的小一行s3文件,我希望将它们合并在一起。我有s3distcp语法,但是,我发现在合并文件后合并集中没有包含换行符。

我想知道s3distcp是否包含强制换行的任何选项,或者是否有其他方法可以在不直接修改源文件(或复制它们并执行相同操作)的情况下完成此操作

1 个答案:

答案 0 :(得分:0)

如果您的文本文件以唯一的字符序列开头/结尾,您可以先将它们合并到s3distcp的单个文件中(我通过将--targetSize设置为一个非常大的数字来实现此目的) ,然后使用sed和Hadoop流媒体添加新行;在以下示例中,每个文件包含一个json(文件名均以0开头),sed命令在}{的每个实例之间插入换行符:

hadoop fs -mkdir hdfs:///tmpoutputfolder/
hadoop fs -mkdir hdfs:///finaloutputfolder/
hadoop jar lib/emr-s3distcp-1.0.jar \
               --src s3://inputfolder \
               --dest hdfs:///tmpoutputfolder \
               --targetSize 1000000000 \
               --groupBy ".*(0).*"
hadoop jar /home/hadoop/contrib/streaming/hadoop-streaming.jar \
               -D mapred.reduce.tasks=1 \
               --input hdfs:///tmpoutputfolder \
               --output hdfs:///finaloutputfolder \
               --mapper /bin/cat \
               --reducer '/bin/sed "s/}{/}\n{/g"'