安装与运行Pig
Pig是作为一个客户端应用程序运行的,即使准备在Hadoop集群上运行Pig,也不 需要在集群上额外安装什么东西:Pig从工作站上发出作业,并和HDFS(或其他 Hadoop文件系统)进行交互。
Pig的安装很简单。安装前需要有Java 6。在Windows上安装时,还需要 Cygwin。从 http:"hadoop.apache.org/pig/releases.html下载稳定版本,然后把 tarS 缩包解压到工作站上的合适的路径:
% tar xzf pig-x.y.z.tar.gz
把Pig的二进制文件路径添加到命令路径也很方便,例如:
% export PIG_INSTALLs/home/tom/pig-x.y.z % export PATH=$PATH:$PIG_INSTALL/bin
还需要设置JAVA_H0ME环境变量,以指明Java的安装路径。
输人pig-help可获得使用帮助。
执行类型
Pig有两种执行类型或称模式(mode):本地模式(local mode)和MapReduce模式 (MapReduce mode)。
本地模式
在本地模式下,Pig运行在单个JVM中,访问本地文件系统。该模式只适用于试 用Pig或处理小规模数据集。
执行类型可用-x 或-exectype选项进行设置。如果要使用本地模式运行,那么就 把该选项设置为local:
% pig -x localgrunt>
这样就能够启动Gnmt。Gnmt是Pig的外壳程序(shell)。稍后我们会对它进行详细 讨论。
MapReduce 模式
在MapReduce模式下,Pig将査询翻译为MapReduce作业,然后在Hadoop集群上 执行。集群可以是伪分布的,也可以是全分布的。如果要用Pig处理大规模数据 集,应该使用全分布集群上的MapReduce模式。
要使用MapReduce模式,你首先需要检査下载的Pig是否与正在使用的Hadoop版 本兼容。Pig发布版本只和特定的Hadoop版本兼容。发布页面记录了兼容版本信 息。例如,Pig 0.3和0.4版对应于Hadoop0.18x发布版本;而Pig 0.5到0.7版与 Hadoop 0.20.x 对应。
如果某个Pig版本支持多个版本的Hadoop ,你可以通过使用PIG_HADOOP_VERSION环境变量来告诉Pig它所连接的Hadoop版本。例如,以下 命令让Pig使用0.18.x版本的Hadoop:
% export PIG_HAD00P_VERSI0N=18
然后,需要将Pig指向集群的namenode和jobtracker。如果有一个或多个Hadoop 站点文件已经定义了 fs.default.name 和 mapred.job.tracker,把 Hadoop 的 配置目录加到Pig的类路径即可:
% export PIG_CLASSPATH=$HADOOP_INSTALL/conf/
或,可以在Pig的conf目录下pig.properties文件中设置这两个参数。下面是针对伪分布集群进行设置的示例:
fs.default.name=hdfs://localhost/ mapred.job.tracker=localhost: 8021
一旦设置好pig到Hadoop集群的连接,就可以通过设置-x选项或忽略该选项使用 Pig了。MapReduce模式是Pig的默认执行模式:
% Pig10/07/16 16:27:37 INFO pig.Main: Logging error messages to: /Users/tom/dev/pig-0.7.0/pig\_1279294057867.1og2010-07-16 16:27:38j243 [main] INFO org.apache.pig.backend.hadoop.executionengi ne.HExecutionEngine - Connecting to hadoop file system at: hdfs://localhost/07-16 16:27:38,741 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to map-reduce job tracker at: localhost:8021 gnunt>
从输出中可以看到,Pig报告了它所连接的文件系统和jobtracker。
运行Pig程序
有三种执行Pig程序的方法。它们在本地和MapReduce模式下都适用。
Pig可以运行包含Pig命令的脚本文件。例如,pig script.pig运行在本地 文件script.pig中的命令。对于很短的脚本,你也可以通过使用^选项直接在 命令行中输入脚本字符串。
Grunt
Grunt是运行Pig命令的交互式外壳环境(shell)。如果没有指明Pig要运行的文 件,而且也没有使用-e选项,Pig就会运行Grunt。在Grunt环境中,也可以 通过run和exec命令运行Pig脚本。
嵌入式方法
也可以在Java中运行Pig程序。这和使用JDBC运行SQL程序很像。详情可 参见 Pig wiki,网址为 http:"wiki.apache.org/pig/EmbeddedPig。
Grunt
Grunt包含的行编辑功能和GNU Readline(在bash外壳环境等命令行应用中使用)类 似。例如,Ctrl-E组合键将光标移到行末。Grunt也记录过去执行过的命令。可以使用Ctrl-P和Ctrl-N或上下箭头键,回显命令历史缓存中的上或下一条命令。Grunt的另一个有用特性是自动补全机制。它能够在你按Tab键时试图自动补全Pig Latin关键词和函数名。例如,如果有如下未完成的命令行:
gnunt> a = foreach b ge
此时如果按了31)键,那么ge会自动扩展成Pig Latin关键词generate:
gnunt> a = foreach b generate
可以创建一个名为autocomplete的文件放在Pig的类路径(如Pig安装目录的conf 目录中)中或运行Gnmt的目录中,以此来定制自动补全的单词。这个文件中每个 单词占一行,且单词中不能出现空格符。自动补全是大小写敏感的。在这个文件中 列出常用的文件路径特别有用。因为pig并不提供文件名自动补全。在该文件中列 出你创建的用户自定义函数也能带来很多便利。
可以使用help命令列出可用的命令。结束一个Gnmt会话时,可以使用quit命 令退出。
Pig Latin编辑器
PigPen是一个提供了 Pig程序开发环境的EclipSe插件。它包含Pig脚本编辑器、 示例生成器(等同于ILLUSTRATE命令)以及用于在Hadoop集群上运行脚本的按 钮。它还提供一个操作图窗口,能够以图形方式显示脚本,将数据流可视化。完整 的安装和使用说明请参见Pig wiki的http://wiki.apache.org/pig/PigPen页面。
除PigPen以外,还有一些为其他编辑器(包括Vim和TextMate)的所用Pig Latin句 法髙亮显示工具。它们的详细说明可参见Pigwiki。