Hadoop 如何让s3distcp与换行符合并

Hadoop 如何让s3distcp与换行符合并,hadoop,amazon-s3,hadoop-streaming,amazon-emr,Hadoop,Amazon S3,Hadoop Streaming,Amazon Emr,我有数百万个小的一行s3文件,我正在寻找合并在一起。我已经关闭了s3distcp语法,但是,我发现合并文件后,合并集中不包含换行符 我想知道s3distcp是否包含强制换行的选项,或者是否有其他方法可以实现这一点,而无需直接修改源文件(或复制源文件并执行相同操作)如果您的文本文件以唯一的字符序列开头/结尾,您可以首先使用s3distcp将它们合并到单个文件中(我通过将--targetSize设置为一个非常大的数字来实现这一点),然后在Hadoop streaming中使用sed添加新行;在下面的

我有数百万个小的一行s3文件,我正在寻找合并在一起。我已经关闭了s3distcp语法,但是,我发现合并文件后,合并集中不包含换行符


我想知道s3distcp是否包含强制换行的选项,或者是否有其他方法可以实现这一点,而无需直接修改源文件(或复制源文件并执行相同操作)

如果您的文本文件以唯一的字符序列开头/结尾,您可以首先使用
s3distcp将它们合并到单个文件中(我通过将
--targetSize
设置为一个非常大的数字来实现这一点),然后在Hadoop streaming中使用
sed
添加新行;在下面的示例中,每个文件都包含一个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"'

看起来你需要向单行文件本身添加新行。这不是一个选项吗?是的,我希望避免这种情况,并直接从s3distcp“免费”获得它,但不幸的是,听起来我无法避免这种情况