hadoop5--mapreduce设计模式

运行结果附图

本节课程主要内容为学习MapReduc设计模式,并编写java程序对日志文件进行处理。

课本上介绍的MapReduce的设计模式主要包含:计数(Counting),分类(Classification),过滤处理(Filtering),排序(Sorting),去重计数(Distinct Counting),相关计数(Cross-Correlation).

本次作业选取了其中两个设计模式进行练习:排序(Sorting) ,去重计数(Distinct Counting)

  1. 排序(Sorting)

    (1) 设计模式思想:

    map对每条记录的排序属性进行计算,得出排序属性的值
    reduce对同一分组下的记录按照排序属性值进行排序

    (2) 目标问题:

    对access.log中的每个用户的每条记录的总数据流量(上行流量+下行流量)按照从小到大的顺序输出

    (3) java代码主要思路:

    问题中的排序属性值为数据总流量,故在map阶段计算出每条数据的总流量,又因为是要对每个用户的总流量进行排序,
    故map的输出key为userid,value为原始数据记录以及排序属性(即总流量)
    reduce阶段就是对同一用户的所有记录按照其总流量进行排序,java代码中具体实现是将同一用户的所有带有总流量的记录存放到一个ArrayList中,
    然后使用Collections.sort(list,comparactor)进行排序,在comparactor中override的compare方法中依据总流量进行了升序排序

    (4) java代码截图如下:

    2015-04-26 17:21:41 的屏幕截图

    2015-04-26 17:22:24 的屏幕截图

    (5) 运行结果如下:

    st

    st2

    st3

  2. 去重计数(Distinct Counting)

    (1) 设计模式思想:

    分为两个步骤,步骤一中map输出属性组合为key,计数1为value的结果,reduce仅输出属性组合,相当于完成了去重工作

    步骤二中map对属性组合中的一个属性进行1的计数,reduce阶段将计数累加,完成了计数工作

    (2) 目标问题:

    对access.log文件中的网址的不同用户访问数进行计数

    (3) java代码主要思路:

    使用了两个job实现的,每一个job中一个map一个reduce.

    第一阶段的map输出以userid与hostname组成的属性组合为key,计数1为value;reduce输出的就是属性组合

    第二阶段的map输出以hostname为key,计数1为value;reduce对每个hostname下的计数1累加完成计数

    (4) java代码截图如下:

    因为使用了两个job完成任务,所以在main函数中有一系列配置工作完成连个job的设置和连接

    2015-04-26 19:02:47 的屏幕截图

    2015-04-26 19:03:12 的屏幕截图

    2015-04-26 19:04:05 的屏幕截图

    2015-04-26 19:25:40 的屏幕截图

    (5)运行结果如下:

    newcd

    newcd1

    newcd2

    newcd3

问题记录

在第二个设计模式的实现过程中因为涉及到两个job,所以要完成一系列的配置工作,通过上网查找学习

基本的配置步骤如下:

(1)分别创建两个Job对象job1,job2 为两个job配置好相应的Map类,Reduce类,输出类型,以及输入路径和输出路径,注意job2的输入路径为job1的输出路径,即job2直接处理job1的结果

(2)分别创建两个ControlledJob对象ctrljob1和ctrljob2,利用setJob()方法设置其job分别为job1和job2

(3)设置ctrljob1和ctrljob2的依赖关系,保证job2的启动依赖与job1的完成

ctrljob2.addDependingJob(ctrljob1);

(4)创建主控制JobControl对象 jobCtrl,并将ctrljob1,ctrljob2加入进去

jobCtrl.addJob(ctrljob1);
  		
jobCtrl.addJob(ctrljob2);

(5)创建线程,执行jobCtrl,直至jobCtrl完成所有任务,停止jobCtrl

原文地址:https://www.cnblogs.com/ivywenyuan/p/4579372.html