Hadoop学习笔记—MapReduce的理解

 

  我不喜欢照搬书上的东西,我以为那样写个blog没多大意义,不如直接把那本书那一页告诉你们,来得省事。我喜欢将我本身的理解。因此我会说说我对于Hadoop对大量数据进行处理的理解。若是有理解不对欢迎批评指责,不胜感激。框架

Hadoop为什么有如此能耐?

       Hadoop之因此能处理大量数据,是由于他提供了一个让大量机器同时处理问题的一个框架,并且高扩展性,能够随时添加机器进来。我曾经和学长讨论过Hadoop和高性能计算机,当时我说这个就像,小白对阵大侠,大侠是高性能计算,小白是普通机器。大侠只有一个,小白却能有千千万万。一个小白确定拼不过大侠,上十个小白,百个小白……早晚小白会超过大侠。那么如何让一群性能不是很强劲的电脑结合起来,产生惊人的处理能力呢?就是经过Hadoop系统来实现。oop

什么是MapReduce

       Hadoop的文件系统,对于节点管理,最终仍是为了进行运算。因此其中最主要的运算核心仍是MapReduce。有些书上会吧Map和Reduce翻译过来说,我以为很生硬,不如直接用英文来的好。不翻译过来的前提要明白Map和Reduce的内在含义。Map原意是地图,计算机上多为映射,怎么个映射法?其实就是某个键值对映射到固定的reduce。那reduce又是什么,开始我也不明白,为何不用compute了?后来算是明白了,其实reduce是对数据集进行精简,而后得出相应结果。因此叫reduce减小的意思,有翻译为归并。性能

为何提出Map和Reduce

       当咱们手中有大量数据的时候,如何对数据进行处理,好比去重,排序等甚至更加复杂的处理呢?咱们又要如何来用多台机器对数据进行处理?spa

要是我,我确定会将大量的数据进行分类,同一类的数据集给同一台机器来处理。怎么分?怎么处理呢?这就须要看到底要对数据作那些处理了。翻译

而这种先分类后处理的想法就是MapReduce的过程。其中分类的具体过程在mapreduce结构中称为shuffle,下面讲解mapreduce的过程当中会包涵在其中,但不会单独提出来说。blog

若是不对数据分类,意味着不能用多台机器对数据进行处理,由于会出现机器处理的数据之间存在某些重要的联系,这些联系决定了这类数据必定要在同一台机器上运行。因此,运算前对数据进行分类是必要的准备。也就是Map的过程,将有联系的数据分到一块儿,而后交给相应的reduce作处理。Reduce是对数据进行最终目的性的处理。排序

 MapReduce的细节处理

首先对大量的数据进行简单的分割,以下图所示,每个split的大小多是64M也多是128M其大小是由硬盘传输速度决定的。it

 、io

图1.HDFS对大量数据进行分块容器

Map过程

对于每一个split交给一个map来处理。过程以下。Map的输入是split里面的一行,key为偏移量,value就是该行的内容。处理的结果放入一个容器中,容器填满了就溢出到硬盘,溢出的过程会对数据进行partition和sort。Sort很容易理解,关键是partition,partition也就是前面说的分类,这一部最终决定该键值对将来会交给哪一个reduce。但全部map运行完了,就会有一堆spill。固然在map的过程当中reduce的准备阶段以及开始,reduce的准备阶段就是把本reduce对应的partition移动到本地来。但要进行reduce操做必定要等全部map结束,属于本reduce的partition所有移到本地,而后真正进入reduce阶段。

 

图2.Map过程

 

 

Reduce 阶段

首先数据准备,也就是上面说的,将属于本reduce的partition移动到本地来。而后进行排序最后成为reduce 的运算数据。Reduce才是真正对数据进行相应的处理产生最终结果。在map和reduce有一个环节—shuffle。我已经融合在了上面说介绍的步骤里面了。Shuffle指的就是数据经过map进行初步处理后,将同一类的数据分发给同一个reduce。

 图3.map+reduce过程

相关文章
相关标签/搜索