安装和运行Pig
Pig是作为一个客户端程序运行的,即使你想在Hadoop集群上面运行它,你也不需要安装额外的东西。Pig启动jobs,与HDFS(或其它的Hadoop文件系统)交流,这些都是在你的机器上进行的。
Pig的安装很简单,你需要java 6(windows 上还需要Cygwin)。
从http://hadoop.apache.org/pig/releases.html,下载稳定版本,解压到你电脑合适的地方,
% tar xzf pig-x.y.z.tar.gz
把Pig的二进制目录加到你的命令行中是非常方便的,例如:
% export PIG_INSTALL=/home/tom/pig-x.y.z
% export PATH=$PATH:$PIG_INSTALL/bin
你也需要设置JAVA_HOME 环境变量指出Java安装位置。输入pig-help命令查看帮助。
运行模式
Pig有两种运行模式:本地模式和Mapreduce模式。
本地模式
在本地模式,Pig在独立的JVM中运行,并且访问本地文件系统。这种模式只适应于在测试Pig的时候,小的数据集。
这种模式的运行是设置-x或者-exectype选项。如下设置:
% pig -x local
grunt>
这样开启Grunt,Pig的交互shell,稍后会详细讲解Grunt。
Mapreduce模式
在Mapreduce模式,Pig把查询转换成Mapreduce jobs并且把它们运行在Hadoop集群上面。集群可能是伪分布式的,或者完全分布式的。Mapreduce模式是你在想要在大数据集上运行Pig时候用到的。
为了使用Mapreduce模式,首先,你需要检查你下载的Pig的版本与你正在使用的Hadoop版本是否兼容。Pig版本只与Hadoop的一小部分版本冲突,这在版本页面上有说明。
例如,Pig0.3和0.4与Hadoop0.18.x版本冲突,然而Pig0.5到0.7与Hadoop0.20x兼容。
如果一个Pig版本支持多种Hadoop版本,你可以使用环境变量PIG_HADOOP_VERSION来告诉Pig,它将要连接的Hadoop的版本。例如,下面的设置就是Pig使用任何0.18.x版本的Hadoop:
% export PIG_HADOOP_VERSION=18
下一步,你需要在集群的namenode和jobtracker上指出Pig。如果你已经在Hadoop文件中指定了fs.default.name 和 mapred.job.tracker,你可以简单的增加Hadoop的配置文件到Pig的classpath中:
% export PIG_CLASSPATH=$HADOOP_INSTALL/conf/
或者,你可以把这两个属性都放在Pig的conf目录的pig.properties文件中,下面是伪分布式安装的例子:
fs.default.name=hdfs://localhost/
mapred.job.tracker=localhost:8021
一旦,你配置Pig连接Hadoop集群,你就可以启动Pig了,给mapreduce设置-x选项,或者干脆完全省略它就像Mapreduce的节点的默认设置一样:
% pig
10/07/16 16:27:37 INFO pig.Main: Logging error messages to: /Users/tom/dev/pig-0
.7.0/pig_1279294057867.log
2010-07-16 16:27:38,243 [main] INFO org.apache.pig.backend.hadoop.executionengi
ne.HExecutionEngine - Connecting to hadoop file system at: hdfs://localhost/
2010-07-16 16:27:38,741 [main] INFO org.apache.pig.backend.hadoop.executionengi
ne.HExecutionEngine - Connecting to map-reduce job tracker at: localhost:8021
grunt>
从输出结果你可以看出,Pig打印报告了它已经连接到的文件系统和jobtracker。
运行Pig程序
有三种运行Pig程序的方法,它们都能够工作在本地和Mapreduce模式下。
Script
Pig可以运行一个包含Pig命令的script文件。例如,Pig script.pig 命令,会运行本地script.pig中的命令。或者,如果是很简短的script命令,你可以直接使用-e选项来运行指定的命令。
Grunt
Grunt是一个运行Pig命令的交互的shell。当没有为Pig指定运行的文件的时候,并且没有使用-e选项的时候,Grunt开始运行。从Grunt运行和执行的内部里也可以运行Pig scripts。
内嵌
你可以从Java中运行Pig程序,就像你使用JDBC从Java中,运行SQL程序一样。在Pig的wiki页面上有更多的细节,http://wiki.apache.org/pig/EmbeddedPig
Grunt
Grunt有行编辑设施,就像GNU Readline一样(在bash shell中使用,并且在许多其它的命令行程序中使用。)例如,Ctrl+E组合键会使光标移到行尾。Grunt也提供命令历史,你可以重新使用历史中的命令,使用Ctrl-P 或Ctrl-N命令,或者向上箭头,向下箭头。
另一个方便的特性是,Grunt的自动补全机制,这种机制会在你按下Tab键的时候,尽力去完成Pig Latin关键字和函数。例如,看看下面的未完成的命令:
grunt> a = foreach b ge
如果你此时按下Tab键,就会自动补全
grunt> a = foreach b generate
你可以通过创建一个名叫autocomplete 的文件,并把它放在Pig的classpath中,来自定义补全token(例如在Pig的安装目录的conf目录下),或者在你引用Grunt的目录中。
注:历史命令存储在一个你的home目录下的叫做 .pig_history的文件中。
文件应该每行都有一个token,并且tokens一定不能包含空格。匹配时大小写敏感的。增加常用的文件路径,对你以后的额操作是非常方便的(因为Pig不执行文件名的自动补全),或者是增加任何你自定义的函数。
你可以使用help命令查看命令列表。当你完成Grunt会话的时候,使用quit命令退出。
Pig Latin 编辑器
PigPen是一个Eclipse插件,它提供一个开发Pig程序的环境。它包括一个Pig script文本编辑器,一个例子生成器(等同于demo命令),并且有一个在Hadoop集群上面运行script的按钮。同时,也有一个操作图表的界面,这个界面以图表的形式显示了script,这是为了使数据流可视化。查看完全的安装和使用说明,请参考Pig wiki http://wiki.apache.org/pig/PigPen.
同样,对于其它的编辑器来说,也有语法高亮提示,包括Vim和Text-Mate编辑器。详见wiki页面。