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 是所有该类程序员的福音。

  1. 使用 Pig Latin ,程序员无需使用 Java 编写复杂的代码,即可轻松执行 MapReduce 任务。

  2. Apache Pig 使用 multi-query approach ,进而缩短了代码的长度。例如,可以用 Java 编写 200 行代码(LoC)来执行某项操作,而使用 Apache Pig 仅需编写 10 个以上的 LoC 即可轻松完成此操作。究其根本,Apache Pig 将开发时间缩短了将近 16 倍。

  3. Pig Latin 是 SQL-like language ,如果你熟悉 SQL,学习 Apache Pig 会非常容易。

  4. Apache Pig 提供了许多内置运算符来支持数据操作,例如连接、筛选、排序等。此外,它还提供了 MapReduce 中没有的嵌套数据类型,例如元组、包和映射。

Features of Pig

Apache Pig 具有以下功能 −

  1. Rich set of operators − 它提供了许多运算符来执行诸如连接、排序、筛选等操作。

  2. Ease of programming − Pig Latin 类似于 SQL,如果你精通 SQL,很容易编写 Pig 脚本。

  3. Optimization opportunities − Apache Pig 中的任务会自动优化其执行,因此程序员只需要专注于该语言的语义。

  4. Extensibility − 使用现有运算符,用户可以创建自己的函数来读取、处理和写入数据。

  5. UDF’s − Pig 提供了创建 User-defined Functions 的功能 ,这些创建可以在诸如 Java 的其他编程语言中编写,并将它们调用或嵌入到 Pig 脚本中。

  6. 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 −

  1. 允许管道中出现拆分。

  2. 允许开发人员在管道中任意位置存储数据。

  3. Declares execution plans.

  4. 提供进行 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 主要用于结构化数据。

Applications of Apache Pig

Apache Pig 通常由数据科学家用于执行涉及特定处理和快速原型的任务。Apache Pig 的用途是 −

  1. 处理诸如网络日志等的海量数据源。

  2. 对搜索平台执行数据处理。

  3. 处理时间敏感的数据加载。

Apache Pig – History

2006 中,Apache Pig 被开发为 Yahoo 上的一个研究项目,专门用于创建和执行每个数据集上的 MapReduce 作业。在 2007 中,Apache Pig 通过 Apache incubator 开源。在 2008 中,Apache Pig 的第一个版本发布。在 2010 中,Apache Pig 成为 Apache 顶级项目。