我在aws emr上运行了一个现有的map reduce作业,该作业处理数十亿行日志,并通过mapper进行一些计算以形成(键、值)对。这些计算非常耗时,我需要在其他一些map reduce作业中使用这些计算的中间步骤的输出。所以,我想在不影响现有作业的情况下(即不更改当前的Map器或缩减器),点击计算的输出并上传到s3。在上传之前,我将首先把这些行收集到一个本地临时文件中,一旦文件变得足够大,我将把这个文件上传到s3。
问题是-与reducer不同,mapper不能基于键对数据进行排序。如何为s3设计唯一的文件名,以便从不同的Map器上载数据,从而避免任何文件名冲突?
我在用java。这个问题也可以解决,若有一种方法来获得Map器集群id或生成随机编号。唯一的所有Map器(我不知道怎么做?)
1条答案
按热度按时间n6lpvg4x1#
您可以获取当前运行的hadoop任务的任务尝试id,该id在所有Map程序中都是唯一的,因此可以用作文件名。以下方法将获取尝试id: