其他

你也能看懂Hadoop——MapReduce

2018-01-09 Hadoop大数据应用

上期我们谈到了大数据技术框架:Hadoop的两大核心技术中的分布式文件系统HDFS,今天我们来了解另一个核心技术:分布式编程模型MapReduce。


CSOT工程师

小智,上次说到了HDFS,好像很高级哦。是不是有了HDFS,我们的数据应用就可以飞起来了呢?

晓智

HDFS只是HADOOP一只翅膀,要实现飞起来,还需要另一只翅膀。HDFS解决了数据存储问题,但是对数据高效应用,还需要另一个技术,它就是“分布式编程模型MapReduce”。


CSOT工程师

这是什么咚咚?

晓智

MapReduce 是一个软件框架,基于该框架我们能够容易地编写应用程序,这些应用程序能够运行在由上千个机器组成的大集群上,并以一种可靠的,具有高容错能力的方式并行地处理上TB级别的数据集。

CSOT工程师

又高效,又容错,有这么厉害么?

晓智

为了消除你的疑问,我就给你讲解一下MapReduce的计算原理和作业流程。


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的作业流程

当用户提交一个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也有。


MapReduce优缺点

优点:

1) 可以处理海量数据,实现并行计算,负载均衡。

2) 良好的伸缩性,每增加一台服务器,就能将差不多的计算能力附加到集群中。

3) 高容错性。

缺点:

1) MapReduce过于底层,编写Map,Reduce函数较为困难。

2) 不是所有算法都能用MapReduce实现。

3) 不适合实时响应的需求。


文章转载自:华星智能制造规划处



Hadoop大数据应用 

你也能懂大数据   

长按,识别二维码,加关注

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存