14.2.3 Pig运行模式

Pig有两种运行模式:Local模式和MapReduce模式。当Pig在Local模式运行时,它将只访问本地一台主机;当Pig在MapReduce模式运行时,它将访问一个Hadoop集群和HDFS的安装位置。这时,Pig将自动地对这个集群进行分配和回收。因为Pig系统可以自动对MapReduce程序进行优化,所以当用户使用Pig Latin语言进行编程的时候,不必关心程序运行的效率,Pig系统将会自动对程序进行优化。这样能够大量节省用户编程的时间。

下面我们首先介绍Pig在Local模式下的运行方式。Pig的Local模式适用于用户对程序进行调试,因为Local模式下的Pig将只访问本地一台主机,它可以在短时间内处理少量的数据,并且用户不必关心Hadoop系统对整个集群的控制,这样既能让用户使用Pig的功能,又不至于在集群的管理上花费太多时间。

Pig的Local模式和MapReduce模式都有三种运行方式,分别为:Grunt Shell方式、脚本文件方式和嵌入式程序方式。下面我们将对其进行一一介绍。

1.Local模式

(1)Grunt Shell方式

用户使用Grunt Shell方式时,需要首先使用命令开启Pig的Grunt Shell,只需在Linux终端中输入如下命令并执行即可:

$pig-x local

这样Pig将进入Grunt Shell的Local模式,如果直接输入“pig”命令,Pig将首先检测Pig的环境变量设置,然后进入相应的模式。如果没有设置MapReduce环境变量,Pig将直接进入Local模式。图14-1为开启Grunt Shell的结果。

14.2.3 Pig运行模式 - 图1

图 14-1 Local模式下开启Grunt Shell

Grunt Shell和Windows中的Dos窗口非常类似,这里用户可以一条一条地输入命令对数据进行操作。

(2)脚本文件方式

使用脚本文件作为批处理作业来运行Pig命令,它实际上就是第一种运行方式运行脚本中命令的集合,使用如下命令可以在本地模式下运行Pig脚本:


$pig-x local script.pig


其中,“script.pig”对应的是Pig脚本,用户在这里需要正确指定Pig脚本的位置,否则,系统将不能识别。例如,Pig脚本放在“/root/pigTmp”目录下,那么这里就要写成“/root/pigTmp/script.pig”。用户在使用的时候需要注意Pig给出的一些提示,充分利用这些提示能够帮助用户更好地使用Pig进行相关的操作[1]

(3)嵌入式程序方式

我们可以把Pig命令嵌入到其他编程语言中,并且运行这个嵌入式程序。和运行普通的Java程序相同,这里需要书写特定的Java程序,并且将其编译生成对应的class文件或package包,然后再调用main函数运行程序。

用户可以使用下面的命令对Java源文件进行编译:


$javac-cp pig-..*-core.jar local.java


这里“pig-..-core.jar”放在Pig安装目录下,“local.java”为用户编写的Java源文件,并且“pig-..-core.jar”和“local.java”需要用户正确地指定相应的位置。例如,我们的“pig-..*-core.jar”文件放在“/root/hadoop-0.20.2/”目录下,“local.java”文件放在“/root/pigTmp”目录下,那么这一条命令我们应该写成:


$javac-cp/root/hadoop-0.20.2/pig-0.20.2-core.jar/root/pigTmp/local.java


当编译完成后,Java会生成“local.class”文件,然后用户可以通过如下命令调用执行此文件。


$java-cp pig-..*-core.jar:.local


2.MapReduce模式

Pig需要把真正的查询转换成相应的MapReduce作业,并提交到Hadoop集群去运行(集群可以是真实的分布,也可以是伪分布)。要想Pig能识别Hadoop,用户需要告诉Pig要连接的Hadoop的安装目录。我们只需要设置HADOOP_HOME环境变量:


export HADOOP_HOME=/path/to/hadoop


当设置完毕并且生效之后,用户可以输入“pig-x mapreduce”命令进行测试,如果能够看到Pig连接Hadoop的NameNode和JobTrakcer的相关信息,则表明配置成功,用户就可以随心所欲地使用MapReduce模式来进行相关的Pig操作了。

图14-2为MapReduce配置成功后的提示信息,从图中可以看到Pig连接Hadoop的详细信息。

14.2.3 Pig运行模式 - 图2

图 14-2 MapReduce配置成功的提示信息

配置成功之后,下面我们将针对Pig的MapReduce模式,说明如何在此模式下对Grunt Shell方式、脚本文件方式和嵌入式程序方式进行操作。它们和Local模式下的操作几乎相同,只不过需要将相应的参数指明为MapReduce模式。

(1)Grunt Shell方式

用户在Linux终端下输入如下命令,进入Grunt Shell的MapReduce模式:


$pig-x mapreduce


(2)脚本文件方式

用户可以使用如下命令在MapReduce模式下运行Pig脚本文件:


$pig-x mapreduce script.pig


(3)嵌入式程序

和Local模式相同,在MapReduce模式下运行嵌入式程序同样需要经过编译和执行两个步骤。用户可以使用如下两条命令,完成相应的操作。


javac-cp pig-0.10.0-core.jar mapreduce.java

java-cp pig-0.10.0-core.jar:.mapreduce


至此,Pig系统的两个运行模式及其分别对应的三个运行方式就讲述完毕了,14.5和14.6节我们将结合实例,对其做更深入的介绍,在这里希望大家能够对Pig系统的运行模式有一个初步的印象。

[1]注意:这里script.pig前后没有引号。