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. 【代码笔记】iOS-动画的跳转

    一,工程图. 二,代码. //点击任何处跳转到页面 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { CATransi ...

  2. centos安装lamp

    http://bbs.qcloud.com/thread-1316-1-1.html 启动MySQL http://www.cnblogs.com/starof/p/4680083.html 修改密码 ...

  3. 纯小白入手 vue3.0 CLI - 2.6 - 组件的复用

    vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 我的 github 地址 - vue3.0St ...

  4. BootStrap学习之栅格布局

    Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的改变,系统会自动分为最多12列.它包含了易于使用的预定义类,还有强大的mixin用于生成更具语 ...

  5. springboot 1.3.5升级1.5.9后 默认使用tomcat 8.5版本 get请求报400 异常信息为 The valid characters are defined in RFC 7230 and RFC 3986

    1.springboot 1.3.5升级1.5.9后 默认使用tomcat 8.5版本而之前用的是tomcat7    get请求报400 异常信息为 The valid characters are ...

  6. 5,注释、分支结构、循环结构、伪“选择结构”

    注释: python使用#作为行注释符,使用三引号作为多行注释符 分支结构: if-else: a=int(input("你的成绩是:")) if a>60: print(& ...

  7. RecyclerView使用技巧(item动画及嵌套高度适配解决方案)

    原文地址 · Frank-Zhu  http://frank-zhu.github.io/android/2015/02/26/android-recyclerview-part-3/?utm_sou ...

  8. Coursera-AndrewNg(吴恩达)机器学习笔记——第四周编程作业(多分类与神经网络)

    多分类问题——识别手写体数字0-9 一.逻辑回归解决多分类问题 1.图片像素为20*20,X的属性数目为400,输出层神经元个数为10,分别代表1-10(把0映射为10). 通过以下代码先形式化展示数 ...

  9. qt designer启动后不显示界面问题的原因与解决办法

    Qt 5.6.1无论是在vs里双击ui文件还是直接启动designer.exe都一直无法显示界面,但任务管理器中可以看到该进程是存在的.前几天还正常的,但昨天加了一块NVIDIA的显卡(机器自带核显) ...

  10. 通过sqli-labs学习sql注入——基础挑战之less1-3

    首先,先看一些基础知识吧!!!!本人只是初学者,记录一下自己的学习过程,有什么错误之处请指出,谢谢!大佬请绕过!!!! url编码:一般的url编码其实就是那个字符的ASCII值得十六进制,再在前面加 ...