我有一个在 AWS EMR 上运行的现有 map reduce 作业,它处理数十亿行日志并进行一些计算以从 mapper 形成(键,值)对。这些计算非常耗时,我需要在其他一些 map reduce 作业中使用这些计算的一些中间步骤的输出。所以,我想挖掘计算的输出并上传到s3,而不影响现有的工作(即不改变当前的映射器或reducer)。在上传之前,我会先将这些行收集到一个本地临时文件中,一旦文件变得足够大,我会将这个文件上传到 s3。
问题是 - 与 reducer 不同,Mapper 不能根据键对数据进行排序。如何为 s3 设计唯一的文件名,以便从不同的映射器上传数据,这样就不会有任何文件名冲突?
我正在使用 Java。如果有办法获取映射器集群 ID 或生成随机编号,也可以解决问题。所有映射器独有(我不知道该怎么做?)