你也能看懂Hadoop——MapReduce
上期我们谈到了大数据技术框架:Hadoop的两大核心技术中的分布式文件系统HDFS,今天我们来了解另一个核心技术:分布式编程模型MapReduce。
CSOT工程师
小智,上次说到了HDFS,好像很高级哦。是不是有了HDFS,我们的数据应用就可以飞起来了呢?
晓智
HDFS只是HADOOP一只翅膀,要实现飞起来,还需要另一只翅膀。HDFS解决了数据存储问题,但是对数据高效应用,还需要另一个技术,它就是“分布式编程模型MapReduce”。
CSOT工程师
这是什么咚咚?
晓智
MapReduce 是一个软件框架,基于该框架我们能够容易地编写应用程序,这些应用程序能够运行在由上千个机器组成的大集群上,并以一种可靠的,具有高容错能力的方式并行地处理上TB级别的数据集。
CSOT工程师
又高效,又容错,有这么厉害么?
晓智
为了消除你的疑问,我就给你讲解一下MapReduce的计算原理和作业流程。
MapReduce的主要思想是“分而治之”,它将一个数据处理的过程拆分为“Map”(映射) 和“Reduce”(规约)两个部分。我们可以大致的理解为:MapReduce可以将一个复杂的任务通过某种映射拆分成若干个“相对简单”的任务,经过各个计算节点计算得到结果后再汇总返回。
MapReduce Job
在Hadoop中,每个MapReduce任务都被分为2个执行阶段:优先执行的Map阶段和随后执行的Reduce阶段,这两个阶段均有各自的Job。由JobTracker管理,由TaskTracker执行。
JobTracker 和 TaskTracker
与HDFS的NameNode与DataNode 主从关系类似,JobTracker与TaskTracker 也是上下级关系。JobTracker管理和调度着TaskTracker的工作,而TaskTracker是具体的job执行者。每个计算集群只有一个JobTracker,一旦JobTracker出错,则将导致集群中所有正在运行的任务失败,所以JobTracker必须运行在稳定可靠的节点上。
TaskTracker除了负责执行任务以外,还需要向JobTracker汇报自己任务完成情况,JobTracker会根据这些情况发出相对应的指令。
Mapper 和 Reducer
在一个TaskTracker中,从JobTracker获取的job会被分成Map task 和Reduce task,分别由Mapper 和 Reducer 来执行。Mapper 和 Reducer 的计算方法都是用户自定义的,一般来说,Mapper能达到使用同样 48 30093 48 14697 0 0 7501 0 0:00:04 0:00:01 0:00:03 7502的算法来计算处理不同的数据块的作用,Reducer的作用则是将Mapper的结果汇总在一起再通过某些计算得到目标结果。
当用户提交一个MapReduce作业时:
1) 通过客户端节点(client node)提交MapReduce任务请求。
2) Jobtracker接受到任务后,将任务拆分,调度给空闲的tasktracker,tasktracker在执行任务时,会对Jobtracker返回进度报告,Jobtracker则会记录任务进行情况,一旦出现某个tasktracker任务执行失败,Jobtracker则会把任务分配给另一台tasktracker,直到任务完成为止。
3) 对于每一个job, tasktracker会将该任务分为Map task 和Reduce task 分别执行。Map task会在tasktracker的Map槽点执行,结果的汇总计算工作会在 tasktracker 的 Reduce槽点执行,最终返回Reduce task的结果。
CSOT工程师
啊哈哈,我懂了,看起来以后数据处理可以高枕无忧了。
晓智
不要急,万事万物都有优缺点,MapReduce也有。
优点:
1) 可以处理海量数据,实现并行计算,负载均衡。
2) 良好的伸缩性,每增加一台服务器,就能将差不多的计算能力附加到集群中。
3) 高容错性。
缺点:
1) MapReduce过于底层,编写Map,Reduce函数较为困难。
2) 不是所有算法都能用MapReduce实现。
3) 不适合实时响应的需求。
文章转载自:华星智能制造规划处
Hadoop大数据应用
你也能懂大数据