当前课程知识点:大数据系统基础 >  4. 处理框架 >  授课视频 >  Pig Latin 实现与优化(2)

返回《大数据系统基础》慕课在线视频课程列表

Pig Latin 实现与优化(2)在线视频

Pig Latin 实现与优化(2)

下一节:4.13类似框架

返回《大数据系统基础》慕课在线视频列表

Pig Latin 实现与优化(2)课程教案、知识点、字幕

这个第二个优化

是一种针对特定数据的

这个什么意思

什么叫Skew data

就是说它那个数据的分布

特别的恶心

那么就是说绝大多数的数据

都是同一个key

那么这时候就是说

它虽然这个key

比如说有百千万种key

但是绝大多数数据

还都是有一个key

这个东西是非常非常常见的

一种分布

叫(00:25)

这种分布它基本上就是这样

如果你说我这个横轴

是不同的key

纵轴是这个count

这是那个key的话

那么每一个点就是一个key

那么它基本上是这样感觉的

就是说大部分key都没多少

只有少部分key特别多

这个是非常符合人类社会的

这种分布的

就跟比如说你说你的微博

有多少人关注你的微博

那么对绝大多数人来说

没多少人关注他的微博

但是对于那些大V们来讲

就有无数的人关注他的微博

所以这种东西

人类社会的基本上都是这样的

如果它很热的东西

它最后是很热

不热的东西也很多

但是它就是不热

所以在这种情况下

你怎么做

如果你做Map-Reduce的话

那个处理最热的那个reduce

它就非常非常的惨

它会要处理好多好的的数据

但是按照道理来说

我们必须把所有的

具有相同key的东西

放到一个reduce上来处理

这个时候这种东西

就叫做一种skew的

这种data的Join

这情况下

在PIG里头它会做一些优化

它会在map的时候

它会看一看

这里头到底有多少

它会经过一些simple的采样

我们来看一看

到底有多少个

哪个key是特别热

如果我simple了1%

我看到了好几个这种key

那说明这个东西肯定是挺多的

这种情况下

我就把那个key

再给它人为做成好几块

我把它分到好几个reduce上去

然后我把再reduce的结果

在合并一起这个就叫Skew Join

防止有一个reduce跑得超级慢

顺便说一句

这种跑的超级慢的reduce

你跑几个它也是超级慢

就因为它处理的数据太多了

所以你在(02:05)

就是你说的等于在运行一些

那不解决问题

你每一都会很慢

因为它数据分布是这样的

那么这是一类

另外一类就是说

我两个表

我要把它Join在一起

但是一个表巨大

一个表巨小

这个时候你只得

把那个巨大的表也跑一次

Map-Reduce然后你把它又排序

又什么的 折腾一遍

就是为了跟一个

就是五个记录的表

再Join一下吗

其实不值得

这个PIG的话

它会自动地发现有一个表巨小

那么巨小的表

我干脆就把这个巨小的表

拷贝到每一个这个()上

我把这个巨小的表整体地

拷贝进去

它可能还不如一个()大

然后它自己就在自己本地

把这个Join算完

然后最后再合并就好了

所以这个叫做旁路的输入叫做side file

side file是一种很小的文件

它根本就不值得让你

为了它做Join

然后再跑一次Map-Reduce

所以这样的话

可以减少最后跑

Map-Reduce的数目

这些都是一种基于数据的

这样的一些优化

其实很多数据库的优化

都是基于数据的

它是基于数据是统计

就是数据库

它先看看你的数据到底长啥样

它知道了之后

它就可以针对这种特殊的

这种非常诡异的数据

它进行一些特殊的优化

让它跑的不至于太慢

那么还有一种优化

就是说多个数据流

比如说这个里头

它问你说的

我想对这个用户

网页访问的用户

针对它来自于不同的省份

就是不同的state

在美国叫州

中国叫省

在不同的省份我们要统计一下

另一个是我们基于

它不同的demographic

就是基于不同的人的类别

比如是男的 女的

它是基于多大岁数的

它基于这个做一次统计

那么一个是基于地方的

一个是基于这个的

那么我所有的用户进来之后

我首先要先看看这东西

不是这个爬虫自动的

搜索引擎的爬虫正常的

不是给我做拒绝访问攻击

这些人造成的

我先把这些垃圾的去掉

然后我把它分别group成两次

就是一个是group by state

一个group by demographic

我分别用两种办法来group

然后生成两种不同的结论

这个udfs就是用户定义的函数

所以我同时生成

两种不同的输出

这种情况下如果你写

Map-Reduce的话

Map-Reduce它只能

做一次输出

因为一个reduce它只能

基于一个key来采取

但这个想要两种不同的

group方法

两种不同的排序方法

所以你最后就得抛两次

Map-Reduce

然后你不光要跑两个reduce

你还map也得跑两个

所以意思就是说

你得扫描两遍这个用户数据

如果用户数据特多的话

那你就浪费了两倍的时间

就是把它读进来

也浪费了两倍的时间

但是我们怎么样能够把它

用一个Map-Reduce来跑完呢

所以这个时候PIG里头

它就有这种

有一个split的这样的

一个特殊的操作

它可以把一个map的输出

分成两块

然后它可以同时让map

输出两种不同的输出

然后有两个不同的key来操作

最后它在reduced时候

它最后再做一次Demultiplex

它可以生成两个操作

所以这个也是一个基于多个

数据流可以进行一次操作

但是为什么它可以进行

这样的操作

那么是因为它理解你想做什么

这个系统它理解你想生成

两个输出

但怎么能理解它生成两个输出

那么就是因为它用了一系列

它自身定义的操作

比方说split

比方说这个group by 比方说它的load

然后比方说它的safe

所以这个时候

它可以自己分析出来

这个数据流它会

它是一个数据流的图

这个图上头它是有一个地方

它是需要有两种不同的输出的

所以在这种情况下

它可以进行一系列的

这种优化

然而如果你只写Map-Reduce

然后你写上一堆Map-Reduce

当然这个程序很难看清楚

你这两个Map-Reduce

它实际上用的是一类的输出

但是它也没办法

把你自己写的两个map

合并在一起

因为这个是一个用户写的程序

它可以是任意的

这种程序它没办法

它做任何的处理

所以这个也是

我们经历了抽象之后

我们就有更多的机会

对它做更好的处理

大数据系统基础课程列表:

1. 绪论

-授课视频

--什么是大数据

--大数据典型应用

--大数据的特点

--大数据技术体系

--大数据生态系统

--大数据技术挑战

--课程内容

-1. 绪论--Quiz 1

2.云计算

-授课视频

--2.1大数据和云计算关系概述

--2.2并行化理念

--2.3规模经济理念

--2.4从仓库规模计算机到云

--2.5云计算商业模式概述

--2.6云计算带来的价值

--2.7云计算的分类

--2.8虚拟化技术概述

--2.9计算虚拟化

--2.10网络虚拟化:基础

--2.11网络虚拟化:软件定义网络

--2.12软件定义网络实现

--2.13存储虚拟化:用户接口

--2.14存储虚拟化:分布式存储实现方式

--2.15虚拟化技术总结

--2.16OPENSTACK

--2.17云计算小结

-2.云计算--Quiz 2

3.文件存储

-授课视频

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

-3.文件存储--Quiz3

4. 处理框架

-授课视频

--4.1大数据的处理框架

--4.2MapReduce编程模型

--MapReduce执行过程

--4.4MapReduce数据流

--4.5MapReduce性能优化与容错

--4.6Hadoop

--4.7MapReduce总结

--4.8Pig Latin

--4.9Pig Latin语法

--4.10Pig Latin 嵌套数据类型

--4.11Pig Latin 实现与优化

--Pig Latin 实现与优化(2)

--4.13类似框架

--4.14章节总结

-4. 处理框架--Quiz4

5.内存计算

-授课视频

--5.1内存计算概述

--5.2并行计算挑战

--5.3并行计算的局限性

--5.4大数据处理并行系统

--5.5内存计算需求

--5.6MapReduce文件传递数据

--5.7内存计算的可行性

--5.8内存层次的延迟

--5.9内存计算实例-spark

--5.10SPARK-RDD

--5.11大数据并行系统

--5.12Spark编程接口

--5.13Spark编程实例——Log挖掘

--5.14Spark编程实例——WorkCount

--5.15Spark实现技术

--5.16复杂的DAG示例

--5.17RDD性能的提高

--5.18Spark应用和生态环境

--5.19Spark的局限性

-5.内存计算--Quiz5

6. NoSQL

-授课视频

--NoSQL与Cassandra

--数据模型、接口、语言

--系统架构与Gossip协议

--一致性哈希与数据分区

--数据副本及一致性

--节点本地数据存储

-6. NoSQL--Quiz6

7. 流计算

-授课视屏

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

-7. 流计算--Quiz7

Pig Latin 实现与优化(2)笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。