Apache Pig - 架构



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

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

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

Apache Pig Architecture

Apache Pig 组件

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

解析器

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

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

优化器

逻辑计划(DAG)传递给逻辑优化器,后者执行逻辑优化,例如投影和下推。

编译器

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

执行引擎

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

Pig Latin 数据模型

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

Data Model

原子

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

示例 - ‘raja’ 或 ‘30’

元组

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

示例 - (Raja, 30)

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

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

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

示例 - {Raja, 30, {9848022338, [email protected],}}

映射

映射(或数据映射)是一组键值对。需要为 chararray 类型,并且必须唯一。可以是任何类型。它由 ‘[]’ 表示

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

关系

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

广告