Hadoop 如何让s3distcp与换行符合并
我有数百万个小的一行s3文件,我正在寻找合并在一起。我已经关闭了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添加新行;在下面的
我想知道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“免费”获得它,但不幸的是,听起来我无法避免这种情况