gpt4 book ai didi

hadoop - 将文件从 AWS EMR 集群中的映射器上传到 S3

转载 作者:可可西里 更新时间:2023-11-01 16:18:46 24 4
gpt4 key购买 nike

我有一个现有的 map reduce 作业在 AWS EMR 上运行,它处理数十亿行日志并进行一些计算以从映射器形成(键,值)对。这些计算非常耗时,我需要在其他一些 map reduce 作业中使用这些计算的某些中间步骤的输出。所以,我想利用计算的输出并上传到 s3,而不影响现有的工作(即不改变当前的映射器或缩减器)。在上传之前,我首先将这些行收集到一个本地临时文件中,一旦文件变得足够大,我将把这个文件上传到 s3。

问题是 - 与 reducer 不同,Mapper 不能根据键对数据进行排序。我如何为 s3 设计唯一的文件名以从不同的映射器上传数据,这样就不会有任何文件名冲突?

我正在使用 Java。如果有办法获取映射器集群ID或生成随机编号,问题也可以解决。对所有映射器都是唯一的(我不知道该怎么做?)

最佳答案

您可以获得当前正在运行的 Hadoop 任务的任务尝试 ID,它在所有映射器中都是唯一的,因此可以用作文件名。以下方法将为您提供尝试 ID:

public static String getAttemptId(Configuration conf) throws IllegalArgumentException
{
if (conf == null) {
throw new NullPointerException("conf is null");
}

String taskId = conf.get("mapred.task.id");
if (taskId == null) {
throw new IllegalArgumentException("Configutaion does not contain the property mapred.task.id");
}

String[] parts = taskId.split("_");
if (parts.length != 6 ||
!parts[0].equals("attempt") ||
(!"m".equals(parts[3]) && !"r".equals(parts[3]))) {
throw new IllegalArgumentException("TaskAttemptId string : " + taskId + " is not properly formed");
}

return parts[4] + "-" + parts[5];
}

关于hadoop - 将文件从 AWS EMR 集群中的映射器上传到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13467611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com