gpt4 book ai didi

hadoop - 需要帮助编写 Map/Reduce 作业以找到平均值

转载 作者:可可西里 更新时间:2023-11-01 14:44:54 27 4
gpt4 key购买 nike

我是 Hadoop Map/Reduce 的新手。我正在尝试编写一个 Map/Reduce 作业来查找 n 个进程所花费的平均时间,给定如下输入文本文件:

ProcessName Time
process1 10
process2 20
processn 30

我看了几个教程,但仍然无法透彻理解。我的 mapper 和 reducer 类应该如何解决这个问题?我的输出始终是文本文件还是可以将平均值直接存储在某种变量中?

谢谢。

最佳答案

您的映射器读取文本文件并在每一行上应用以下映射函数

map: (key, value)
time = value[2]
emit("1", time)

所有 map 调用都会发出键“1”,该键将由一个 reduce 函数处理

reduce: (key, values)
result = sum(values) / n
emit("1", result)

由于您使用的是 Hadoop,因此您可能已经在 map 函数中看到了 StringTokenizer 的使用,您可以使用它来仅获取一行中的时间。您也可以考虑一些如何计算 n(进程数)的方法,例如,您可以在另一个只计算行数的作业中使用计数器。

更新
如果您要执行此作业,则必须为每一行将一个元组发送到 reducer,如果您在多台机器上运行 Hadoop 集群,则可能会阻塞网络。一种更聪明的方法可以计算更接近输入的时间总和,例如通过指定组合器:

combine: (key, values)
emit(key, sum(values))

然后在同一台机器的所有 map 功能的结果上执行此组合器,即,两者之间没有网络。然后,reducer 只会获得与集群中的机器一样多的元组,而不是与日志文件中的行一样多。

关于hadoop - 需要帮助编写 Map/Reduce 作业以找到平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18062476/

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