Hadoop之家族成员Pig简介

Hadoop发展很快,Hadoop作为Apache的一个顶级项目旗下有许多的子项目,今天的内容就是简单的介绍一下Hadoop家族的子项目中的Pig。

下图是一个Hadoop子项目的大体结构图

Pig简介

Pig是Hadoop数据操作的客户端是一个数据分析引擎,采用了一定的语法操作HDFS中的数据(Pig应该说是一种语言,有人说Pig是类SQL的语言我这里只能说它的功能类似Sql语言和数据库的关系,而且这里的Sql更像是PLSQL而不是标准SQL,Hadoop中更像标准Sql的应该是Hive或者叫HiveQL),它的语言比较像Shell脚本,可以嵌入Hadoop的JAVA程序中,从而达到简化代码的功能,Pig的脚本叫Pig Latin,之所以说Pig是一个数据分析引擎,是因为Pig相当于一个翻译器,将Pig Latin语句翻译成MapReduce程序,而Pig Latin语句是一种用于处理大规模数据的脚本语言。Pig Latin可完成排序(Order By)、过滤(Where)、求和(Sum)、分组(Group By)、关联(Join)等操作,支持自定义函数;Pig Latin是把类似Sql的语句转换成MapReduce过程进行处理,减少Java 代码的书写,Pig的运行方式有Grunt Shell方式,脚本方式和嵌入式方式。

 

Pig数据模型
Bag:表
Tuple:行,记录
Field:属性
Pig不要求同一个bag里面的各个tuple有相同数量或相同类型的field

 

下面用例子来说明Pig如何工作和工作模式的区别:

Pig查询例子:

Sql语句:select deptno,max(sal) from emp group by deptno;
Pig Latin语句:emp1 = group emp by deptno;
emp2 = foreach emp1 generate group,MAX(emp.sal)
dump emp2;

 

运行方式的例子:

1.Grunt shell方式

  Grunt shell方式首先用pig命令启动,pig命令可以加参数“-x local”代表本地模式,或“-x mapreduce”代表mapreduce模式,默认mapreduce模式。本地模式:伪分布式模式下使用,MapReduce模式:全分布式下使用
    $ pig -x local
    $ pig
    $ pig -x mapreduce 
  按行输入命令:
    grunt> A = load '/scott/emp.csv' using PigStorage(':'); 
    grunt> B = foreach A generate $0 as id; 
    grunt> dump B; 
    grunt> store B into 'out'; 
  其中,load '/scott/emp.csv' using PigStorage(':') Load 为加载数据路径“/scott/emp.csv”,PigStorage指定分隔符,不仅可以指定输入文件的分割符.而且还能用来指定输出文件个分割符,“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代码:

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类方式没有任何不同,如:
    java -cp .:/opt/hadoop/pig/pig-0.5.0-core.jar Idmapreduce

其中java -cp 表示编译jar包,后面紧跟生成的jar路径,空格后的为Main函数所在的类名称。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值