Hadoop之家族成员Pig简介

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-INUf7iRp-1662106189048)(http://172.18.3.4:8090/download/attachments/7736394/image2018-12-8%2010%3A6%3A54.png?version=1&modificationDate=1544234855000&api=v2)]

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代码:

importjava.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函数所在的类名称。

猜你喜欢

转载自blog.csdn.net/m0_54864585/article/details/126665462
今日推荐