Apache Pig - 架构

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

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

在内部,Apache Pig将这些脚本转换为一系列MapReduce作业,因此,它使程序员的工作变得容易. Apache Pig的体系结构如下所示.

Apache Pig Architecture

Apache Pig组件

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

Parser

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

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

优化器

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

编译器

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

执行引擎

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

猪拉丁数据模型

Pig Latin的数据模型是完全嵌套的它允许复杂的非原子数据类型,例如 map tuple .下面给出了Pig Latin数据模型的图解表示.

数据模型

Atom

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

示例 :  'raja'或'30'

元组

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

示例 :  (Raja,30)

Bag

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

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

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

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

Map

map(或data map)是一组键值对. 必须是chararray类型,并且应该是唯一的. 可以是任何类型.它由'[]'

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

关系

关系是一包元组. Pig Latin中的关系是无序的(无法保证以任何特定顺序处理元组).