hadoop grep 示例中每行一张地图是否合理?

Is one map per line in hadoop grep example justified?

我是一个 hadoop 新手。在一个相当大的集群中查看类似实现的 hadoop 示例时,我想知道为什么 grep 示例与 hadoop 代码一起出现,为什么他们每行有一个映射?

我知道从教学实例的角度看是有道理的。但是在真正的 hadoop 集群中,grep 将在行业(1 PB 日志文件)规模上完成,是否值得每行创建一个 map() ?如果我们每行创建一个地图,创建 map() 的开销和跟踪它的 tasktracker 以及相关的带宽使用是否合理?

不会为每一行做一个单独的Map任务;您混淆了 MapReduce 的编程模型和执行模型。

当您实现一个映射器时,您正在实现一个对单条数据(假设是日志文件中的一行)进行操作的函数。 hadoop 框架基本上负责遍历所有日志文件,读取每一行,并将该行传递给映射器。

MapReduce 允许您以处理有用抽象的方式编写代码:日志文件中的一行就是一个很好的例子。使用像 Hadoop 这样的东西的好处是它会为你处理这段代码的并行化:它会把你的程序分发给一堆执行它的进程(TaskTracker),那些 TaskTracker 会从存储它的 HDFS 节点(数据节点)。