这篇文章主要介绍“MapReduce是什么”,在日常操作中,相信很多人在MapReduce是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MapReduce是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1 map函数的输出先由MapReduce框架处理,然后再被发送到reduce函数。这一处过程根据键来对键/值对进行排序和分组。
2 整个数据流的例子如图2-1所示。在图的底部是Unix的管道,模拟整个MapReduce的流程。
图2-2 MapReduce中单一reduce任务的数据流图
10 reduce任务的数目并不是由输入的大小来决定,而是单独具体指定的。 如果有多个reducer,map任务会对其输出进行分区,为每个reduce任务创建一个分区(partition)。每个分区包含许多键(及其关联的值),但每个键的记录都在同一个分区中。分区可以通过用户定义的partitioner来控制,但通常是用默认的分区工具,它使用的是hash函数来形成"木桶"键/值,这种方法效率很高。
一般情况下,多个reduce任务的数据流如图2-3所示。此图清楚地表明了map和reduce任务之间的数据流为什么要称为"shuffle"(洗牌),因为每个reduce任务的输入都由许多map任务来提供。shuffle其实比此图所显示的更复杂,并且调整它可能会对作业的执行时间产生很大的影响。
图 2-3 多个reduce任务的MapReduce数据流
11 有可能不存在reduce任务,不需要shuffle的时候,这样的情况是可能的,因为处理可以并行进行。在这种情况下,唯一的非本地节点数据传输是当map任务写入到HDFS中(见图2-4)。
图 2-4 MapReduce中没有reduce任务的数据流
12 在集群上MapReduce作业的数量被可用带宽限制,因此要保证map和reduce任务之间传输的代价是最小的。Hadoop允许用户声明一个combiner,运行在map的输出上-- 该函数的输出作为reduce函数的输入。由于combiner是一个优化方法,所以Hadoop不保证对于某个map的输出记录是否调用该方法,调用该方法多少次。换言之,不调用该方法或者调用该方法多次,reducer的输出结果都一样。
combiner的规则限制着可用的函数类型。Hadoop权威指南中举了一个求最高气温和平均气温的例子,很好的说明了这点。求最高气温就可以使用,求平均气温使用可能出错。因此combiner并不能取代reduce函数。虽然它可以帮助减少map和reduce之间的数据传输量,但是是否在MapReduce作业中使用combiner是需要慎重考虑的。
13 Hadoop提供了一个API来运行MapReduce,并允许你用除java以外的语言来编写自己的map和reduce函数。Hadoop流使用Unix标准流作为Hadoop和程序之间的接口,所以可以使用任何语言,只要编写的MapReduce程序能够读取标准输入,并写入到标准输出。 流适用于文字处理,在文本模式下使用时,它有一个面向行的数据视图。
到此,关于“MapReduce是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。