Apache Pig 简明教程
Apache Pig - Overview
What is 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 作业。
Why Do We Need Apache Pig?
那些不太精通 Java 的程序员通常会竭力尝试使用 Hadoop,尤其是在执行任何 MapReduce 任务的时候。Apache Pig 是所有该类程序员的福音。
-
使用 Pig Latin ,程序员无需使用 Java 编写复杂的代码,即可轻松执行 MapReduce 任务。
-
Apache Pig 使用 multi-query approach ,进而缩短了代码的长度。例如,可以用 Java 编写 200 行代码(LoC)来执行某项操作,而使用 Apache Pig 仅需编写 10 个以上的 LoC 即可轻松完成此操作。究其根本,Apache Pig 将开发时间缩短了将近 16 倍。
-
Pig Latin 是 SQL-like language ,如果你熟悉 SQL,学习 Apache Pig 会非常容易。
-
Apache Pig 提供了许多内置运算符来支持数据操作,例如连接、筛选、排序等。此外,它还提供了 MapReduce 中没有的嵌套数据类型,例如元组、包和映射。
Features of Pig
Apache Pig 具有以下功能 −
-
Rich set of operators − 它提供了许多运算符来执行诸如连接、排序、筛选等操作。
-
Ease of programming − Pig Latin 类似于 SQL,如果你精通 SQL,很容易编写 Pig 脚本。
-
Optimization opportunities − Apache Pig 中的任务会自动优化其执行,因此程序员只需要专注于该语言的语义。
-
Extensibility − 使用现有运算符,用户可以创建自己的函数来读取、处理和写入数据。
-
UDF’s − Pig 提供了创建 User-defined Functions 的功能 ,这些创建可以在诸如 Java 的其他编程语言中编写,并将它们调用或嵌入到 Pig 脚本中。
-
Handles all kinds of data − Apache Pig 分析所有类型的数据,既可以是结构化的,也可以是非结构化的。它将结果存储到 HDFS 中。
Apache Pig Vs MapReduce
下面列出了 Apache Pig 与 MapReduce 的主要区别。
Apache Pig |
MapReduce |
Apache Pig 是一种数据流语言。 |
MapReduce 是一种数据处理范例。 |
Apache Pig 是一种高级语言。 |
MapReduce 是低级且严格的。 |
在 Apache Pig 中执行连接操作非常简单。 |
在 MapReduce 中执行数据集之间的连接操作非常困难。 |
具有基本 SQL 知识的任何新手程序员都可以方便地使用 Apache Pig。 |
必须熟悉 Java 才能使用 MapReduce。 |
Apache Pig 使用多查询方法,从而在很大程度上减少了代码的长度。 |
MapReduce 将需要多达 20 倍的行数才能执行相同的任务。 |
无需编译。在执行时,每个 Apache Pig 运算符都会在内部转换为 MapReduce 作业。 |
MapReduce 作业具有很长的编译过程。 |
Apache Pig Vs SQL
下面列出了 Apache Pig 与 SQL 的主要区别。
Pig |
SQL |
Pig Latin 是 procedural 语言。 |
SQL 是 declarative 语言。 |
在 Apache Pig 中, schema 是可选的。我们可以在不设计模式的情况下存储数据(值存储为 $01、$02 等等)。 |
SQL 中模式是强制性的。 |
Apache Pig 中的数据模型是 nested relational 。 |
SQL 中使用的数据模型 is flat relational 。 |
Apache Pig 提供有限的机会进行 Query optimization 。 |
SQL 中有更多机会进行查询优化。 |
除以上差异之外,Apache Pig Latin −
-
允许管道中出现拆分。
-
允许开发人员在管道中任意位置存储数据。
-
Declares execution plans.
-
提供进行 ETL(提取、转换和加载)函数的操作符。
Apache Pig Vs 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 主要用于结构化数据。 |