distcp与hadoop流作业

mm9b1k5b  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(270)

我将把要做的工作大致分为两部分:
我有大量的数据(大约1 tb,分为数百个文件),我正在通过distcp从s3复制到hdfs
这些数据将由hadoop流作业(一个简单的Map器和缩减器,用python编写)执行
现在,我要等到所有的数据都拷贝到 HDFS 只有在那之后我才能开始真正的工作。问题是:考虑到这一点 DISTCP 本身就是一个map reduce作业,有没有一种方法可以将这两个作业“流线化”,即第二个作业是否可以开始处理已经复制的数据(例如。 distcp 已经复制了一些文件,从技术上讲第二个作业可以在这些文件上开始)?
我希望我已经说清楚了。

r6l8ljro

r6l8ljro1#

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

相关问题