Hadoop 系列教程:mapreducer 原理(连载)
本文来源于知乎的作者“佛说”的: Hadoop 系列教程:mapreducer 原理(连载) - 知乎
1. mapreduce的主要目的
分而治之,化大为小。
2. map和reducer阶段分别解决什么样的问题
map阶段解决的问题,就是把输入变成KV结果用于reducer的输入
reducer 解决的问题的就是按分组进行汇总
3. map任务的输入文件是怎么分割的
inputSplit split默认一个block对应一个split,这个split可以自己实现成对应多个block
4. wordcount中map阶段做了什么
按一个词当key,values按1输出
输出某一个key[1,1,1,1,1,1,1,1,1,1,1,1] key2[1,1,1,1,1,1,1,1,1,1,1,1]
map运行图
5. reducer的数量是怎么决定的
reducer的数量是通过partition的数量决定的
6. reducer是怎么从map拉取计算数据的
copy merge 占整个reducer运行进度的33%。
7. 怎么减少reducer从map拉取的数据量
使用combiner可以减少reducer的输入数据量,默认是不提供的因为这个东西不是所有场景都能使用,需要自己根据需求自定义
8. reducer的输入文件是怎么排序的
9. wordcount中reducer阶段做了什么
按组累加
10. 总结shuffle的整个过程
11. mapreducer的详细过程
map: inputsplit->read->map->mapbuff->spill->combiner->sort->partition->combiner->sort->mergepartitionfile
reducer: copy->copybuff->merger->sort->mergerfile->sort->sortTotalReducerInputFile>reducer->output
12. mapreducer1和mapreducer2的区别
资源使用方式
MR1:先定义好map任务槽 recude任务槽,所以集群能跑多少个map和reducer是固定的
MR2:通过向resourceManager去申请,map和reducer可以灵活分配
系统结构:(该文章出自海牛学院大数据培训)
MR1: jobtracker
作业和任务管理
资源调度
tasktarcker
任务执行计算
MR2:resourcemanager
资源调度
nodemanager
任务执行计算
资源监控
applicationmaser
作业和任务管理
13. mapreducer的配置
推测执行
计数器
14. mapreducer可以优化的地方
(1).块的大小和文件的数量这个就决定map任务的数量
(2).map buff缓冲区的大小
(3).map输入的KEY的设计
(4).reduce的个数
(5).reduce copy buff缓冲区的大小
(6).减少reduce阶段的数据输入量
(7).map的sort是使用磁盘的
reducer的个数决定最终输出文件的个数,可以通过-Dmapreduce.job.reduces参数设定
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount -Dmapreduce.job.reduces=10 /user/qingniu/input /user/qingniu/output