我是一个hadoop新手。虽然在一个相当大的集群中通过hadoop示例进行类似的实现,但我想知道为什么和hadoop代码一起出现的grep示例,为什么每行有一个映射?
我知道从教学实例的角度来看这是有道理的。但是在一个真正的hadoop集群中,在行业(1 PB日志文件)规模上要进行grep,是否值得为每行创建一个map()?如果我们每行创建一个映射,是否需要创建map()的开销,以及跟踪它的任务跟踪器以及相关的带宽使用情况是否合理?
答案 0 :(得分:1)
不会为每一行单独执行Map任务;您正在将MapReduce的编程模型与执行模型混淆。
实现映射器时,您正在实现一个对单个数据进行操作的函数(让我们说一个日志文件中的一行)。 hadoop框架负责基本上遍历所有日志文件,读取每一行,并将该行传递给映射器。
MapReduce允许您编写代码,使您处理有用的抽象:日志文件中的一行是一个很好的例子。使用像Hadoop这样的东西的好处是它将为你处理这段代码的并行化:它会将你的程序分发给一堆将执行它的进程(TaskTracker),而那些TaskTrackers将从那里读取数据块。存储它的HDFS节点(数据节点)。