[Hadoop]转载-Pig的简单介绍

Pig是Yahoo!捐献给Apache的一个项目,目前还在Apache孵化器(incubator)阶段,目前版本是v0.5.0。Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-like语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。Pig为复杂的海量数据并行计算提供了一个简易的操作和编程接口。本文介绍了Pig的安装及简单示例的运行,主要参考/翻译自官方文档的Pig Setup 。 

前提条件: 

Linux/Unix系统,或带有Cygwin的Windows操作系统,我是用的是Ubuntu 8.04; 
Hadoop 0.20.X 
JDK 1.6或更高 
Ant 1.7(可选,如果想自己编译Pig的话则需要) 
JUnit 4.5(可选,如果自己想运行单元测试的话则需要) 
Pig的安装 

1.下载Pig 
  可以去Pig的官方主页下载最新的Pig,在写本篇文章时,最新版本是Pig 0.5.0 
2.解压缩 
  $ tar -xvf pig-0.5.0.tar.gz 
  我一般喜欢把pig装在/opt/hadoop/pig-0.5.0目录下 
3.设置环境变量 
  为了便于Pig以后的升级,我创建了一个软链接,环境变量指向软链接的目录,而软链接指向最新的Pig版本。
  $ ln -s /opt/hadoop/pig-0.5.0 /opt/hadoop/pig 
  编辑/etc/enviroment,在PATH加入Pig的bin子目录路径(也可以修改~/.bashrc或~/.profile)。 
4.验证安装完成 
  重新进入终端,键入env命令,应该能看到PATH已经生效。键入pig -help命令,则出现帮助信息,代表Pig已经正确安装完毕。 

Pig的运行模式 

1.本地模式 
  Pig运行于本地模式,只涉及到单独的一台计算机。 
2.MapReduce模式 
  Pig运行于MapReduce模式,需要能访问一个Hadoop集群,并且需要装上HDFS。 

Pig的调用方式 

Grunt shell方式:通过交互的方式,输入命令执行任务; 
Pig script方式:通过script脚本的方式来运行任务; 
嵌入式方式:嵌入java源代码中,通过java调用来运行任务。 
Pig的示例代码 

  下面就分别介绍这三种不同的调用方式,首先,先展示一下示例需要用到的源代码,这部分源代码与官方文档中的一样,但有如下修改: 

修正了官方文档中一个错误,即id.pig最后一行id.out两侧的全角单引号改为半角单引号; 
2.修正了官方文档中一个错误,即idmapreduce.java的runIdQuery方法第一行末尾少一个分号; 
3.按照Java常见的命名规范,类名首字母大写。 
  script文件:id.pig
view plaincopy
A = load 'passwd' using PigStorage(':');  
B = foreach A generate $0 as id;  
dump B;  
store B into ‘id.out’;  


  local模式的java文件:Idlocal.java 
view plaincopy
import java.io.IOException;  
import org.apache.pig.PigServer;  
public class idlocal{  
public static void main(String[] args) {  
try {  
    PigServer pigServer = new PigServer("local");  
    runIdQuery(pigServer, "passwd");  
    }  
    catch(Exception e) {  
    }  
 }  
public static void runIdQuery(PigServer pigServer, String inputFile) throws IOException {  
    pigServer.registerQuery("A = load '" + inputFile + "' using PigStorage(':');");  
    pigServer.registerQuery("B = foreach A generate $0 as id;");  
    pigServer.store("B", "id.out");  
 }  
}  


  mapreduce模式的java文件:Idmapreduce.java
view plaincopy
import java.io.IOException;  
import org.apache.pig.PigServer;  
public class idmapreduce{  
   public static void main(String[] args) {  
   try {  
     PigServer pigServer = new PigServer("mapreduce");  
     runIdQuery(pigServer, "passwd");  
   }  
   catch(Exception e) {  
   }  
}  
public static void runIdQuery(PigServer pigServer, String inputFile) throws IOException {  
   pigServer.registerQuery("A = load '" + inputFile + "' using PigStorage(':');");  
   pigServer.registerQuery("B = foreach A generate $0 as id;");  
   pigServer.store("B", "idout");  
   }  
}  


  两个java类需要进行编译,编译命令: 
    javac -cp .:/opt/hadoop/pig/pig-0.5.0-core.jar Idlocal.java 
    javac -cp .:/opt/hadoop/pig/pig-0.5.0-core.jar Idmapreduce.java 
  其中pig-0.5.0-core.jar如不在当前目录,则要指明其全路径。 

1.Grunt shell方式 
  Grunt shell方式首先用pig命令启动,pig命令可以加参数“-x local”代表本地模式,或“-x mapreduce”代表mapreduce模式,默认mapreduce模式。 
    $ pig -x local 
    $ pig 
    $ pig -x mapreduce 
  按行输入命令: 
    grunt> A = load 'passwd' using PigStorage(':'); 
    grunt> B = foreach A generate $0 as id; 
    grunt> dump B; 
    grunt> store B into 'out'; 
  其中,“dump B”表示在屏幕中显示结果,“store B into 'out'”表示把结果输出到out文件/文件夹中。在local模式中,out文件写入到当前目录;mapreduce中,out文件夹则需要给出绝对路径。 

2.Pig script方式 
  script方式中,用pig命令启动,后面带要运行的.pig文件即可,如: 
    $ pig -x local id.pig 
    $ pig id.pig 
    $ pig -x mapreduce id.pig 

3.嵌入式方式 

  嵌入式方式与运行于运行普通java类方式没有任何不同,如: 
    java -cp .:/opt/hadoop/pig/pig-0.5.0-core.jar Idmapreduce 
    java -cp .:/opt/hadoop/pig/pig-0.5.0-core.jar Idlocal 

文章出处:http://blog.csdn.net/inkfish/article/details/5205999
上一篇:《MongoDB管理与开发精要》——2.6节常用GUI管理工具


下一篇:【JavaSE】 super关键字基本使用