详细解读大数据分析引擎Pig&PigLatin语句

详细解读大数据分析引擎Pig&PigLatin语句

Pigsql

1、Pig的介绍:shell

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

详细解读大数据分析引擎Pig&PigLatin语句

2、Pig与Hive的相同与区别:工具

相同:oop

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

二、Hive和Pig都简化了MapReduce程序的开发。人工智能

不一样:命令行

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

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

三、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语句注意事项:等号先后要有空格)

四、Hive保存元信息,所以数据模型不用重建,而Pig不保存元信息,所以数据模型须要重建。

五、因为PigLatin语句是脚本语言,所以Hive执行速度比Pig更快。

六、 因为Hive的数据模型是表结构,所以Hive是先建立表,后加载数据,而Pig的数据模型是包结构,Pig在加载数据的同时建立包。

举例:建立一份员工表

sql语句:

一、建立表:

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 ',';

二、加载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);

3、Hive数据模型和Pig数据模型的差异:

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

二、表中每一行的列彻底相同,包中每一行的列能够不相同,能够动态增长。

4、Pig的安装和配置:

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

二、配置PIG_HOME环境变量:

export PIG_HOME=/root/training/pig-0.17.0

export PATH=$PIG_HOME/bin:$PATH

5、Pig的安装模式:

一、本地模式:访问本地主机,pig至关于本地的客户端。

二、集群模式:访问Hadoop集群,pig至关于Hadoop的客户端。

注:一、集群模式须要配置PIG_CLASSPATH环境变量,用于链接到Hadoop上:

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

二、启动pig的集群模式前,须要先启动historyserver,由于pig在hadoop上执行任务后须要与historyserver通讯,解析执行日志肯定任务执行是否成功:

mr-jobhistory-daemon.sh start historyserver

6、Pig的经常使用命令:操做HDFS

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

7、操做Pig:

一、命令行:pig提供了一个shell终端与用户进行交互,用户能够进行增删改查操做。

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

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

(pig没有API能够操做)

8、经常使用的PigLatin语句:

load:加载数据

foreach:逐行扫描

generate:提取列

filter:过滤

distinct:去重

order by:排序

group by:分组

join:多表查询

union:联合查询

dump:把结果输出到屏幕上

store:把结果保存到HDFS上

9、使用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;

查看十、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';

详细解读大数据分析引擎Pig&PigLatin语句

经常使用的大数据工具

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

相关文章
相关标签/搜索