Hadoop-MapReduce课件


  Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架;
  Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上;用户不需要考虑分布式的代码。

为什么要使用MapReduce

  1. 海量数据在单机上处理因为硬件资源限制,无法胜任
  2. 而一旦将单机版程序扩展到集群来分布式运行,将极大增加程序的复杂度和开发难度
  3. 引入mapreduce框架后,开发人员可以将绝大部分工作集中在业务逻辑的开发上,而将分布式计算中的复杂性交由框架来处理。
  4. 自己实现分布式计算会出现大量的公共代码,这些代码会影响开发进度。

实战篇

程序运行模式

本地模式

  1. mapreduce程序是被提交给LocalJobRunner在本地以单进程的形式运行
  2. 而处理的数据及输出结果可以在本地文件系统,也可以在hdfs上
  3. 怎样实现本地运行?写一个程序,不要带集群的配置文件(本质是你的mr程序的conf中是否有mapreduce.framework.name=local以及yarn.resourcemanager.hostname参数)
  4. 本地模式非常便于进行业务逻辑的debug,只要在eclipse中打断点即可

如果在windows下想运行本地模式来测试程序逻辑 ,需要在windows中配置环境变量:
%HADOOP_HOME% = d:/hadoop-2.7.3
%PATH% = %HADOOP_HOME%\bin
并且要将d:/hadoop-2.8.3的lib和bin目录替换成windows平台编译的版本
注意:集群需要进行时间同步,时间差别比较大的时候提交任务的时候会报时间不同步异常

集群运行模式

  1. 将mapreduce程序提交给yarn集群resourcemanager,分发到很多的节点上并发执行
  2. 处理的数据和输出结果应该位于hdfs文件系统
  3. 提交集群的实现步骤:
      A、将程序打成JAR包,然后在集群的任意一个节点上用hadoop命令启动
    $ hadoop jar wordcount.jar cn.xiaoniu.bigdata.mrsimple.WordCountDriver inputpath outputpath
      B、直接在linux的eclipse中运行main方法
    (项目中要带参数:mapreduce.framework.name=yarn以及yarn的两个基本配置)
    提交到集群

eclipse提交到集群

		//配置
		Configuration conf = new Configuration();
		conf.set("fs.defaultFS", "hdfs://bigdata01:9000");
		conf.set("mapreduce.framework.name","yarn"); 
		conf.set("yarn.resourcemanager.hostname", "bigdata01");
		conf.set("mapreduce.app-submission.cross-platform", "true");

wordCount

线段的重合点次数

数据:
1,4
2,5
3,4
2,5
2,4
3,4
2,6
1,4
4,7
5,8
5,9
6,11
7,12
6,10
10,15
11,16
12,18
13,17

需求:
求出这些线段的重合点

数据去重

数据:

134	1341307	广东	惠州	移动	516000	0752	441300
134	1341308	广东	惠州	移动	516000	0752	441300
134	1341309	广东	惠州	移动	516000	0752	441300
134	1341310	广东	惠州	移动	516000	0752	441300
134	1341311	广东	惠州	移动	516000	0752	441300
134	1341312	广东	惠州	移动	516000	0752	441300
134	1341313	广东	惠州	移动	516000	0752	441300

需求:
求取出以上数据手机号前三位以及对应的运营商

流量求和

数据:

15639120688	http://v.baidu.com/movie 3936 12058
13905256439	http://movie.youku.com 10132 538
15192566948	https://image.baidu.com 19789 5238
14542296218	http://v.baidu.com/tv 7504 13253

需求:求取网站流量的上行流量和下行流量,以及总流量

共同好友

数据:

A:B,C,D,F,E,O
B:A,C,E,K
C:F,A,D,I
D:A,E,F,L
E:B,C,D,M,L
F:A,B,C,D,E,O,M
G:A,C,D,E,F
H:A,C,D,E,O
I:A,O
J:B,O
K:A,C,D
L:D,E,F
M:E,F,G
O:A,H,I,J

需求:求取共同好友

倒排索引

数据:多个文件
a.txt
hello hi…


b.txt
hello java ….


c.txt
hi java Hadoop….


结果
hello -> a.txt 5 b.txt 2 c.txt 1
java -> b.txt 3 c.txt 5
获取文件名的代码:

		FileSplit fileSplit = (FileSplit)context.getInputSplit();
		String fileName = fileSplit.getPath().getName();

求平均值

数据:

{"movie":"1193","rate":"5","timeStamp":"978300760","uid":"1"}
{"movie":"661","rate":"3","timeStamp":"978302109","uid":"1"}
{"movie":"914","rate":"3","timeStamp":"978301968","uid":"1"}
{"movie":"3408","rate":"4","timeStamp":"978300275","uid":"1"}

需求:
每个电影的得分的平均值

分组求topn

数据同上:
需求:每个电影的评分的前20个数据
需求:求平均值比较高的前20个

join篇

map端的join和reducejoin

优化篇

combiner

数据倾斜之数据打散

原理篇

数据切块

数据切块分块原理

YARN集群运行流程

yarn集群提交任务流程

完整的任务流程

mapreduce运行流程

本文由鹏鹏出品
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值