Pig 的安装和配置
1 P ig 的安装条件
- Hadoop 0.20.2
Pig 有两种运行模式: Local 模式和 MapReduce 模式。如果需要让作业在分布式环境下运行,则需要安装 Hadoop ,否则用户可以选择不安装。另外,当前 Hadoop 最新的版本为 0.20.2 ,当然用户也可以选择安装其它版本,不过这里建议安装最新的 Hadoop 版本。因为新的版本修正了以前版本中的一些错误,并且添加了新的特性 [1] 。
- Java 1.6
建议安装 Java 1.6 以上的版本。 Java 环境对于 Pig 来说是必须的(推荐从 SUN 官方网站上下载)。
当下载安装完毕 Java 后,我们还需要对 Java 环境变量进行设置,将 JAVA_HOME 指向 Java 的安装位置。
如果用户使用的是 Linux 操作系统,那么以上条件就足够了。但是,如果用户使用的是 Windows 操作系统,那么除此之外,用户还需要安装 Cygwin 和 Perl 包。本章后面的案例将以 Linux 操作系统为例进行讲解。
2 P ig 的下载、安装 和配置
当前 Pig 最新版本为 0.7.0 ,除此之外, Pig 还有 0.6.0 以及 0.5.0 两个版本,用户可以根据需要从 Apache 官方网站上下载相应的版本。本书使用最新版的 Pig 0.7.0 ,安装包下载地址如下:
http://www.apache.org/dyn/closer.cgi/hadoop/pig
Pig 的安装包下载完成后,需要使用 tar –xvf pig-*.*.*.tar.gz 命令将其解压。我们可以将 Pig 放在系统中的任意位置,并且只需要配置相应的环境变量就可以对 Pig 进行使用。我们建议将 Pig 放在 Hadoop 目录下,方便以后的操作。
解压完成后,需要设置 Pig 相应的环境变量,环境变量有多种设置方法,用户可以根据自己的需要进行选择。这里我们选择对 profile 文件进行修改,来设置 Pig 相应的环境变量。打开“ /etc/profile ”文件,插入下面的一条语句,保存关闭文件后需要重启系统以使环境变量设置生效。
export PATH=/<my-path-to-pig>/pig-n.n.n/bin:$PATH
当环境变量设置生效后,我们可以通过“ $pig –help ”命令来查看 Pig 是否安装成功。当 Pig 安装成功后会出现如下图 的提示。
$Pig – help
3 P ig 运行模式
Pig 有两种运行模式: Local 模式和 MapReduce 模式。当 Pig 在 Local 模式运行的时候, Pig 将只访问本地一台主机;当 Pig 在 MapReduce 模式运行的时候, Pig 将访问一个 Hadoop 集群和 HDFS 的安装位置。这时, Pig 将自动地对这个集群进行分配和回收。因为 Pig 系统可以自动地对 MapReduce 程序进行优化,所以当用户使用 Pig Latin 语言进行编程的时候,不必关心程序运行的效率, Pig 系统将会自动地对程序进行优化。这样能够大量节省用户编程的时间。
下面我们首先介绍 Pig 在 Local 模式下的运行方式。 Pig 的 Local 模式适合用户对测试程序进行调试使用,因为 Local 模式下 Pig 将只访问本地一台主机,它可以在短时间内处理少量的数据,并且用户不必关心 Hadoop 系统对整个集群的控制,这样既能让用户使用 Pig 的功能又不至于在对集群的管理上花费太多时间。
Pig 的 Local 模式和 MapReduce 模式都有三种运行方式,分别为: Grunt Shell 方式、脚本文件方式和嵌入式程序方式。下面我们将对其进行一一介绍。
- Local 模式
( 1 ) Grunt Shell 方式
用户使用 Grunt Shell 方式时,需要首先使用命令开启 Pig 的 Grunt Shell ,只需在 Linux 终端中输入如下命令并执行即可:
$pig –x local
这样 Pig 将进入 Grunt Shell 的 Local 模式,如果直接输入“ $pig ”命令, Pig 将首先检测 Pig 的环境变量设置,然后进入相应的模式。如果没有设置 MapReduce 环境变量, Pig 将直接进入 Local 模式。下图 为开启 Grunt Shell 的结果。
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 进行相关的操作 。
( 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
- MapReduce 模式
Pig 需要把真正的查询转换成相应的 MapReduce 作业,并提交到 Hadoop 集群去运行(集群可以是真实的分布,也可以是伪分布)。要想 Pig 能识别 Hadoop ,用户需要告诉 Pig 关于 Hadoop 的版本及一些关键的信息(也就是 NameNode 和 JobTracker 的位置以及端口信息)。
下面第一步首先指明 Pig 要连接的 Hadoop 的版本信息,第二步详细指明 Pig 连接 Hadoop 的配置信息。
( 1 )允许 Pig 连接到任何的 Hadoop.0.20.* 版本
配置 Linux 系统环境变量,在“ /etc/profile ”文件中加入如下信息:
export PIG_HADOOP_VERSION=20
( 2 ) 指明集群的 NameNode 和 JobTracker 的位置。有以下两种方法让 Pig 识别 Hadoop 的 NameNode 和 JobTracker ,采用任何一种方式均可。
方法一:
把自己的 Hadoop 的 Conf 地址添加到 Pig 的 Classpath 上:
export PIG_CLASSPATH=$HADOOP_INSTALL/conf/
方法二:
在 pig 目录的 Conf 文件夹(可能需要自己创建)里创建一个 pig.properties 文件,然后在里面添加集群的 Namenode 和 Jobtracker 信息,第二行中的 port 是用户 Hadoop 中 JobTracker 对应的端口:
fs.default.name=hdfs://localhost/
mapred.job.tracker=localhost:port
当设置完毕并且生效之后,用户可以输入“ $pig –x mapreduce ”命令进行测试,如果能够看到 Pig 连接 Hadoop 的 NameNode 和 JobTrakcer 的相关信息,则表明配置成功,然后用户就可以随心所欲地使用 MapReduce 模式来进行相关的 Pig 操作了。
下图 为 MapReduce 配置成功后的提示信息,从图中可以看到 Pig 连接 Hadoop 的详细信息。
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.7.0-core.jar mapreduce.java
java -cp pig-0.7.0-core.jar:. mapreduce
至此, Pig 系统的两个运行模式及其分别对应的三个运行方式就讲述完毕了, 之后 我们将结合实例,对其做更深入的介绍,这里希望用户能够对 Pig 系统的运行模式有一个初步的印象。