更新时间:2017-09-01 来源:黑马程序员云计算大数据培训学院 浏览量:
一 Pig概述
1-1 组成
Pig包括 两部分
1:用于描述数据流的语言,称为 Pig Latin (拉丁猪,个人翻译)
2:用于运行PigLatin程序的 执行环境 。一个是 本地 的单JVM执行环境,一个就是在 hadoop集群上 的分布式执行环境。
Pig Latin程序是由一系列的" 操作"(operation)或"变换"(transformation)组成 。每个操作或变换对输入进行 数据处理 ,然后产生 输出的结果 。这些操作整体上描述了一个 数据流 ,Pig执行的环境把数据流翻译为可执行的内部表示,并运行它。在Pig的内部,这些变换和操作被转换成一系列的MapReducer,但是我们一般情况下并不知道这些转换是怎么进行的, 我们的主要的精力就花在数据上,而不是执行的细节上面。
1-2 作用
那么雅虎公司主要使用Pig来干什么呢?
1)吸收和分析用户的行为日志数据(点击流分析、搜索内容分析等),改进匹配和排名算法,以提高检索和广告业务的质量。
2)构建和更新search index。对于web-crawler抓取了的内容是一个流数据的形式,这包括去冗余、链接分析、内容分类、基于点击次数的受欢迎程度计算(PageRank)、最后建立倒排表。
3)处理半结构化数据订阅(data seeds)服务。包括:deduplcaitin(去冗余),geographic location resolution,以及 named entity recognition.
1-3 优势与不足
MapReducer能够让我们自己定义 连续执行的map和reduce函数 ,但是数据处理往往需要很多的MapReducer过程才能实现,所以将数据处理要求改写成MapReducer模式是很 复杂的 。和MapReducer相比,Pig提供了更加 丰富的数据结构 ,一般都是 多值 和 嵌套 的数据结构。Pig还提供了一套更强大的 数据交换操作 ,包括了MapReducer中被忽视的" join "操作
使用Pig来操作hadoop处理海量数据,是非常简单的,如果没有Pig,我们就得手写MapReduce代码,这可是一件非常繁琐的事,因为MapReduce的任务职责非常明确,清洗数据得一个job,处理得一个job,过滤得一个job,统计得一个job,排序得一个job,每次只要改动很小的一个地方,就得重新编译整个job,然后打成jar提交到Hadoop集群上运行,是非常繁琐的,调试还很困难。
但是,Pig并不适合处理所有的“数据处理”任务。和MapReducer一样,它是为数据 批处理 而设计的,如果想执行的查询只涉及一个大型数据集的一小部分数据,Pig的实现不是很好, 因为它要扫描整个数据集或其中的很大一部分。