zoukankan      html  css  js  c++  java
  • 16-1-5:MapReduce

    ???1、加载程序运行时所需要的外部类:

    命令:

    bin/hadoop jar xxxx.jar /file1 /out –D mapred.input.dir=/test/input1

    可以直接指定mapred.input.dir的值

    2、文件读取顺序:

    应用场景:当处理多个文件中的数据,且数据之间有先后关系

    例如:

    有两个文件:一个是城市跟手机号的对应数据。一个是手机号跟对应的流量,统计结果是每个城市一天的总流量。

    类似上面的需求,就需要在map程序开始之前,先将城市与手机号之间的映射数据先读取进去,然后在用map程序处理手机号与产生的流量之间的对应关系。

    所以就可以使用setup()方法,setup在map之前执行。

    继承Mapper类,重写它的setup()方法,将需要在map之前处理的逻辑写在setup()中就可以了。

    Mapper类中还有一个cleanup()方法,cleanup()里面的程序在map之后处理。

    3、Yarn平台的运行过程

    程序写完之后将它打成jar包,在linux上使用hadoop jar xxx.jar /file /out 运行程序。这个时候,jar会被框架上传到hdfs上,然后程序向ResourceManager(RM)申请资源,RM在NodeManager(NM)上为程序分配一个容器,称为MapReduceApplicationMaster(Master)。Master从HDFS上加载jar,计算需要的资源,向RM申请更多的资源(根据map和reduce向RM申请容器,容器中的内容叫资源),RM在NM上给Master分配资源。Master决定一个容器中运行的是map task还是reduce task。在task运行的过程中,不断的与Master打交道,汇报自身的运行情况。当一个task中的程序运行完成后,Master告诉RM不需要该容器了,RM通知NM回收该容器。

    4、combiner合并

    每一个map都可能会产生大量的输出数据,combiner的作用就是在map端对输出的数据先做一次合并。这样做的好处:

    1):减少网络传输到reducer的数据量,提高效率。

    2):减少reduce处理的数据量。(之前所有的结果都是在reduce完成,效率会相对低下)

    combiner最基本是实现本地key的归并,combiner具有本地reduce的功能。

    注意:combiner的不是适合所有的情况。

    例如:

    aa

    有文件a.txt和b.txt两个文件求平均数:

    如果使用combiner,先求出a.txt的平均值为1,在求出b.txt的平均数为2,然后reduce在处理两个map的结果,求得平均数为1.5。

    而正确的结果应该是10/7。所以这种情况就不适合用combiner。

    5、自定义计数器

    hadoop计数器:可以让开发人员以全局的视角来审查程序的运行情况以及各项指标,即使做出错误诊断并进行相应处理。

    自定义计数器的功能(用途)?

    可以使我们自己的操作打印在MapReduce执行页面的控制台上。

    例如:

    文件中有两行

    hello you

    hello me

    我们可以将hello出现的总次数打印在MapReduce执行时的控制台上。

    自定义计数器的实现:

    6、查看System.out.println();输出到哪了?

    7、分区

    8、shuffle

    image

    9、天龙八部

    10、MapReduce的job调优

    11、MapReduce常见算法

  • 相关阅读:
    android入门之三【应用程序组成】
    Palm应用开发之一开发环境搭建
    android 入门之一【开发环境搭建】
    在DataGridView中的CheckBox值变更后立即获取值。
    根据字符串返回类型
    CSS模拟不同的拐角效果
    SQL查询生成交叉列表
    LinkButton 的 OnClick 事件 可以是一个方法
    代替marquee的滚动字幕效果代码
    JavaScript实现DataGrid中添加CheckBox列(全选与否)
  • 原文地址:https://www.cnblogs.com/tzq9308/p/5114242.html
Copyright © 2011-2022 走看看