大数据学习14:MapReduce小结

本文深入探讨MapReduce编程,包括编程基础、特性、shuffle洗牌过程,以及多个MapReduce编程案例,强调了一套解决问题的方法。内容涵盖序列化、排序、分区、合并,并提供了数据去重、多表查询、倒排索引实现等实战应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:
1、偏移量是什么?
k1是这一行在文本文件中的位置(字节数)
举例

=====================================

一、课程概述

依赖jar包
  $HADOOP_HOME/share/hadoop/common
  $HADOOP_HOME/share/hadoop/common/lib
  $HADOOP_HOME/share/hadoop/mapreduce
  $HADOOP_HOME/share/hadoop/mapreducel/lib

二、MapReduce编程基础

案例一
1、分析WordCount的数据处理的过程(流程  P28) ----> 重要
2、开发自己的WordCount程序

案例二:员工表
3、分析:求每个部门的工资总额数据的处理过程  SQL:  select deptno,sum(sal) from emp group by deptno;
4、开发实现自己的MapReduce

三、MapReduce的特性

1、序列化:接口Writable

  一个类实现了这个接口,该类的对象就可以作为key value(Map和Reduce的输入和输出)
注意:序列化的顺序,一定要跟反序列的顺序一样
		   
	复习:Java序列化:接口 
	如果一个类实现了Serializable接口,该类的对象可以作为InputStream(反序列化)和OutputStream对象(序列化)	

2、排序: 复习:SQL的排序: order by语句

			(*) order by 后面 + 列名、表达式、别名、序号
			      select * from emp order by sal;
				  select empno,ename,sal,sal*12 from emp order by sal*12;
				  select empno,ename,sal,sal*12 annlsal from emp order by annlsal;
				  select empno,ename,sal,sal*12 annlsal from emp order by 4;
			(*)order by + 多个列
					select * from emp order by deptno desc,sal desc;
					order by 作用后面所有的列
					desc 离他最近的列
					
			(*)补充一点:查询员工信息,按照奖金排序
					降序排序,一定要把null值排在最后
					select * from emp order by comm desc nulls last;
					
			(*)问题:order by后得到的表,是原来的表吗?(不是,order by执行后,会产生一张临时表)
		
		MapReduce排序:重要:按照key2(数字、字符串、对象)进行排序

		 (1)基本数据类型:数字    : 升序
							举例:查询员工的薪水,按照升序排序
							降序:重写一个比较器
		 
                            字符串  : 字典顺序
							举例:WordCount单词计数
							
		 (2)对象的排序: 实现一个接口:WritableComparable
							
							Demo 1:一个列的排序
							Demo 2:多个列排序
								   按照员工的部门号、薪水排序
								   select * from emp order by deptno,sal;

3、分区:(1)什么分区: partition

				(*) 以Oracle数据库为例,解释什么是分区
				(*) 什么是Hash分区

		 (2)MapReduce的分区(输出文件)
			    (*) 默认情况下,MapReduce只有一个分区
				(*) 如果自定义分区,根据Map的输出<k2,v2>来建立分区
		 
		      Demo:按照员工的部门号进行分区

4、合并(Combiner):

					   是一种特殊Reducer
                      在Mapper端,先执行一次Reducer   -----> 提高效率
                      减少Mapper输出到Reduce的数据量
					  
					  需要注意的问题:一定要谨慎使用Combiner
					(*)有些情况不能使用Combiner ---->  举例:求平均值
					(*)保证引入Combiner以后,不能改变原来的逻辑
					Error: java.io.IOException: wrong value class: class org.apache.hadoop.io.DoubleWritable is not class org.apache.hadoop.io.IntWritable
					     
						 留个问题:如何保证Combiner的引入不改变原来的逻辑? ---> 使用MapReduce实现倒排索引

四、MapReduce的核心: shuffle 洗牌

五、MapReduce编程案例-------> 更重要:一套方法(授人予鱼 不如授人予渔)

1、数据去重:distinct

	复习:distinct 作用于后面所有的列

2、多表查询:部门表、员工表

	(1)复习:笛卡尔积
	(2)等值连接: 查询员工信息,要求:员工姓名、部门名称

			select d.dname,e.ename
			from emp e,dept d
			where e.deptno=d.deptno
	
	(3)自连接: 通过表的别名,将同一张表看成多张表
		(*)什么是自连接?
			查询员工信息:显示:老板的名字  员工的名字
			
			select 老板姓名,员工的姓名
			from b,e
			where 老板的员工号=员工的老板号
			
			select b.ename "Boss",e.ename "Employee"			
			from emp b,emp e	
			where b.empno=e.mgr;
			
			如何得到跟MR一样的结果呢? 提示:组函数(多行函数)  wm_concat 行转列
			
			问题:思考自连接操作存在什么问题吗? ----> 不适合操作大表  ---> 层次查询(数据满足是一棵树的时候)

3、使用MapReduce实现倒排索引

(*)复习:倒排索引

4、使用MRUnit进行单元测试:
注意:(1)需要把mockito-all-1.8.5.jar从Build Path中去掉
(2)需要windows的工具

   Eclipse使用Hadoop的插件

六、第一个阶段小结:HDFS、MapReduce

1、什么是大数据?核心:数据存储HDFS、数据计算MapReduce
2、数据仓库:就是一个数据库
3、Google三篇论文:GFS、MapReduce、BigTable
4、搭建Hadoop的环境
	(1)免密码登录:不对称加密
	(2)Hadoop的目录结构
	(3)本地模式:没有HDFS、只能测试MapReduce程序
	(4)伪分布模式:具备Hadoop所有功能
	(5)全分布模式:至少3台
5、HDFS
	(1)体系结构:NameNode、DataNode、SecondaryNameNode
	(2)fsimage、edits文件
	(3)原理:上传、下载过程
	(4)操作:命令行、Java API、Web Console(50070、50090)
	(5)功能:回收站、快照、配额(名称、空间)、安全模式
	(6)底层原理:RPC、代理对象
	
6、MapReduce
	(1)重要:数据处理的过程
	(2)序列化、排序、分区、合并
	(3)核心:Shuffle
	(4)举例:去重、多表查询、倒排索引
	(5)MR单元测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值