Hadoop 结合AWS EMR输出

Hadoop 结合AWS EMR输出,hadoop,amazon-web-services,amazon-s3,emr,amazon-emr,Hadoop,Amazon Web Services,Amazon S3,Emr,Amazon Emr,我用一个自定义映射器运行了一个测试AWS EMR作业,但没有一个作为减速机。我在13个单独的“部分”文件中得到了(预期的)输出。如何将它们合并到一个文件中 我不需要以任何特殊的方式聚合数据,我也不关心数据是否被排序、任意重新排序或保持有序。但是我想有效地将数据放回一个文件中。我是否必须手动执行此操作,或者作为EMR集群的一部分,是否有方法执行此操作 对我来说很奇怪,没有一个默认选项或某种自动步骤可用于此。我读过一些关于身份缩减器的文章。它是否符合我的要求?如果是,在通过EMR控制台启动集群时如何

我用一个自定义映射器运行了一个测试AWS EMR作业,但没有一个作为减速机。我在13个单独的“部分”文件中得到了(预期的)输出。如何将它们合并到一个文件中

我不需要以任何特殊的方式聚合数据,我也不关心数据是否被排序、任意重新排序或保持有序。但是我想有效地将数据放回一个文件中。我是否必须手动执行此操作,或者作为EMR集群的一部分,是否有方法执行此操作

对我来说很奇怪,没有一个默认选项或某种自动步骤可用于此。我读过一些关于身份缩减器的文章。它是否符合我的要求?如果是,在通过EMR控制台启动集群时如何使用它

我的数据是S3


编辑


非常清楚的是,我可以在工作完成后在所有输出部件上运行
cat
,如果我必须这样做的话。本地的,或者EC2实例上的,或者其他的。这真的是每个人都在做的吗?

如果映射器部件文件本身的输出很小,那么您可以尝试使用
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>

fs.s3n.awsAccessKeyId
您的\u访问\u密钥
fs.s3n.awsSecretAccessKey
您的\u密码\u访问\u密钥

看看。@DonRoby Yes看到了。它已经5年了,没有多大帮助。通过控制台启动作业时,如何提供
-jobconf mapred.reduce.tasks=1
?我怎么知道这是不是个坏主意?我没有回答,因为我自己还没有机会尝试一下。要知道这是不是一个好主意,最好的办法可能是根据你的实际情况来尝试。听起来对性能的影响很大,这取决于您已经拥有的代码是否确实减少了数据量。@DonRoby好的。因为它是一个没有reduce的映射程序,所以它根本不会减少数据量。事实上,它通过将结果附加到输入行,显著增加了容量。我希望有人能告诉我,在我的数据上手动运行一个大的
cat
是否比Amazon EMR能做的任何事情都要快。