Apache Pig - 架构
使用 Pig 分析 Hadoop 中数据的语言称为 Pig Latin。 它是一种高级数据处理语言,提供丰富的数据类型和运算符来对数据执行各种操作。
要使用 Pig 执行特定任务,程序员需要使用 Pig Latin 语言编写 Pig 脚本,并使用任何执行机制(Grunt Shell、UDF、嵌入式)执行它们。 执行后,这些脚本将经过 Pig 框架应用的一系列转换,以产生所需的输出。
在内部,Apache Pig 将这些脚本转换为一系列 MapReduce 作业,从而使程序员的工作变得轻松。 Apache Pig的架构如下所示。
h2>Apache Pig 组件如图所示,Apache Pig框架中有各种组件。 让我们看一下主要组件。
解析器
最初,Pig 脚本由解析器处理。 它检查脚本的语法、类型检查和其他杂项检查。 解析器的输出将是一个 DAG(有向无环图),它表示 Pig Latin 语句和逻辑运算符。
在 DAG 中,脚本的逻辑运算符表示为节点,数据流表示为边。
优化器
逻辑计划(DAG)被传递给逻辑优化器,逻辑优化器执行投影、下推等逻辑优化。
编译器
编译器将优化后的逻辑计划编译成一系列MapReduce作业。
执行引擎
最后,MapReduce 作业按排序顺序提交到 Hadoop。 最后,这些 MapReduce 作业在 Hadoop 上执行,产生所需的结果。
Pig Latin 数据模型
Pig Latin 的数据模型是完全嵌套的,它允许复杂的非原子数据类型,例如 map 和 tuple。 下面给出的是 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 中的关系是无序的(不能保证元组按任何特定顺序处理)。