我是hadoop新手。当我在一个相当大的集群中查看类似实现的hadoop示例时,我想知道为什么hadoop代码附带的grep示例,为什么它们每行有一个Map?我知道从一个教学示例的Angular 来看是有道理的。但是在一个真正的hadoop集群中,grep是在行业(1pb日志文件)规模上完成的,那么每行创建一个map()值吗?如果我们每行创建一个map,那么创建map()的开销以及tasktracker跟踪它和相关带宽使用情况是否合理?
gajydyqb1#
不会对每条线执行单独的Map任务;您混淆了mapreduce的编程模型和执行模型。当您实现一个Map器时,您正在实现一个对单个数据段(比如日志文件中的一行)进行操作的函数。hadoop框架基本上负责遍历所有日志文件,读取每一行,并将该行传递到Map器中。mapreduce允许您以这样一种方式编写代码:处理一个有用的抽象:日志文件中的一行就是一个很好的例子。使用hadoop之类的东西的好处是它可以为您处理这些代码的并行化:它会将您的程序分发到一组将执行它的进程(tasktracker),这些tasktracker会从存储它的hdfs节点(data nodes)读取数据块llof。
1条答案
按热度按时间gajydyqb1#
不会对每条线执行单独的Map任务;您混淆了mapreduce的编程模型和执行模型。
当您实现一个Map器时,您正在实现一个对单个数据段(比如日志文件中的一行)进行操作的函数。hadoop框架基本上负责遍历所有日志文件,读取每一行,并将该行传递到Map器中。
mapreduce允许您以这样一种方式编写代码:处理一个有用的抽象:日志文件中的一行就是一个很好的例子。使用hadoop之类的东西的好处是它可以为您处理这些代码的并行化:它会将您的程序分发到一组将执行它的进程(tasktracker),这些tasktracker会从存储它的hdfs节点(data nodes)读取数据块llof。