Apache Pig - 架构


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

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

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

Apache Pig架构

Apache Pig 组件

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

解析器

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

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

优化器

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

编译器

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

执行引擎

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

Pig Latin 数据模型

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

数据模型

Atomics

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

示例- 'raja' 或 '30'

元组

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

示例- (Raja, 30)

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

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

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

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

地图

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

示例- [姓名#Raja,年龄#30]

关系

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