pig的原理及特点是什么

86次阅读
没有评论

共计 3312 个字符,预计需要花费 9 分钟才能阅读完成。

这篇文章给大家介绍 pig 的原理及特点是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Apache Pig 是 MapReduce 的一个抽象。它是一个工具 / 平台,用于分析较大的数据集,并将它们表示为数据流。Pig 通常与  Hadoop  一起使用;我们可以使用 Apache Pig 在 Hadoop 中执行所有的数据处理操作。

要使用  Apache Pig  分析数据,程序员需要使用 Pig Latin 语言编写脚本。所有这些脚本都在内部转换为 Map 和 Reduce 任务。Apache Pig 有一个名为  Pig Engine  的组件,它接受 Pig Latin 脚本作为输入,并将这些脚本转换为 MapReduce 作业。

为什么要使用 Apache Pig

使用  Pig Latin ,程序员可以轻松地执行 MapReduce 作业,而无需在 Java 中键入复杂的代码。

Apache Pig 使用多查询方法,从而减少代码长度。例如,需要在 Java 中输入 200 行代码(LoC)的操作在 Apache Pig 中输入少到 10 个 LoC 就能轻松完成。最终,Apache Pig 将开发时间减少了近 16 倍。

Pig Latin 是类似 SQL 的语言,当你熟悉 SQL 后,很容易学习 Apache Pig。

Apache Pig 提供了许多内置操作符来支持数据操作,如 join,filter,ordering 等。此外,它还提供嵌套数据类型,例如 tuple(元组),bag(包)和 MapReduce 缺少的 map(映射)。

Apache Pig 具有以下特点:

丰富的运算符集  – 它提供了许多运算符来执行诸如 join,sort,filer 等操作。

易于编程  – Pig Latin 与 SQL 类似,如果你善于使用 SQL,则很容易编写 Pig 脚本。

优化机会  – Apache Pig 中的任务自动优化其执行,因此程序员只需要关注语言的语义。

可扩展性  – 使用现有的操作符,用户可以开发自己的功能来读取、处理和写入数据。

用户定义函数  – Pig 提供了在其他编程语言(如 Java)中创建用户定义函数的功能,并且可以调用或嵌入到 Pig 脚本中。

处理各种数据  – Apache Pig 分析各种数据,无论是结构化还是非结构化,它将结果存储在 HDFS 中。

Apache Pig 与 MapReduce

下面列出的是 Apache Pig 和 MapReduce 之间的主要区别。

Apache PigMapReduceApache Pig 是一种数据流语言。MapReduce 是一种数据处理模式。

它是一种高级语言。

MapReduce 是低级和刚性的。在 Apache Pig 中执行 Join 操作非常简单。在 MapReduce 中执行数据集之间的 Join 操作是非常困难的。任何具备 SQL 基础知识的新手程序员都可以方便地使用 Apache Pig 工作。向 Java 公开是必须使用 MapReduce。Apache Pig 使用多查询方法,从而在很大程度上减少代码的长度。MapReduce 将需要几乎 20 倍的行数来执行相同的任务。没有必要编译。执行时,每个 Apache Pig 操作符都在内部转换为 MapReduce 作业。MapReduce 作业具有很长的编译过程。Apache Pig Vs SQL

下面列出了 Apache Pig 和 SQL 之间的主要区别。

PigSQLPig Latin 是一种程序语言。SQL 是一种声明式语言。在 Apache Pig 中,模式是可选的。我们可以存储数据而无需设计模式(值存储为 01,01, 02 等)模式在 SQL 中是必需的。Apache Pig 中的数据模型是嵌套关系。SQL 中使用的数据模型是平面关系。Apache Pig 为查询优化提供有限的机会。在 SQL 中有更多的机会进行查询优化。

除了上面的区别,Apache Pig Latin:

允许在 pipeline(流水线)中拆分。

允许开发人员在 pipeline 中的任何位置存储数据。

声明执行计划。

提供运算符来执行 ETL(Extract 提取,Transform 转换和 Load 加载)功能。

Apache Pig VS Hive

Apache Pig 和 Hive 都用于创建 MapReduce 作业。在某些情况下,Hive 以与 Apache Pig 类似的方式在 HDFS 上运行。在下表中,我们列出了几个重要的点区分 Apache Pig 与 Hive。

Apache PigHiveApache Pig 使用一种名为  Pig Latin  的语言(最初创建于  Yahoo )。Hive 使用一种名为  HiveQL  的语言(最初创建于 Facebook )。Pig Latin 是一种数据流语言。HiveQL 是一种查询处理语言。Pig Latin 是一个过程语言,它适合流水线范式。HiveQL 是一种声明性语言。Apache Pig 可以处理结构化,非结构化和半结构化数据。Hive 主要用于结构化数据。Apache Pig 的应用程序

Apache Pig 通常被数据科学家用于执行涉及特定处理和快速原型设计的任务。使用 Apache Pig:

处理巨大的数据源,如 Web 日志。

为搜索平台执行数据处理。

处理时间敏感数据的加载

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

要执行特定任务时,程序员使用 Pig,需要用 Pig Latin 语言编写 Pig 脚本,并使用任何执行机制(Grunt Shell,UDFs,Embedded)执行它们。执行后,这些脚本将通过应用 Pig 框架的一系列转换来生成所需的输出。

Apache Pig 的架构

Apache Pig 组件

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

Parser(解析器)

最初,Pig 脚本由解析器处理,它检查脚本的语法,类型检查和其他杂项检查。解析器的输出将是 DAG(有向无环图),它表示 Pig Latin 语句和逻辑运算符。在 DAG 中,脚本的逻辑运算符表示为节点,数据流表示为边。

Optimizer(优化器)

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

Compiler(编译器)

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

Execution engine(执行引擎)

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

Pig Latin 数据模型

Pig Latin 的数据模型是完全嵌套的,它允许复杂的非原子数据类型,例如  map  和  tuple 。

Atom(原子)

Pig Latin 中的任何单个值,无论其数据类型,都称为  Atom 。它存储为字符串,可以用作字符串和数字。int,long,float,double,chararray 和 bytearray 是 Pig 的原子值。一条数据或一个简单的原子值被称为字段。例:“raja“或“30

Tuple(元组)

由有序字段集合形成的记录称为元组,字段可以是任何类型。元组与 RDBMS 表中的行类似。例:(Raja,30)

Bag(包)

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

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

包可以是关系中的字段;在这种情况下,它被称为内包(inner bag)。

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

Map(映射)

映射(或数据映射)是一组 key-value 对。key 需要是 chararray 类型,且应该是唯一的。value 可以是任何类型,它由“[] 表示,

例:[name#Raja,age#30]Relation(关系)

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

关于 pig 的原理及特点是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计3312字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)