Hadoop教程

安装与运行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。

关注微信获取最新动态