Pig

一、Pig的介绍:

Pig由Yahoo开发,主要应用于数据分析,Twitter公司大量使用Pig处理海量数据,Pig之所以是数据分析引擎,是因为Pig相当于一个翻译器,将PigLatin语句翻译成MapReduce程序(只有在执行dump和store命令时才会翻译成MapReduce程序),而PigLatin语句是一种用于处理大规模数据的脚本语言。

二、Pig与Hive的相同与区别:

相同:

1、Hive和Pig都是数据分析引擎,除此之外,还有Spark中的Spark SQL和Cloudera开发的Impala等。

2、Hive和Pig都简化了MapReduce程序的开发。

不同:

1、Hive作为数据分析引擎有一定限制,只能分析结构化数据,因为Hive的数据模型是表结构,虽然没有数据存储引擎,需要用户在创建表时指定分隔符(默认以Tab键作为分隔符):row format delimited field terminated by ‘,’,而Pig的数据模型是包结构,由tuple和field组成,因此可以分析任意类型的数据。

2、Hive使用的是sql语句分析数据,sql语句是一种声明式语言,Pig使用的是PigLatin语句分析数据,PigLatin语句是一种过程式语言/脚本语句。

3、Hive中的内置函数不用大写,Pig中的内置函数必须要大写。

举例:按照部门号对员工表分组并求每个部门中薪水的最大值:

sql语句:select deptno,max(sal) from emp group by deptno;

PigLatin语句:emp1 = group emp by deptno;

emp2 = foreach emp1 generate group,MAX(emp.sal)

dump emp2;

(PigLatin语句注意事项:等号前后要有空格)

4、Hive保存元信息,因此数据模型不用重建,而Pig不保存元信息,因此数据模型需要重建。

5、由于PigLatin语句是脚本语言,因此Hive执行速度比Pig更快。

6、 由于Hive的数据模型是表结构,因此Hive是先创建表,后加载数据,而Pig的数据模型是包结构,Pig在加载数据的同时创建包。

举例:创建一份员工表

sql语句:

1、创建表:

create table emp(

empno int,

ename string,

job string,

mgr int,

hiredate string,

sal int,

comm int,

deptno int

)row format delimited field terminated by ',';

2、加载HDFS中的数据:

load data inpath '/scott/emp.csv' into table emp;

PigLatin语句:

加载数据的同时创建包:load后加载数据,using后指定分隔符,as后指定包结构

emp=load'/scott/emp.csv'usingPigStorage(',')as(empno:int,ename:chararray,job:chararray,mgr:int,hiredate:chararray,sal:int,comm:int,deptno:int);

三、Hive数据模型和Pig数据模型的差别:

1、Hive的数据模型是表,表由行和列组成,表不可以嵌套,Pig的数据模型是包,包由tuple和field组成,包可以嵌套。

2、表中每一行的列完全相同,包中每一行的列可以不相同,可以动态增加。

四、Pig的安装和配置:

1、安装pig:tar -zxvf pig-0.17.0.tar.gz -C ~/traing

2、配置PIG_HOME环境变量:

export PIG_HOME=/root/training/pig-0.17.0

export PATH=$PIG_HOME/bin:$PATH

五、Pig的安装模式:

1、本地模式:访问本地主机,pig相当于本地的客户端。

2、集群模式:访问Hadoop集群,pig相当于Hadoop的客户端。

注:1、集群模式需要配置PIG_CLASSPATH环境变量,用于连接到Hadoop上:

export PIG_CLASSPATH=/root/training/hadoop-2.7.3/etc/hadoop

2、启动pig的集群模式前,需要先启动historyserver,因为pig在hadoop上执行任务后需要与historyserver通信,解析执行日志确定任务执行是否成功:

mr-jobhistory-daemon.sh start historyserver

六、Pig的常用命令:操作HDFS

ls、cd、cat、mkdir、pwd、copyFromLocal(上传)、copyToLocal(下载)、register、define等。

七、操作Pig:

1、命令行:pig提供了一个shell终端与用户进行交互,用户可以进行增删改查操作。

启动pig命令行模式,进入本地模式:pig -x local

启动pig命令行模式,进入集群模式:pig - x mapredcue/pig

(pig没有API可以操作)

八、常用的PigLatin语句:

load:加载数据

foreach:逐行扫描

generate:提取列

filter:过滤

distinct:去重

order by:排序

group by:分组

join:多表查询

union:联合查询

dump:把结果输出到屏幕上

store:把结果保存到HDFS上

九、使用PigLatin语句分析数据:

创建员工表:load后加载数据,using后指定分隔符,as后指定包结构

emp = load '/scott/emp.csv' using PigStorage(',') as(empno:int,ename:chararray,job:chararray,mgr:int,hiredate:chararray,sal:int,comm:int,deptno:int);

describe emp;

查看员工表:2

SQL:select * from emp;

PL:emp0 = foreach emp generate *;

dump emp0;

创建部门表:

dept = load '/scott/dept.csv' using PigStorage(',') as(deptno:int,dname:chararray,loc:chararray);

查看部门表:

SQL:select * from dept;

PL:dept0 = foreach dept generate *;

dump dept0;

查询员工号、员工名和薪水:

SQL:select empno,ename,sal from emp;

PL:emp1 = foreach emp generate empno,ename,sal;

dump emp1;

根据薪水对员工表排序:

SQL:select sal from emp order by sal;

PL:emp2 = order emp by sal;

dump emp2;

按照部门号对员工表分组并求每个部门中薪水的最大值:

SQL:select deptno,max(sal) from emp group by deptno;

PL:emp3 = group emp by deptno;

emp4 = foreach emp3 generate group,MAX(emp.sal);

dump emp4;

查看10、20、30号部门的员工

SQL:select * from emp where deptno=10;

select * from emp where deptno=20;

select * from emp where deptno=30;

PL:emp5 = filter emp by deptno==10;

dump emp5;

emp6 = filter emp by deptno==20;

dump emp6;

emp7 = filter emp by deptno==30;

dump emp7;

多表查询,查询员工名和部门名:

SQL:select emp.ename,dept.dname from emp,dept where emp.deptno=dept.deptno;

PL:emp8 = join emp by deptno,dept by deptno

emp9 = foreach emp8 generate emp::ename,dept::dname;

dump emp9;

内连接:

C = join A by id,B by id;

外连接:

左外连接:C = join A by id left outer,B by id; #以左侧数据为基准,只返回左侧有的数据

右外连接:C = join A by id right outer,B by id;#以右侧数据为基准,只返回右侧有的数据

全外连接:C = join A by id full outer, B by id;#两侧数据都返回

联合查询,查询10号部门和20号部门的员工:

SQL:select * from emp where deptno=10

union

select * from dept where deptno=20;

PL: emp10 = filter emp by deptno==10;

emp11 = filter emp by deptno==20;

emp12 = union emp10,emp11;

实现wordcount;

加载数据

mydata = load '/output/data2.txt' as (line:chararray);

将字符串分割成单词

words = foreach mydata generate flatten(TOKENIZE(line)) as word;

对单词分组

grpd = group words by word;

统计每组中单词数量

cntd = foreach grpd generate group,COUNT(words);

结果显示到屏幕上

dump cntd;

结果存储到HDFS上

store cntd into '/pig';

常用的大数据工具

作者:李金泽AlllenLI,清华大学硕士研究生,研究方向:大数据和人工智能

详细解读大数据分析引擎Pig&PigLatin语句的更多相关文章

  1. 《开源大数据分析引擎Impala实战》目录

    当当网图书信息: http://product.dangdang.com/23648533.html <开源大数据分析引擎Impala实战>目录 第1章  Impala概述.安装与配置.. ...

  2. 大数据分析引擎Apache Flink

    Apache Flink是一个高效.分布式.基于Java实现的通用大数据分析引擎,它具有分布式 MapReduce一类平台的高效性.灵活性和扩展性以及并行数据库查询优化方案,它支持批量和基于流的数据分 ...

  3. Impala:新一代开源大数据分析引擎--转载

    原文地址:http://www.parallellabs.com/2013/08/25/impala-big-data-analytics/ 文 / 耿益锋 陈冠诚 大数据处理是云计算中非常重要的问题 ...

  4. Impala:新一代开源大数据分析引擎

    Impala架构分析 Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据.已有的Hive系统虽然也提供了SQL语 ...

  5. Spark入门,概述,部署,以及学习(Spark是一种快速、通用、可扩展的大数据分析引擎)

    1:Spark的官方网址:http://spark.apache.org/ Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL.Spark Streaming.Graph ...

  6. Esri大数据分析引擎GeoAnalytics Server部署经历

    系统架构 Base WebGIS 4Cores 16GB Spatiotemporal Data Store 32GB SSD Disk 足够大的空间 GA Server 4Cores 16GB 足够 ...

  7. 《基于Apache Kylin构建大数据分析平台》

    Kyligence联合创始人兼CEO,Apache Kylin项目管理委员会主席(PMC Chair)韩卿 武汉市云升科技发展有限公司董事长,<智慧城市-大数据.物联网和云计算之应用>作者 ...

  8. 【转】使用Apache Kylin搭建企业级开源大数据分析平台

    http://www.thebigdata.cn/JieJueFangAn/30143.html 本篇文章整理自史少锋4月23日在『1024大数据技术峰会』上的分享实录:使用Apache Kylin搭 ...

  9. 使用Apache Kylin搭建企业级开源大数据分析平台

    转:http://www.thebigdata.cn/JieJueFangAn/30143.html 我先做一个简单介绍我叫史少锋,我曾经在IBM.eBay做过大数据.云架构的开发,现在是Kylige ...

随机推荐

  1. Linux awk命令常见使用方法介绍

    Linux awk命令常见使用方法介绍 By:授客 QQ:1033553122   awk运行方式有三种,其中常用的为命令行方式 awk [-F  field_separator]  '{patter ...

  2. 最近用到的 sql 统计操作

    统计操作 1.分组统计group by select id,name,count(*) as '总数'  from test1 group by id,name     --group by   分组 ...

  3. winform中容器是如使用的

    1.容器 (1)FlowLayouPanel 普通容器[内部流式布局] (2)Groupbox 带有标题的普通容器[内部普通布局,超出范围隐藏] (3)Panel 普通容器[内部普通布局,超出范围隐藏 ...

  4. 将TXT文件 导入 sqlserver数据库

    情景一:​ 数据库已存在旧表名 old_table,列名old_column_name. 将TXT文件导入数据库已存在旧表old_table中,导入过程中需注意 数据源中列名可全部不修改 或 全部修改 ...

  5. 隐藏linux软件及内核版本

    在登陆linux主机本地(非xshell或crt)前,会显示系统的版本和内核: 那么我们如何隐藏呢?如下: 1.清空版本及内核信息: [root@bqh-01 ~]# cat /etc/issue C ...

  6. 【转】Spring学习---SpringIOC容器的初始化过程

    [原文]https://www.toutiao.com/i6594400249429623304/ SpringIOC容器的初始化过程 简单来说,IoC容器的初始化是由refresh()方法来启动的, ...

  7. C++设计模式 ==> 策略模式与简单工厂模式结合

    简介 策略模式相较之于简单工厂模式适用于生产方法经常变化且方法较为繁多的情况,因为生产方法时常变化就会需要频繁修改工厂类,违背了开闭原则,这时就可以用策略选择类由客户端根据需求动态切换策略.且策略模式 ...

  8. 56_实现类似spring的可配置的AOP框架

    > config.properties  配置文件   key=类名 > BeanFactory  Bean工厂,负责得到bean  getBean("xxx") &g ...

  9. .NET Core 使用 EF 出错的解决方法

    在.NET Core 项目钟(类库),使用Entity Framework,建立模型生成数据库时,失败 Could not load assembly 'xxx'. Ensure it is refe ...

  10. win7 win10双系统开机系统引导

    以win7启动管理器引导作为启动引导 安装一个easybcd 然后里面添加引导选项(添加新条目---->编辑引导菜单(选择倒计时30秒)把use metro bootloader勾去掉就是默认的 ...