用于使用Pig分析Hadoop中数据的语言称为 Pig Latin .它是一种高级数据处理语言,它提供了丰富的数据类型和操作符来对数据执行各种操作.
执行特定任务程序员使用Pig,程序员需要编写一个Pig脚本使用Pig Latin语言,并使用任何执行机制(Grunt Shell,UDF,Embedded)执行它们.执行后,这些脚本将经过Pig Framework应用的一系列转换,以产生所需的输出.
在内部,Apache Pig将这些脚本转换为一系列MapReduce作业,因此,它使程序员的工作变得容易. Apache Pig的体系结构如下所示.
如图所示,Apache Pig框架中有各种组件.让我们看看主要组件.
最初Pig Scripts由Parser处理.它检查脚本的语法,进行类型检查和其他杂项检查.解析器的输出将是DAG(有向非循环图),它表示Pig Latin语句和逻辑运算符.
在DAG中,脚本的逻辑运算符表示为节点和数据流表示为边.
逻辑计划(DAG)传递给逻辑优化器,执行逻辑优化,例如投影和下推.
编译器将优化的逻辑计划编译成一系列MapReduce作业.
最后,MapReduce作业按排序顺序提交给Hadoop.最后,这些MapReduce作业在Hadoop上执行,产生所需的结果.
Pig Latin的数据模型是完全嵌套的它允许复杂的非原子数据类型,例如 map 和 tuple .下面给出了Pig Latin数据模型的图解表示.
Pig Latin中的任何一个值,无论其数据如何,都称为 Atom .它存储为字符串,可以用作字符串和数字. int,long,float,double,chararray和bytearray是Pig的原子值.一段数据或一个简单的原子值称为字段.
示例 : 'raja'或'30'
由一组有序字段组成的记录称为元组,字段可以是任何类型的.元组类似于RDBMS表中的一行.
示例 : (Raja,30)
一个包是一组无序的元组.换句话说,元组(非唯一)的集合称为包.每个元组可以包含任意数量的字段(灵活的模式).包由'{}'表示.它类似于RDBMS中的表,但与RDBMS中的表不同,每个元组不必包含相同数量的字段,或者相同位置(列)中的字段具有相同的类型.
示例 : {(Raja,30),(Mohammad,45)}
一个包可以是关系中的一个字段;在这种情况下,它被称为内袋.
示例 : {Raja,30, {9848022338,raja @ gmail.com,} }
map(或data map)是一组键值对. 键必须是chararray类型,并且应该是唯一的. 值可以是任何类型.它由'[]'
示例 : 表示[姓名#Raja,年龄#30]
关系是一包元组. Pig Latin中的关系是无序的(无法保证以任何特定顺序处理元组).