详细解读大数据分析引擎Pig&PigLatin语句
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语句的更多相关文章
- 《开源大数据分析引擎Impala实战》目录
当当网图书信息: http://product.dangdang.com/23648533.html <开源大数据分析引擎Impala实战>目录 第1章 Impala概述.安装与配置.. ...
- 大数据分析引擎Apache Flink
Apache Flink是一个高效.分布式.基于Java实现的通用大数据分析引擎,它具有分布式 MapReduce一类平台的高效性.灵活性和扩展性以及并行数据库查询优化方案,它支持批量和基于流的数据分 ...
- Impala:新一代开源大数据分析引擎--转载
原文地址:http://www.parallellabs.com/2013/08/25/impala-big-data-analytics/ 文 / 耿益锋 陈冠诚 大数据处理是云计算中非常重要的问题 ...
- Impala:新一代开源大数据分析引擎
Impala架构分析 Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据.已有的Hive系统虽然也提供了SQL语 ...
- Spark入门,概述,部署,以及学习(Spark是一种快速、通用、可扩展的大数据分析引擎)
1:Spark的官方网址:http://spark.apache.org/ Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL.Spark Streaming.Graph ...
- Esri大数据分析引擎GeoAnalytics Server部署经历
系统架构 Base WebGIS 4Cores 16GB Spatiotemporal Data Store 32GB SSD Disk 足够大的空间 GA Server 4Cores 16GB 足够 ...
- 《基于Apache Kylin构建大数据分析平台》
Kyligence联合创始人兼CEO,Apache Kylin项目管理委员会主席(PMC Chair)韩卿 武汉市云升科技发展有限公司董事长,<智慧城市-大数据.物联网和云计算之应用>作者 ...
- 【转】使用Apache Kylin搭建企业级开源大数据分析平台
http://www.thebigdata.cn/JieJueFangAn/30143.html 本篇文章整理自史少锋4月23日在『1024大数据技术峰会』上的分享实录:使用Apache Kylin搭 ...
- 使用Apache Kylin搭建企业级开源大数据分析平台
转:http://www.thebigdata.cn/JieJueFangAn/30143.html 我先做一个简单介绍我叫史少锋,我曾经在IBM.eBay做过大数据.云架构的开发,现在是Kylige ...
随机推荐
- CentOS7下安装caffe(包括ffmpeg\boost\opencv)
因为有项目想采用深度学习,而caffe是深度学习框架中比较理想的一款,并且跨平台,以及可以采用python/matlab的方式进行调用等优势,所以想在服务器上安装,下面就开始了血泪史... 服务器是阿 ...
- 登录PeopleTools 提示ora-00942表视图不存在 select xxx from sysadm.psoprdefn
起因:本来跟DBA说了把生产的库同步到CFG环境,还跟她说了,dev tst cfg在一台机器上,结果她还是把dev给覆盖了,幸好及时发现,一部分对象被删除了(序列,视图,有可能也有表). 视图和一部 ...
- Wireshark wireshake数据包分割及捕包过滤器介绍
wireshake数据包分割及捕包过滤器介绍 by:授客 QQ:1033553122 wireshake自带工具editcap分割数据包 操作: 进入到目录,然后 editcap.exe -c < ...
- Expo大作战(十二)--expo中的自定义样式Custom font,以及expo中的路由Route&Navigation
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- vm virtualBox下 centos7 Linux系统 与本地 window 系统 网络连接 配置
由于要模拟生产环境开发,所以要在自己的电脑上安装虚拟机,这里做一下记录. centos与本机网络连接 1. 环境 虚拟机 VirtualBox-5.2.0-118431-Win Linux镜像 Cen ...
- She Left Her Shoes
She left her shoes, she took everything else, her toothbrush, her clothes, and even that stupid litt ...
- iis 发布asp.net mvc 网站时候js css 压缩问题,图片不加载问题
一.JS CSS 自动压缩问题 默认情况下mvc这个框架会把css,js文件压缩成一个js或者css文件,一会发现只有一个<link href="/Content/css?v=ji3n ...
- 如何监视 Azure 中的虚拟机
通过收集.查看和分析诊断与日志数据,可以利用很多机会来监视 VM. 若要执行简单的 VM 监视,可以在 Azure 门户中使用 VM 的“概述”屏幕. 可以使用扩展在 VM 上配置诊断以收集更多指标数 ...
- Java高并发编程(四)
一.Executor执行器 1.Executor接口,java线程池框架中的顶层接口,提供一个execute方法来执行任务 import java.util.concurrent.Executor; ...
- mysql InnoDB引擎索引超过长度限制
组合索引长度之和大于 767 bytes并无影响,当有某个字段定义长度大于 767 bytes(1000*3)时,仅产生告警,但不影响创建,超长字段会取前 255 字符作为前缀索引,并且组合索引中字段 ...