当前课程知识点:互联网大规模数据分析技术 > 第五章 大数据平台与技术 > 第11讲 MapReduce编程 > 第11讲 MapReduce编程
大家好
欢迎来到
互联网大规模数据分析技术
的课堂
我是今天的主讲教师李琳
来自武汉理工大学
今天我们给大家来讲解一下
Map-reduce这样一种编程模式
我们大家在上一节课当中
已经看到
在大规模的数据分析当中
我们需要去分发任务
我们需要进行分布式的并行编程
那么这样一些问题
现实当中是比较困难的
Map-reduce这样一种编程架构
很好的解决了上述的问题
能够进行大规模的数据分析
同时在上一节课当中
我们给大家介绍了Hadoop
这样一种开源的大数据分析平台
可以帮助大家
来解决大规模数据处理的问题
今天的课程我们从以下4个方面
来跟大家进行讲解
首先
我们会对Map-reduce编程模式
做一个简要的回顾
接下来我们会通过两个例子
来看看Map-reduce
究竟是怎么来完成运算的
接下来我们会给大家
简要的介绍一下有哪些问题
非常适合Map-reduce的编程
接下来我们看一下
Map-reduce的主要过程
Map-reduce这样一个模式
它是通过顺序的方式
来读取大量的数据
一行一个字一个字这样方式
来完成
在这里有两个操作
第一个操作我们把它叫做Map
在Map操作当中
需要通过Map的运算
来获取你所关心的内容
那么在Map之后呢
我们需要通过Group的操作
按照一种键值对的形式
来实现聚集的运算
最后一个是Reduce
Reduce可以进行总结
可以进行变化
可以进行累加这样一些运算
来达到最终的结果
我们把这样一个过程呢
用图形化的方式
来跟大家做一个讲解
在Map-reduce的Map阶段
我们将产生一个
非常重要的数据结构
这个数据结构叫什么名字呢
我们把它叫做key-value pairs
这个key-value pairs翻译过来
就叫做键值对
待会儿我们会通过一个例子
来看一看什么叫做键值对
我们将这样一些键值对
通过Map的方式
形成一个一个的键值对
然后我们在Reduce阶段
要做什么事情呢
首先在Reduce之前
我们要按照键的方式
相同的键
我们把它聚集到一起
相同的键
我们把它聚集到一起之后
我们通过Reduce的方式
把相同的键聚集的元素
进行某种运算
比如说累加运算
比如说累乘运算
这个根据大家自己的需要
来完成
通过这样一个图例
大家会发现它非常简单
无非就是两个步骤
一、输入数据,一行一行
二、产生键值对
三、对键值对进行运算
看上去很简单
究竟在具体的问题当中
这个键值对是一种什么样子呢
我们这里有一个例子
这个例子呢叫做Word Count
也就是计数
什么意思呢
假设我们有一个非常大的文件
这个文件大到无法存到内存
我们的用户想知道这个文件当中
每个单词出现的次数
比如说在这里我有一个例子
输入是hello world
Hello hadoop
hello Map-reduce
很多很多行
那么我想得到的输出是
hadoop在这个里面出现了一次
hello出现了3次
Map-reduce出现了一次
word出现了一次
像这样的运算非常适合
用Map-reduce的方式来完成
当然这个例子呢
实际可以扩展到其他的方面
比如说要找到Popular URL
也就是统计哪些URL
被用户点击的次数越多
这个里面实际上
就是一个计数的工作
那么我们来看一下
怎么来完成的
首先我们有一个Big Document
大家看到big
这个big指的是无法放到内存
Map-reduce的Map
要产生什么样的运算结果呢
大家可以看到
(the,1)
(crew,1)
(of,1)
那在这个里面哪个是key
哪个是value呢
显然前面的单词
The、crew、of、space
这是key
那么value是什么呢
就是它的出现
在这个例子当中
Map只产生(key,1)
也就是说我遇到一个the
我就产生(the,1)
我遇到一个crew
就产生一个(crew,1)
我遇到一个of就产生(of,1)
我再遇到the
我仍然产生的是(the,1)
接下来呢
我们要做的工作就是聚集
那么聚集的话呢
我们把相同的key聚集到一起
大家可以看到
这几个key是一样的都是the
那么它就把它放到了一起
在这里我虽然是用列
一行一行的形式来表示
那么在具体的存储当中
大家可以选用
相应的数据结构来表示
通过聚集之后
接下来我们要做的工作
把聚集的一起的
相同的key的value
进行某种操作
在这个例子当中
我们要计数
那么怎么把这些1、1、1
一个一个记到一起呢
这就是累加
所以通过累加
我们得到the出现了3次
通过累加
我们得到crew出现了两次
所以这就是
整个Map-reduce的一个过程
在这个过程当中
它主要是顺序的去读取数据
我们可以再回顾一下
很多的文件无法放到内存
怎么办
一行一行地去读
读到一个单词逗号1
读到一个单词逗号1
读到一个单词逗号1
把相同的单词放到一起
由于要计数
我们对它进行累加操作
这样自然而然就得到了
每一个单词出现的次数
大家来看看是不是非常简单呢
对于喜欢编程的同学来说呢
我们用这样一段伪代码
来给大家做一个描述
在Map阶段我们只产生
(单词,1)
遇到一个单词就产生单词逗号1
在Reduce阶段
我们对每一个单词
进行计数的累加
这是一个累加运算符
那么熟悉编程的同学可以看到
最后得到输出结果
那么有同学就会说了
老师有了Map有了Reduce
那么你中间的Group到哪去了
Group是由hadoop平台
自己来完成的
不需要大家去做
大家看看这样一个
貌似复杂的问题
是不是变得特别简单呢
在这个里面大家要注意到的是
Map它是分发数据
所以Map的个数一般来说
是远远地大于reduce的个数
所以我们说
R is smaller than M
通过这个例子
大家了解了Map-reduce
这样一种编程的基本思路
感觉也非常简单
大家可以在
hadoop平台上去测试一下
同时大家注意一下
刚才
我是直接从Map到了Reduce
实际上如果学过循环
学过这种语句的嵌套
我们可以发现
实际我们可以在Map里面
我们可以做一定的Reduce
在Map里面
我也可以做一定的Reduce
然后通过运算之后
将做最后的Reduce
做到最后的结果
也就是说Map和Reduce里面
可以相互地进行嵌套
这个大家可以在编程当中
去逐步提高这样的技能
有哪些问题
适合这样一些Map-reduce呢
当然有很多这样一些问题
接下来的我会再看一个例子啊
在这里面的这些例子
大家可以在课后呢
去思考一下
接下来我们看一个例子
这个例子是表的自然连接
在这里叫natural join
学过数据库的同学都知道
Natural join
是对两个表进行连接操作
在这里我们举这样一个例子
来跟大家讲解一下
看看它是否也适合
我们的Map-reduce编程
在这里面的我们有两张表
第一张表叫R
我们有两列A和B
第二张表
我们也有两列B和C
那么自然连接的意思是什么呢
对相同的列
它的值相同的情况下
进行连接操作
我们举一个例子
大家看到这有a2、b1
那我就找一下这张表里面
有没有b1
没有
那么我们对这一个呢
就无法进行连接操作
我们看一下a3,b2
我们找一下有没有b2呢
有的
这里有一个b2,c1
那我们就可以把它连起来
连成了a3,b2,c1
在这里面呢我们把b2去掉
就变成了a3,c1
有同学就会问了
老师这里还有个b2,c2
是的
我们也可以连接b2,c2把b2去掉
我们得到了a3,c2
这就是自然连接
也就是找到相同的列
值相同的进行连接操作
这样一个问题
我们如果用Map-reduce怎么来做呢
我们假设这两个表都非常大
无法存到内存当中
我们逐行来读取数据
那么读到一个a1,b1
我们怎么存成key-value呢
在这个里面key是什么呢
大家要注意到
我们是用什么来实现表的连接
我们是用b值相同
来实现表的连接
那么自然而然我们就会想到
用b这一列来作为我们的key
那么value是什么呢
value就是剩下的列
当然我写成b1是key
value是a1
那么这个a1来自于哪里
我也必须存在value里面
所以最终形成大家可以看到
我们的键值对是什么呢
b,a 还要加上一个表的名字
大家看到没有
这里有一个表的名字
同时另外一张表b,c
我们存成key的时候呢
b仍然是我们的key
value是这一
剩下的这一列c
和它这个表的名字
所以这就是我们的键值对
key是相同的列的这个名字
value剩下的列和表的名字
在我们的Map操作当中呢
就会产生所有以b为key的
这样一个value键值对
同时在Reduce操作当中
我们要做什么事情呢
前面
我们在讲计数操作的时候
是统计个数进行累加
那么在这里面
我们要实现表的连接
那就是要连接两个表
所以要把b值相同的表连接起来
在Group操作当中
我们把相同的键值
都已经放到了一起
那么连的操作
只要把相同的b进行一个连接
输出剩下的a列和c列即可
所以这样一个问题大家看到
非常适合我们Map-reduce操作
逐行顺序地读入
产生键值对
将相同的键值所在的元素
进行连接操作
形成最终的自然连接的结果
那么通过以上的两个例子的学习
大家已经简单的
掌握了Map-reduce编程的
一个基本思想
如果大家
对这方面的内容感兴趣的话呢
大家可以去看以下网址的内容
来逐步地锻炼自己Map-reduc
编程的技能
感谢大家的观看
今天的课程就到这里
-第1讲 大数据与数据挖掘概述
-第2讲 频繁项集和关联规则的基本概念
-第3讲 Apriori算法
-第4讲 Apriori算法的改进与兴趣度度量
-第5讲 分类的基本概念
-第6讲 决策树
--第6讲 决策树
-第7讲 简单贝叶斯分类
-第8讲 聚类的基本概念
-第9讲 K-Means & K-Medoids Clustering
--第9讲 K-Means & K-Medoids Clustering
-第四章 聚类算法--习题
-第10讲 大数据处理平台Hadoop
-第11讲 MapReduce编程
-第12讲 大数据处理平台Spark
-第13讲 NoSQL数据库
-第14讲 Web信息检索简介
-第15讲 信息检索之倒排索引
-第16讲 信息检索之TFIDF
--Video
-第17讲 信息检索之相似度排序
-第18讲 Web搜索之链接分析
-第19讲 Web搜索之PageRank
-第20讲 Lucene信息检索平台
-第七章 Web链接分析--习题
-第21讲 推荐系统简介
-第22讲 推荐系统之协同过滤
-第23讲 Mahout数据挖掘平台
-第24讲 信息过滤评价体系
-第八章 推荐系统--习题一
-第八章 推荐系统--习题二
-综合编程题