对于MapReduce的理解
一、MapReduce的优缺点:
优点:
1.易于编程;
2.良好的扩展性;
3.高容错性;
4.适合PB级别以上的大数据的分布式离线批处理。
缺点:
1.难以实时计算(MapReduce处理的是存储在本地磁盘上的离线数据)
2.不能流式计算(MapReduce设计处理的数据源是静态的)
3.难以DAG计算(有向无环图计算,由于多个任务存在依赖关系,后一个应用
的输入是前一个应用的输出。解决这一问题的方式有Apache的Tez计算框架,
它是基于hadoop Yarn之上的DAG计算框架,它将MapReduce任务分解为多个子任务
同时可以把多个Map/ Reduce任务合并成一个大的DAG任务,这样当前一个任务完成
之后,直接将结果输出给下一个任务,不用将结果写到磁盘之上,减少了Map/Reduce
之间的文件存储。同时合理的组合其子过程,减少了任务的运行时间。)
二、Map/Reduce的Map阶段和Reduce阶段:
Map阶段由一定数量的Map Task组成:
1.输入数据的解析格式:InputFormat(默认TextInputFormat)
2.输入数据的处理:采用自定义的Mapper
【3.Combiner:Local Mini Reducer,运行在Map Task,属于Map阶段,对Map任务输出的结果进行一次简单的
Reduce以使得更少的数据被写入到磁盘和传递给Reduce。】
4.数据分区Partitioner:(将Mapper处理的数据写在本地,并确定Map结果交给哪一个
Reduce来做处理)
Reduce阶段由一定数量的Reduce Task组成:
1.远程拷贝Map阶段的输出结果
2.对数据按照key进行分组排序(shuflle & sort:group values by keys)
3.数据处理:自定义的Reduce
4.输出数据到HDFS:OutputFormat(默认TextOutputFormat)
小结:MapReduce适合离线处理大批量的数据,在Map阶段结束之后将数据大量的
写入磁盘,然后再交给Reduce阶段去处理。这样的话数据的处理效果相对
较慢,并且不利于实时计算、流式计算和DAG计算,但是这样的一个好处就
是:将数据写入磁盘,出于系统的容错考虑,避免了系统出错带来的数据的
的丢失。整体来说,MapReduce的处理效果还是不错的,尤其对于大数据的
分布式、高容错批处理。并且系统的良好的可扩展性也是有很大的优势的。
三、JobTracker 和 Tasktracker:
JobTracker:
1.负责资源的管理和作业的调度
2.将作业分解成多个任务Task,指派给TaskTracker
3.负责任务的监控和错误日志的处理
TaskTracker:
1.负责运行MapTask 和 ReduceTask
2.与JobTracker进行交互,执行JobTracker下达的命令,
并定期向JobTracker汇报任务状态。
*** MapTask相当于Mapper的引擎,ReduceTask相当于Reducer的引擎 ***
四、MapReduce的数据本地性:
任务与运行任务所需的数据处在同一个节点上,则称该任务具有数据本地性。
数据本地性分为三个类别:同节点(node-local)、同机架(rack-local)、
跨机架(off-switch)