Apache Pig - 概述
什么是 Apache Pig?
Apache Pig 是 MapReduce 的抽象。 它是一个工具/平台,用于分析将其表示为数据流的较大数据集。 Pig一般与Hadoop一起使用; 我们可以使用 Apache Pig 执行 Hadoop 中的所有数据操作操作。
为了编写数据分析程序,Pig 提供了一种称为 Pig Latin 的高级语言。 该语言提供了各种运算符,程序员可以使用这些运算符开发自己的读取、写入和处理数据的函数。
要使用Apache Pig分析数据,程序员需要使用Pig Latin语言编写脚本。 所有这些脚本都在内部转换为Map 和Reduce 任务。 Apache Pig 有一个名为 Pig Engine 的组件,它接受 Pig Latin 脚本作为输入并将这些脚本转换为 MapReduce 作业。
为什么我们需要 Apache Pig?
不太擅长 Java 的程序员通常很难使用 Hadoop,尤其是在执行任何 MapReduce 任务时。 Apache Pig 是所有此类程序员的福音。
使用Pig Latin,程序员可以轻松执行MapReduce任务,而无需在Java中键入复杂的代码。
Apache Pig使用多查询方法,从而减少了代码长度。 例如,在 Java 中需要键入 200 行代码 (LoC) 的操作只需在 Apache Pig 中键入 10 行代码即可轻松完成。 最终,Apache Pig 将开发时间缩短了近 16 倍。
Pig Latin 是类似 SQL 的语言,当您熟悉 SQL 时,学习 Apache Pig 会很容易。
Apache Pig 提供了许多内置运算符来支持连接、过滤器、排序等数据操作。此外,它还提供 MapReduce 中缺少的嵌套数据类型,例如元组、包和映射。
Apache Pig 的特点
Apache Pig 具有以下功能 −
丰富的运算符 − 它提供了许多运算符来执行连接、排序、文件管理器等操作。
易于编程 − Pig Latin 与 SQL 类似,如果您擅长 SQL,那么编写 Pig 脚本很容易。
优化机会 − Apache Pig 中的任务会自动优化其执行,因此程序员只需关注语言的语义。
可扩展性 − 利用现有的算子,用户可以开发自己的函数来读取、处理和写入数据。
UDF − Pig 提供了用其他编程语言(例如 Java)创建用户定义函数的工具,并在 Pig 脚本中调用或嵌入它们。
处理各种数据 − Apache Pig 分析各种数据,包括结构化数据和非结构化数据。 它将结果存储在 HDFS 中。
Apache Pig 与 MapReduce
下面列出了 Apache Pig 和 MapReduce 之间的主要区别。
Apache Pig | MapReduce |
---|---|
Apache Pig 是一种数据流语言。 | MapReduce是一种数据处理范例。 |
它是一种高级语言。 | MapReduce低级且僵化。 |
在 Apache Pig 中执行 Join 操作非常简单。 | 在MapReduce中执行数据集之间的Join操作是相当困难的。 |
任何具有 SQL 基本知识的新手程序员都可以轻松地使用 Apache Pig。 | 要使用 MapReduce,必须接触 Java。 |
Apache Pig采用多查询的方式,从而很大程度上减少了代码的长度。 | MapReduce 执行相同任务需要几乎 20 倍的行数。 |
无需编译。 在执行时,每个 Apache Pig 运算符都会在内部转换为 MapReduce 作业。 | MapReduce作业有一个很长的编译过程。 |
Apache Pig 与 SQL
下面列出了 Apache Pig 和 SQL 之间的主要区别。
Pig | SQL |
---|---|
Pig Latin 是一种程序语言。 | SQL 是一种声明性语言。 |
在 Apache Pig 中,模式是可选的。 我们可以在不设计模式的情况下存储数据(值存储为 $01、$02 等) | 架构在 SQL 中是必需的。 |
Apache Pig 中的数据模型是嵌套关系。 | SQL 中使用的数据模型是平面关系型。 |
Apache Pig 为查询优化提供了有限的机会。 | SQL 中有更多查询优化的机会。 |
除了上述差异之外,Apache Pig Latin −
- 允许管道拆分。
- 允许开发者将数据存储在管道中的任何位置。
- 声明执行计划。
- 提供运算符来执行 ETL(提取、转换和加载)功能。
Apache Pig 与 Hive
Apache Pig 和 Hive 都用于创建 MapReduce 作业。 在某些情况下,Hive 在 HDFS 上的运行方式与 Apache Pig 类似。 在下表中,我们列出了 Apache Pig 与 Hive 不同的几个重要点。
Apache Pig | Hive |
---|---|
Apache Pig 使用一种名为 Pig Latin 的语言。 它最初是在 Yahoo 创建的。 | Hive 使用一种名为 HiveQL 的语言。 它最初是在 Facebook 创建的。 |
Pig Latin 是一种数据流语言。 | HiveQL 是一种查询处理语言。 |
Pig Latin 是一种过程语言,它适合管道范式。 | HiveQL 是一种声明性语言。 |
Apache Pig 可以处理结构化、非结构化和半结构化数据。 | Hive 主要用于结构化数据。 |
Apache Pig的应用
数据科学家通常使用 Apache Pig 来执行涉及临时处理和快速原型设计的任务。 使用 Apache Pig −
- 处理庞大的数据源,例如网络日志。
- 为搜索平台执行数据处理。
- 处理时间敏感的数据加载。
Apache Pig – 历史
2006 年,Apache Pig 被开发为雅虎的一个研究项目,特别是在每个数据集上创建和执行 MapReduce 作业。 2007,Apache Pig 通过 Apache 孵化器开源。 2008,Apache Pig 的第一个版本问世。 2010,Apache Pig 成为 Apache 顶级项目。