isu*_*ine 5 hadoop amazon-s3 amazon-emr hadoop-streaming
我有成千上万的小号s3小文件,我希望将它们合并在一起。我使用了s3distcp语法,但是发现合并文件后,合并集中不包含换行符。
我想知道s3distcp是否包含任何强制插入换行符的选项,或者是否存在另一种方法来完成此操作而无需直接修改源文件(或复制并执行相同操作)
如果您的文本文件以唯一的字符序列开头/结尾,您可以首先将它们合并到一个文件中s3distcp(我通过设置--targetSize为一个非常大的数字来做到这一点),然后使用sedHadoop 流来添加新行;在以下示例中,每个文件包含一个 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"'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
761 次 |
| 最近记录: |