Apache Pig - 架构

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

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

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

Apache Pig 架构 h2>Apache Pig 组件

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

解析器

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

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

优化器

逻辑计划(DAG)被传递给逻辑优化器,逻辑优化器执行投影、下推等逻辑优化。

编译器

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

执行引擎

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

Pig Latin 数据模型

Pig Latin 的数据模型是完全嵌套的,它允许复杂的非原子数据类型,例如 maptuple。 下面给出的是 Pig Latin 数据模型的图示。

数据模型

原子

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

示例 − ‘raja’ 或 ‘30’

元组

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

示例 − (Raja, 30)

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

示例 − {(Raja, 30), (Mohammad, 45)}

包可以是关系中的字段; 在这种情况下,它被称为内包

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

映射

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

示例 − [name#Raja, age#30]

关系

关系是一个元组包。 Pig Latin 中的关系是无序的(不能保证元组按任何特定顺序处理)。