Pig到底是干什么的

Pig到底是干什么的。

Pig最早是雅虎公司的一个基于Hadoop的并行处理架构,后来Yahoo将Pig捐献给Apache(一个开源软件的基金组织)的一个项目,由Apache来负责维护,Pig是一个基于 Hadoop的大规模数据分析平台,它提供的SQL-like语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。Pig为复杂的海量数据并行计算提供了一个简 易的操作和编程接口,这一点和FaceBook开源的Hive(一个以SQL方式,操作hadoop的一个开源框架)一样简洁,清晰,易上手!

那么雅虎公司主要使用Pig来干什么呢?

1)吸收和分析用户的行为日志数据(点击流分析、搜索内容分析等),改进匹配和排名算法,以提高检索和广告业务的质量。
2)构建和更新search index。对于web-crawler抓取了的内容是一个流数据的形式,这包括去冗余、链接分析、内容分类、基于点击次数的受欢迎程度计算(PageRank)、最后建立倒排表。
3)处理半结构化数据订阅(data seeds)服务。包括:deduplcaitin(去冗余),geographic location resolution,以及 named entity recognition.


使用Pig来操作hadoop处理海量数据,是非常简单的,如果没有Pig,我们就得手写MapReduce代码,这可是一件非常繁琐的事,因为MapReduce的任务职责非常明确,清洗数据得一个job,处理得一个job,过滤得一个job,统计得一个job,排序得一个job,编写DAG(带先后顺序依赖的)作业很不方便,这还可以接受,但是每次只要改动很小的一个地方,就得重新编译整个job,然后打成jar提交到Hadoop集群上运行,是非常繁琐的,调试还很困难,所以,在现在的大互联网公司或者是电商公司里,很少有纯写MapReduce来处理各种任务的,基本上都会使用一些工具或开源框架来操作。



随着,数据海啸的来临,传统的DB(Oracle、DB2)已经不能满足海量数据处理的需求,MapReduce逐渐成为了数据处理的事实标准,被应用到各行各业中。所以,我们不再期望所有的客户都能快速开发应用相关代码,只能把客户的工作变得简单,就像使用SQL语言,经过简单培训就可以“云”上操作。

Pig就是为了屏蔽MapReduce开发的繁琐细节,为用户提供Pig Latin这样近SQL语言处理能力,让用户可以更方便地处理海量数据。Pig将SQL语句翻译成MR的作业的集合,并通过数据流的方式将其组合起来。

Pig的一个简单处理流程,如下所示:




执行引擎如下所示:


在Pig里面,每一步操作,都是一个数据流,非常容易理解,你想要什么,它就能得到什么,即使不能得到,我们也可以通过轻松扩展UDF来实现,比SQL更容易理解,每一步要做什么,非常容易上手和学习,在大数据时代,了解和使用Pig来分析海量数据是非常容易的。

最后告诉大家一个好消息,在最新的Pig(0.14)发行版里,有两个重要的特性:
(1)支持Pig运行在Tez上
(2)支持Orc格式的存储

### Hadoop Pig 的定义与功能 Hadoop Pig 是一种用于分析大数据集的高级查询语言,专为简化大规模数据处理而设计。通过使用 Apache Pig,用户能够以更少的代码量完成复杂的 MapReduce 数据处理任务[^4]。Pig 提供了一种名为 **Pig Latin** 的脚本语言,允许开发者专注于数据分析逻辑而非底层分布式计算细节。 #### Pig 工具的主要特点 - **易用性**: 使用 Pig Latin 编写的数据流程序相较于手动编写的 Java 或 C++ 程序更加简洁高效。 - **灵活性**: 支持多种内置运算符以及自定义函数 (UDF),便于扩展和定制化需求。 - **性能优化**: 自动执行并行化和优化操作,减少人工预。 以下是 Pig 在 Hadoop 生态系统中的核心作用: 1. **数据加载与存储** Pig 可以轻松地从各种输入源加载数据,并将其转换成适合进一步处理的形式。`LOAD` 和 `STORE` 命令支持不同的分隔符配置,默认是以制表符 (`\t`) 作为字段分隔符[^1]。例如: ```piglatin A = LOAD 'input.dat' USING PigStorage(':') AS (year:int, temperature:float); STORE A INTO 'output_path' USING PigStorage(':'); ``` 2. **数据类型支持** Pig 提供丰富的数据类型体系,包括基本类型(如 `int`, `long`, `double`, `chararray`)、复合类型(如 `tuple`, `bag`, `map`)。其中: - Tuple 类似于 MATLAB 中的 Cell 数组,其内部元素可以具有不同类型的值[^2]; - Bag 则是一系列无序元组的集合,通常由花括号 `{}` 表示; - Map 键值对结构类似于哈希表,键必须是字符串类型,而值则可接受任何合法类型。 3. **运行模式** 用户可以选择两种方式启动 Pig 脚本:本地模式或集群模式。前者适用于测试环境下的小型数据集;后者利用完整的 Hadoop 集群资源来加速大规规模型训练过程。具体命令如下所示: ```bash # 启动本地模式 pig -x local # 启动MapReduce模式 pig -x mapreduce ``` 4. **批处理能力** 对于预设好的 `.pig` 文件,可以直接调用相应路径参数批量提交作业给 YARN 调度器管理调度。 --- ### 示例代码展示 下面给出一段简单的 Pig 脚本实例演示如何统计某日志文件中每小时访问次数分布情况: ```piglatin -- 加载原始数据 logs = LOAD '/path/to/logs.txt' AS (timestamp:chararray); -- 截取时间戳前两位代表小时数 hours = FOREACH logs GENERATE SUBSTRING(timestamp, 0, 2) AS hour; -- 统计各小时内记录总数 grouped_hours = GROUP hours BY hour; hour_counts = FOREACH grouped_hours GENERATE group AS hour, COUNT(hours.hour) AS count; -- 输出结果至指定目录下 STORE hour_counts INTO '/path/to/output'; ``` 此段脚本首先读入包含时间戳的日志条目列表,接着提取出每个事件发生的具体时刻标记(即小时部分),最后按照这些标志聚合求得对应时段内的活动频率并向外部持久化保存最终报表信息。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值