Pig学习
1、Pig Latin简介
Pig是用来处理大规模数据的高级查询语言,结合Hadoop使用,可以在处理海量数据时达到事半功倍的效果。
Pig语句通常按照如下的格式来编写:
-
❑通过LOAD语句从文件系统读取数据。
-
❑通过一系列“关系转换”语句对数据进行处理。
-
❑通过STORE语句把处理结果输出到文件系统中,或使用DUMP语句把处理结果输出到屏幕上。
Pig有两种运行模式:Local模式和MapReduce模式。
Pig Latin是一种面向数据流的编程语言,一条语句就是一个操作,得到一个关系,一个Pig Latin程序由一组语句构成。
Pig Latin中常用命令有LOAD, STORE, FILTER, FOREACH,GROUP, ORDER, SPLIT, JOIN等。
常用交互命令
2、Pig数据类型
Pig拥有丰富的数据类型,主要可以分为两大类:基本类型和复杂类型。
针对复杂数据类型举例说明如下。
-
元组:字段或属性值的集合。例如:
(OH, Mark, Twain,31225)
-
包:元组的无序集合,大括号内元组之间用逗号分隔。例如:
{ (OH,Mark,Twain,31225), (UK,Charles,Dickens,42207), (ME,Robert,Frost,11496) }
-
映射:键值对的集合,中括号内,键与值之间以#分隔(#是系统默认,不可更改),键值对之间用逗号分隔。例如:
[state#OH,name#Mark Twain,zip#31225]
3、Pig与Hive比较
Pig与Hive基于其特性对比
-
语言:两者都有对应的操作语言,编写的程序最后都转换为MapReduce程序运行。
-
表概念:Hive中有一个“表”的概念,但Pig中没有表的概念。
-
远程服务:Hive可以依托于Thrift启动一个远程服务,提供远程调用;Pig中没有这样的功能。
-
自定义函数:两者都提供UDF,可根据用户需求来自定义函数。
-
Shell命令行:都有其对应的Shell命令行,而且Pig可以直接执行ls、cat这样的命令,但Hive不支持这样使用。
-
Web访问接口:Hive支持通过浏览器访问,可以在Web页面中编写HiveQL语句;Pig不支持Web访问。
-
JDBC/ODBC:Hive可以通过JDBC/ODBC远程访问Hive,远程需要启动HiveServer2服务;Pig不支持远程调用。
Pig Latin是面向数据流的编程语言,而HiveQL是一种描述型编程语言,二者最大的区别在于对作业执行方式的控制粒度不同。
同样一个任务,HiveQL只需定义要执行的操作即可,HiveQL查询规划器会负责安排HiveQL命令的执行顺序等。而Pig Latin类似于直接在查询规划器这一层操作数据,因此需要用户自己一步一步地根据数据流的处理方式来编程,即用户要设计数据流的每一个步骤。
Hive和Pig的选用最终取决于用户需求,如果用户更希望使用熟悉的SQL接口操作数据,很明显应当选用Hive。但如果有专门人员以数据流水线的方式考虑问题,并需要对作业运行方式进行更细粒度的控制,那么Pig可能会是一个更好的选择。
4、Pig的运行模式
有本地模式(Local模式)和MapReduce模式,每种运行模式都有3种运行方式,分别为:Grunt Shell方式、脚本文件方式、嵌入式程序方式。下面将对运行模式及方式进行介绍。
4.1.本地模式
本地运行模式下,Pig运行在单个JVM中,访问本地文件系统,该模式用于测试或处理小规模数据集。
(1)Grunt Shell方式Grunt Shell和Windows中的DOS窗口非常类似,在这里用户可以一条一条地输入命令对数据进行操作,启动命令如下所示。
pig -x local
(2)脚本文件方式使用脚本文件作为批处理作业来运行Pig命令,它实际上是第一种运行方式中命令的集合,使用如下命令可以运行Pig脚本。
pig -x local script.pig