1

我将把要做的工作大致分为两部分:

  1. 我有大量数据(大约 1 TB,分为数百个文件),我通过 distcp 从 S3 复制到 HDFS

  2. 这些数据将由 hadoop 流式作业(一个简单的映射器和减速器,用 python 编写)处理

现在,我必须等到所有数据都被复制到HDFS,然后才能开始我的实际工作。问题来了:考虑到它DISTCP本身就是一个 map-reduce 作业,有没有办法可以“流线化”这两个作业,即第二个作业是否可以开始处理已经复制的数据(例如distcp已经复制一些文件,第二份工作在技术上已经可以开始了)?

我希望我已经说清楚了。

4

1 回答 1

1

您可以使用 S3InputFormat (https://github.com/ATLANTBH/emr-s3-io) 将数据直接读取给您的映射器。但请注意,如果作业失败,您将重新下载所有数据。所以,我建议在处理之前下载所有数据。如果您不需要一次处理整个数据,您可以在 distcp 启动后启动 mapreduce。但是您应该编写自己的 FileInputFormat 扩展名,它将记录某处(我想在输入目录中)处理了哪些文件,并在每次调用时过滤掉已处理的文件(在方法 getSplits() 中)并仅处理未处理的文件。

于 2012-10-11T15:38:10.297 回答