关于MapReduce
角色:
执行MapReduce任务的角色:JobTracker,TaskTracker,一个Hadoop集群只有一个JobTracker,JobTracker负责管理和调度工作,TaskTracker负责执行工作。
数据流:
MapReduce工作的简易图
一个Reduce任务的MapReduce数据流
多个Reduce任务的MapReduce数据流
无Reduce任务的MapReduce数据流
MapReduce任务优化:
MapReduce的任务优化自主集中在两个方面:1.计算性能方面的优化 2.I/O操作方面的优化,主要包含六项内容:
1.任务调度
Hadoop总会将优先任务分配给空闲的机器,使所有任务公平地分享系统资源
Hadoop会尽量将Map任务分配给InputSplit所在的机器以减少I/O操作。
2.数据预处理与InputSplit的大小
Hadoop擅长处理少量的大数据,而非大量的小数据。提交MapReduce job前进行预处理,合并数据以提高执行效率。
3.Map和Reduce任务的数量
合理设置Map任务和Reduce任务的数量对提高效率也使非常重要的。
MapReduce任务槽:MapReduce任务槽就是这个集群能够运行的最大任务量。
设置Map数量主要参考Map的运行时间,Reduce任务参考任务槽的数量即可,一般为任务槽的0.95或1.75倍
4.Combine函数
combine是一个本地合并数据的函数。MapReduce框架运行用户写的combine函数用于本地合并,减少网络I/O操作消耗
5.压缩
对Map的输出和最终的输出结果进行压缩,减少网络数据传输量。
6.自定义comparator
自定义数据类型,实现更复杂的目的。
Hadoop流:
Hadoop流就是UNIX标准流,不具体介绍。