快乐学习
前程无忧、中华英才非你莫属!

MapReduce的高级特性

一 、计数器

        1、MapReduce计数器是什么?

              计数器是用来记录job的执行进度和状态的。它的作用可以理解为日志。我们可以在程序的某个位置插入计数器,记录数据或者进度的变化情况。

        

        2、MapReduce计数器能做什么?

             MapReduce 计数器(Counter)为我们提供一个窗口,用于观察 MapReduce Job 运行期的各种细节数据。

             对MapReduce性能调优很有帮助,MapReduce性能优化的评估大部分都是基于这些Counter的数值表现出来的。

        

        3、MapReduce 计数器分类?

             1、内置计数器、 2、用户定义的计数器  

        

               详解:http://www.cnblogs.com/codeOfLife/p/5521356.html

                         http://blog.csdn.net/xw_classmate/article/details/50954384

 


 

二、排序

   

      排序是MapReduce的核心技术、尽管应用本身可能并不需要对数据排序,但仍可能使用MapReduce 的排序功能来组织数据。

     1、部分排序:默认情况下,MapReduce 根据输入记录的建对数据集排序。

          控制排列顺序:由RawComparator控制的

          (详解:“http://blog.csdn.net/skywalker_only/article/details/42028289 ”)

 

      2、全排序:最简单的方法是使用一个分区,但该方法处理大型文件效率极低。丧失了MapReduce并行架构的优势。替代方案:首先创建一系列排好序的文件,其次,串联这些文件,最后生成一个全局排序的文件。全排序实例“http://dongxicheng.org/mapreduce/hadoop-terasort-analyse/

                          

      3、辅助排序(也叫二次排序):在我们实际的需求当中,往往有要对reduce输出结果进行二次排序的需求。

      4、排序总结的比较好:http://blog.csdn.net/kingjinzi_2008/article/details/7738188

 

   以下博文能够充分的理解MapReduce排序:

 

 

         Hadoop Mapreduce分区、分组、连接以及辅助排序(也叫二次排序)过程详解:http://blog.csdn.net/xiaocaidexuexibiji/article/details/12125699

         MapReduce中的排序和分组:http://www.cnblogs.com/edisonchou/p/4299085.html

         hadoop之MapReduce自定义二次排序流程实例详解:http://zengzhaozheng.blog.51cto.com/8219051/1379271/

         Hadoop中TeraSort算法分析:http://dongxicheng.org/mapreduce/hadoop-terasort-analyse/

         MapReduce:详解Shuffle过程: http://langyu.iteye.com/blog/992916

         Mapreduce实例-sort全排序:http://blog.csdn.net/liuzhoulong/article/details/11175731

 


 

三、连接

         MapReduce能够从大型数据集间 “连接操作join”但是自己从头编写相关代码执行连接相当棘手,除了编写MapReduce程序,

        可以采用高级框架:Pig,Hive,Cascading 等。他们都将连接操作为整个实现的核心!

        为了实现内连接和外连接,MapReduce中有三种连接策略,如下所示。这三种连接策略有的在map阶段,有的在reduce阶段。它们都针对MapReduce的排序-合并(sort-merge)的架构进行了优化。

        重分区连接(Repartition join)——reduce端连接。使用场景:连接两个或多个大型数据集。

        复制连接(Replication join)——map端连接。使用场景:待连接的数据集中有一个数据集小到可以完全放在缓存中。

        半连接(Semi-join)——另一个map端连接。使用场景:待连接的数据集中有一个数据集非常大,但同时这个数据集可以被过滤成小到可以放在内存中。

        Hadoop中MapReduce多种join实现实例分析:http://database.51cto.com/art/201410/454277.htm

        hadoop MapReduce 三种连接:http://blog.csdn.net/haizhaopeng/article/details/44726293#comments


四、边数据分布

        所谓的边数据(Side Data)可以理解为MapReduce作业执行过程中

        

        所有任务都有可能要使用到的只读的的数据,用以辅助处理主数据

        

        使用JobConfiguration

        

        Configuration类的各种setter方法可以方便的设置一些键值对类型的数据

        用户可以通过getConfiguration方法获得配置的信息

        

        这种方式足以应对很多只需要设置一些属性的场合

        但是其缺点是:

        

    

    - 只适合类似属性设置的小数据
    - 对于很复杂的对象,用户需要自己设置序列化和反序列化
    - 每次读取配置的时候所有设置都将读取内存,不管有没有用到

        

        DistributedCache

        

        分布式缓存机制在作业运行之前将用户设置的数据拷贝到各个节点中以供使用

        缓存的容量大小默认为10G,可以通过yarn.nodemanager.localizer.cache.target-size-mb来配置(以字节为单位)

        

        具体的使用方式参考:MapReduce中的DistributedCache

打赏
赞(0) 打赏
未经允许不得转载:同乐学堂 » MapReduce的高级特性

特别的技术,给特别的你!

联系QQ:1071235258QQ群:710045715

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

error: Sorry,暂时内容不可复制!