Apache Pig 简明教程

Apache Pig - Architecture

用于使用 Pig 在 Hadoop 中分析数据的语言称为 Pig Latin 。它是一种高级数据处理语言,提供了丰富的数据类型和运算符,用于对数据执行各种操作。

为了执行特定的任务,使用 Pig 的程序员需要使用 Pig Latin 语言编写 Pig 脚本,并使用任何执行机制(Grunt Shell、UDF、Embedded)来执行它们。执行后,这些脚本将经历 Pig Framework 应用的一系列转换,以产生所需的输出。

在内部,Apache Pig 将这些脚本转换成一系列 MapReduce 作业,因此,它使程序员的工作变得轻松。Apache Pig 的架构如下所示。

apache pig architecture

Apache Pig Components

如图所示,Apache Pig 框架中有各种组件。让我们了解主要组件。

Parser

最初,Pig 脚本由解析器处理。它检查脚本的语法,执行类型检查和其他杂项检查。解析器的输出将是一个 DAG(有向无环图),表示 Pig Latin 语句和逻辑运算符。

在 DAG 中,脚本的逻辑运算符表示为节点,数据流表示为边。

Optimizer

逻辑计划(DAG)会传递到逻辑优化器,执行投影和下推等逻辑优化。

Compiler

编译器将优化的逻辑计划编译为一系列 MapReduce 作业。

Execution engine

最后,MapReduce 作业按排序顺序提交到 Hadoop。最终,这些 MapReduce 作业在 Hadoop 上执行,产生所需的结果。

Pig Latin Data Model

Pig Latin 的数据模型是完全嵌套的,允许复杂非原子数据类型,如 maptuple 。以下是 Pig Latin 数据模型的图表表示。

data model

Atom

在 Pig Latin 中,任何单一值,无论其数据类型如何,都称为 Atom 。它存储为字符串,可以用作字符串和数字。int、long、float、double、chararray 和 bytearray 是 Pig 的原子值。数据片段或简单原子值称为 field

Example − ‘raja’ 或 ‘30’

Tuple

由字段有序集形成的记录称为元组,字段可以是任何类型。元组类似于 RDBMS 表中的行。

Example − (Raja, 30)

Bag

集合是元组的无序集。换句话说,元组的集合(非唯一)称为集合。每个元组可以有任意数量的字段(灵活架构)。集合用 “{}” 表示。它类似于 RDBMS 中的表,但与 RDBMS 中的表不同,并不是每个元组都必须包含相同数量的字段或同一位置(列)的字段具有相同的类型。

Example − {(Raja, 30), (Mohammad, 45)}

集合可以是关系中的一个字段;在这种情况下,它称为 inner bag

Example − {Raja, 30, {9848022338, raja@gmail.com,} }

Map

映射(或数据映射)是一组键值对。 key 的类型必须为 chararray,并且应该是唯一的。 value 可以是任何类型。它用 “[]” 表示。

Example − [name#Raja, age#30]

Relation

关系是元组的集合。Pig Latin 中的关系是无序的(无法保证按特定顺序处理元组)。