我使用自定义映射程序运行测试AWS EMR作业,但使用NONE作为reducer。我在13个单独的“部分”文件中获得了(预期)输出。如何将它们组合成一个文件?
我不需要以任何特殊方式聚合数据,我不关心它是否被排序,任意重新排序或按顺序排列。但我想有效地将数据放回一个文件中。我是否必须手动执行此操作,或者是否有办法将其作为EMR群集的一部分?
我很奇怪,没有默认选项或某种自动步骤可用于此。我已经阅读了一些有关Identity Reducer的内容。它是否符合我的要求,如果是,我如何在通过EMR控制台启动集群时使用它?
我的数据在S3中。
修改
非常清楚,我可以在完成工作后在所有输出部分上运行cat
,如果这是我必须做的事情。本地或EC2实例或其他任何内容。这真的是每个人都做的吗?
答案 0 :(得分:3)
如果映射器部件文件的输出本身很小,那么您可以尝试使用hadoop fs -getmerge
将它们合并到本地文件系统:
hadoop fs -getmerge s3n://BUCKET/path/to/output/ [LOCAL_FILE]
然后将合并的文件放回S3:
hadoop fs -put [LOCAL_FILE] s3n://BUCKET/path/to/put/
要使上述命令起作用,您应该在core-site.xml
<property>
<name>fs.s3n.awsAccessKeyId</name>
<value>YOUR_ACCESS_KEY</value>
</property>
<property>
<name>fs.s3n.awsSecretAccessKey</name>
<value>YOUR_SECRET_ACCESS_KEY</value>
</property>