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-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 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前后没有引号。