gpt4 book ai didi

java - 如何在Hadoop中以编程方式获取每个 reduce task 的执行时间?

转载 作者:行者123 更新时间:2023-12-02 21:40:47 26 4
gpt4 key购买 nike

我正在hadoop中运行一个简单的map reduce作业,在Java中我可以使用System.currentTimeInMillis()函数来计算开始时间和结束时间,在mapreduce中我该如何为map(endTime-startTime)完成此功能,reduce(endTime-startTime) 。我尝试了以下代码..和我set job.setNumReduceTasks(4)
编辑:

public void reduce(Text _key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException {
// process values
long start=System.currentTimeMillis();
int sum=0;

for (IntWritable val : values) {

sum+=val.get();

}
result.set(sum);
context.write(_key, result);
long end=System.currentTimeMillis();

System.out.println(" time Taken "+(end-start));


}

但结果是:
time Taken 1
time Taken 0
time Taken 0
time Taken 0
time Taken 0
time Taken 0
time Taken 0
time Taken 0
time Taken 0
time Taken 0
----------
----------

但是我将reduce任务的数量设置为4 ..并且这里显示了执行每个键值对所花费的时间。

添加setup()方法和cleanup()方法之后。
public void run(Context context) throws IOException, InterruptedException {
start=System.currentTimeMillis();
setup(context);
try {
while (context.nextKey()) {
reduce(context.getCurrentKey(), context.getValues(), context);
}
} finally {
cleanup(context);
end=System.currentTimeMillis();
System.out.println(" End- Start : "+(end-start));
}
}

public void reduce(Text _key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException {

int sum=0;

for (IntWritable val : values) {

sum+=val.get();

}
result.set(sum);
context.write(_key, result);

}

我已经使用 job.setNumReduceTasks(4)将reducer的数量设置为4。但是它只显示一个时间戳。.我在这里做错什么了吗...

最佳答案

要查找 reducer 的总时间,您可以:

  • 向将保存开始时间的类中添加long变量。
  • 用reducer的 setup() 方法设置开始时间。
  • 在 reducer 的 cleanup() 方法中获取结束时间,然后从存储的开始时间中减去以获取总时间。
  • 关于java - 如何在Hadoop中以编程方式获取每个 reduce task 的执行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28919295/

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