当前课程知识点:大数据系统基础 > 4. 处理框架 > 授课视频 > 4.8Pig Latin
下面我们来介绍一个比
MapReduce更高层级的抽象
这样一种语言
能够实现任意的数据流的组合
那么这种语言叫做PIG LATIN
也是一个编程语言
也是一种系统
PIG LATIN这个词很有意思
如果大家有兴趣的话
可以到维基百科上查一下
它是一种英语的一种文字游戏
它是把英语的一些词经过变换
然后变换成一些
看起来很奇怪的词
这种语言的名字
就叫PIG LATIN
然后有经验的人
他知道你是怎么变换的
他能够读出PIG LATIN
他能够把它返回成英语的词
但这个系统也是一个比较早的
做数据流的这样一个系统
为了更清晰的讲解这个系统
我们首先看一个例子
从这个例子开始讲起
这是一个真实的例子
就是说我要问一下
我有很多网站的类型
比如说这是新闻类网站
照片共享类网站
体育类网站
那么我想知道每一个类型网站中
用户最常访问页面的前十名
那么我们有什么信息
我们首先有用户访问的信息
就是说谁几点钟访问了哪个网站
我们还有一些网站的信息
就是说哪个网站是什么类型的
它的PageRank
它的网站排名是什么
这是两个不同的输入文件
或者两个不同的表
那么我们怎么知道
在每一个类型的网站里头
哪十个网站
是最容易被用户访问的
那我们显然需要理解
这两个表里的内容
那么大家可以想像
这个用户访问是有无穷途径的
因为用户每秒钟整个Internet上
访问多了去了
那Internet上的Url
也多了去了
所以这两个表都是
超级超级大的两个表
如果大家比较熟悉
这个cnn.com的话
那么我们肯定是要怎么做呢
我们肯定是要join这个Url
我才能知道是哪个网站
然后得到了网站之后
我们再Group by类型
才能知道是什么类的
最后在count这个类型里的
和这个Url里头
到底有多少个用户
这是一种基本的想法
就是你如果用
cnn.com来写的话
但是显然这两个表格
都不是能够放在
一个数据库里头的
所以这个东西
我们真的需要一个
像MapReduce一样的
分布式的系统
在处理这样大的数据
那么逻辑上这件事应该怎么做
显然逻辑上我应该把Visits
这个表格读到内存里头去
然后我来Group by url
我看不同的Url
到底都有谁来访问过
然后我对每一个Url数一数
到底是谁访问了对吧
有多少次访问
我不关心谁
所以我把它generate成一个count
我把它整个组合一下数一下
之后我们再把Url lnfo
Url lnfo里头包含了
这个Url属于哪一类的信息
那么这里头有一个Url的域
这里头有一个Url的域
那么我们把这两个Url的域
join在一起
那么你们得到了每一个Url
有多少个访问
同时我们也知道
这个Url是属于哪个类别的
那么我们想知道每个类别的
前10个Url怎么知道
我们就按照类别
把它组织再一起
这个时候每一类里头所有的Url
以及所有的访问就都在一起了
然后对每一类
我们把所有Url按访问量排个序
那么我们找头10个
那就是头10位这一类里的Url
最常访问的这些网站
所以这个数据流
基本上是这样的
那大家其实可以看得出来
像这个Loar
像这个Group by
Group by实际上就是一个Reduce
然后对每一个Url
产生一个count
大家刚刚学完MapReduce
那么大家的思维
还在MapReduce
所以大家想
这就是一个MapReduce
那么把这个东西读进来
这是一个Map
它要做Join Url
那么就说这是一个Url
这是一个Url
把两个Join在一起
可能说这是一个MapReduce
我要把它变成一个
也是以Url开头的
这么一个结尾
这个也是一个Url的东西
然后我要在这个上面
跑一个MapReduce对吧
然后这个输出结果之后
我必须按category排
按照category排
我要Group by一个category
那么我在category上
再跑一个MapReduce
最后的话
因为category在一起
然后我把这个Url后面的东西
这是一个MapReduce
这整个点
可以跑成一个Reduce
所以它是若干个
MapReduce连接起来的
但是这个MapReduce
连接起来的时候
我们说的时候是太简化了
因为我们没有考虑到
它的数据类型
MapReduce我们要保证
所有的key的数据类型是一致
所以你要把这个来回来去
倒一倒数据类型的排序方法
所以在这种情况下
真正写出来的
MapReduce的代码
实际上是这样的
就是它是若干个MapReduce相叠
结合起来的
它有很多步
然后跑好多个MapReduce的结果
最后能够生成前10个Url
这个东西是非常难写的
而且稍微你的数据结构变一下
这种东西跟着调是很难的
就算写出来了
第二个人也未必看得懂
也很难维护
然后很难跟着这个数据结构的
这种变化而变化
这些代码其实也非常难重用
你不知道这些具体里头都是什么
哪些可以重用那些不可以
再一个就是自动优化
你看这个东西
这层都是用户定义的方程
这种东西是最难用程序来优化的
因此也是Yahoo(雅虎)的一些人
他们就发明了
PIG LATIN这种语言
现在PIG LATIN
他们也把它开源到
Apache(阿帕奇)的项目
所以叫ApachePig
这样的系统
这个系统是一个
更高级的编程语言
它可以更快捷的让用户
建立一个MapReduce的
工作流程来处理
多个MapReduce的工作
它提供了很多类似于数据库
这样的操作定义
比如说Join 比如说Group by
但是跟数据库不一样的是
它也可以支持用户自定义
一些java的函数
这样的话也可以兼容MapReduce
能实现的所有的功能
那么最开始是
Yahoo(雅虎)的研究所
然后Research是开始设计的
这个系统
之后很快Yahoo(雅虎)的人
就都不写MapReduce了
就是各种MapReducejob
大家都用PIG LATIN的
这种语言来写
所以很快就达到50%的
Yahoo(雅虎)的job
都是由这个来写的
然后这个语言
它实际上是自动的翻译成
一系列的MapReducejob
在MapReduce上运行的
现在它也是一个开源的软件
这里有它的网址
所以大家有兴趣的话
可以把它装上试一下
这确实是比直接写
hadoop的MapReduce要方便很多
-授课视频
--什么是大数据
--大数据典型应用
--大数据的特点
--大数据技术体系
--大数据生态系统
--大数据技术挑战
--课程内容
-1. 绪论--Quiz 1
-授课视频
--2.2并行化理念
--2.9计算虚拟化
-2.云计算--Quiz 2
-授课视频
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
-3.文件存储--Quiz3
-授课视频
--4.13类似框架
--4.14章节总结
-4. 处理框架--Quiz4
-授课视频
-5.内存计算--Quiz5
-授课视频
--数据副本及一致性
--节点本地数据存储
-6. NoSQL--Quiz6
-授课视屏
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
-7. 流计算--Quiz7