【MapReduce】常用计算模型详解

本文详细介绍了MapReduce在海量数据处理中的应用及其工作机制。通过具体的计算模型示例,如求和、平均值计算、分组排序、多表及单表关联、TOP N和降序排序等,深入解析MapReduce的运作过程。这些模型覆盖了常见的数据处理需求,对于理解MapReduce的核心功能非常有帮助。
摘要由CSDN通过智能技术生成

前一阵子参加炼数成金的MapReduce培训,培训中的作业例子比较有代表性,用于解释问题再好不过了。有一本国外的有关MR的教材,比较实用,点此下载

一.MapReduce应用场景

MR能解决什么问题?一般来说,用的最多的应该是日志分析,海量数据排序处理。最近一段时间公司用MR来解决大量日志的离线并行分析问题。

二.MapReduce机制

对于不熟悉MR工作原理的同学,推荐大家先去看一篇博文: http://blog.csdn.net/athenaer/article/details/8203990

三.常用计算模型

这里举一个例子,数据表在Oracle默认用户Scott下有DEPT表和EMP表。为方便,现在直接写成两个TXT文件如下:

1.部门表

DEPTNO,DNAME,LOC    // 部门号,部门名称,所在地

10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON

2.员工表

EMPNO,ENAME,JOB,HIREDATE,SAL,COMM,DEPTNO,MGR // 员工号,英文名,职位,聘期,工资,奖金,所属部门,管理者
7369,SMITH,CLERK,1980-12-17 00:00:00.0,800,,20,7902
7499,ALLEN,SALESMAN,1981-02-20 00:00:00.0,1600,300,30,7698
7521,WARD,SALESMAN,1981-02-22 00:00:00.0,1250,500,30,7698
7566,JONES,MANAGER,1981-04-02 00:00:00.0,2975,,20,7839
7654,MARTIN,SALESMAN,1981-09-28 00:00:00.0,1250,1400,30,7698
7698,BLAKE,MANAGER,1981-05-01 00:00:00.0,2850,,30,7839
7782,CLARK,MANAGER,1981-06-09 00:00:00.0,2450,    ,10,7839
7839,KING,PRESIDENT,1981-11-17 00:00:00.0,5000,,10,
7844,TURNER,SALESMAN,1981-09-08 00:00:00.0,1500,0,30,7698
7900,JAMES,CLERK,1981-12-03 00:00:00.0,950,,30,7698
7902,FORD,ANALYST,1981-12-03 00:00:00.0,3000,,20,7566
7934,MILLER,CLERK,1982-01-23 00:00:00.0,1300,,10,7782

3.实例化为bean

这两个bean的实际作用都是分割传入的字符串,从字符串内得到所属的属性信息。

emp.java
public Emp(String inStr) {
		String[] split = inStr.split(",");
		this.empno = (split[0].isEmpty()? "" : split[0]);
		this.ename = (split[1].isEmpty() ? "" : split[1]);
		this.job = (split[2].isEmpty() ? "" : split[2]);
		this.hiredate = (split[3].isEmpty() ? "" : split[3]);
		this.sal = (split[4].isEmpty() ? "0" : split[4]);
		this.comm = (split[5].isEmpty() ? "" : split[5]);
		this.deptno = (split[6].isEmpty() ? "" : split[6]);
		try {
			this.mgr = (split[7].isEmpty() ? "" : split[7]);
		} catch (IndexOutOfBoundsException e) {     //防止最后一位为空的情况
			this.mgr = "";
		}
}

dept.java
public Dept(String string) {
		String[] split = string.split(",");
		this.deptno = split[0];
		this.dname = split[1];
		this.loc = split[2];
	}

4.模型分析

4.1 求和

求各
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值