Pig安装讲解

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介:

Pig 简介:

     Pig 是 Apache 项目的一个子项目,Pig 提供了一个支持大规模数据分析的平台,Pig 突出的特点就是它的结构经得起大量并行任务的检验,使得它能够处理大规模数据集


Pig  特点:

    Pig 可简化 MapReduce 任务的开发

    Pig 可以看做 Hadoop 的客户端软件,可以连接到 Hadoop 集群进行数据分析工作

    Pig 方便不熟悉 Java 的用户,使用一种较为简便的类似 SQL 的面向数据流的语言 PigLatin 语言进行数据处理    

    PigLatin 可以进行排序,过滤,求和,分组,关联等常用操作,还可以自定义函数,这是面向数据分析处理的轻量级脚本语言

    Pig 可以看做是 PigLatin 到 MapReduce 的映射器

    当Pig在MapReduce模式运行时,它将访问一个Hadoop集群和HDFS的安装位置。这时Pig将自动地对这个集群进行分配和回收


Pig 的数据模式: relation(关系), bag(包), tuple(元组), field(字段,列)

        relation(关系):具有相同字段(列)的 tuple 称为关系

        bag(包):与关系型数据库中的表类似,包含多个 tuple, 

        tuple(元组):相当于关系型数据库中的行,与关系型数据库不同的是,tuple 不要求每一行具有相同的结构

        field(字段,列):与关系型数据库中的列相似,不同的是,field 中可以嵌套表,而关系型 数据库中的列中不可以嵌套表

        



Pig 的安装和配置:

    安装: 解压安装包并添加环境变量即可

            tar -zxvf pig-0.17.0.tar.gz -C ~/app


            vim  ~/.bash_profix

                PIG_HOME= PIG_HOME=/app/pig-0.17.0

                export  PIG_HOME

                PATH=$PIG_HOME/bin:$PATH

                export  PATH

    Pig 有两种运行模式:本地模式: 操作 Linux 文件

                                                        启动方式: pig  -x   local

                                     集群模式: 链接到 HDFS

                                                PIG_CLASSPATH=/app/hadoop-2.7.3/etc/hadoop   

                                                export  PIG_CLASSPATH

                                                        启动命令: pig


Pig 操作 Linux 命令:

         sh  后面跟linux 命令可以直接对 linux 中的文件进行操作

          ls    cd   cat   mkdir    pwd  操作 HDFS

          copyFromLocal    从linux 系统 copy 文件到  HDFS

          copyToLocal        从 HDFS copy 文件到 linux 系统

          register   define        使用 Pig 自定义函数


PigLatin 语句:

        ---> 需要使用 Hadoop 的 HistoryServer

                mr-jobhistory-daemon.sh  start  historyserver

                地址: http://192.168.10.100:19888/jobhistory  

        ---> 常用的 PigLatin 语句

                load                        加载数据到 bag (表) 

                foreach                   相当于循环, 对 bag 每一条数据遍历

                filter                        相当于 where

                group  by                分组

                join                          连接

                generate                  提取列

                union/intersect        集合运算

                输出:dump            直接打印到屏幕上

    ·                      store             输出到 HDFS 上


举例: 7654,MARTIN,SALESMAN,7698,1981/9/28,1250,1400,30

加载员工数据到bag(表)

        emp = load  '/input/table/emp.csv'  using  PigStorage(',')   

                    as   (empno:int, ename:chararray, job:chararray, mgr:int, hiredate:chararray,  sal:int,  comm:int,  deptno:int );

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

        查看表结构: describe   emp;


查询员工信息:员工号, 姓名, 薪水

        SQL语句: select  empno, ename, sal  from   emp ; 

        PL 语句: emp = foreach  emp  generate  empno,  ename,  sal;

                        输出到屏幕上: dump  emp;


查询员工信息,按照月薪排序:

        SQL 语句:select  *  from  emp  order  by  sal ;

        PL 语句:emp = order  emp  by  sal ;


分组:求每个部门工资最高值

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

        PL 语句:需要分两部

                    1.  分组

                        emp_group = group  emp  by  deptno ;

                    2. 求每个部门最大值

                        max_sal = foreach  emp_group  generate  group, MAX(emp.sal)


查询 10 号部门的员工:

        SQL 语句: select  *  from  emp  where  deptno = 10 ;

        PL 语句: deptno_10  = filter  emp  by  deptno==10 ;


多表查询:员工姓名, 部门名称 

        SQL 语句: select  e.ename  d.dname  from  emp  e,  dept  d  where  e.ename=d.dname;

        PL 语句: 分两部实现

            1. 将两个表中的两个字段提取出来放入一张表中

                newtable = join dept by deptno,  emp  by  ename

            2. 遍历提取出来的表,将 员工表的员工姓名, 部门表的部门名称提取出来        

                table = foreach  newtable  generate  dept:: dname,  emp:: ename


集合运算: 关系型数据库 Oracle : 参与集合运算的各个集合必须列数相同且类型一致

        查询 10  号  和 20  号部门的员工

        SQL 语句:  select  *  from emp  where  deptno=10  

                            union  select  *  from emp  where  deptno=20;

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

                        emp20 = filter  dept  by  deptno==20;

                        emp10_20 = union  emp10,  emp20;


使用PL实现WordCount:

① 加载数据 

mydata = load '/data/data.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;

本文转自 tianshuai369 51CTO博客,原文链接: http://blog.51cto.com/songqinglong/2059515
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
4月前
|
SQL 分布式计算 数据处理
|
SQL 分布式计算 算法
|
SQL 分布式计算 Linux
四十一、centos安装pig(Pig的应用)
四十一、centos安装pig(Pig的应用)
四十一、centos安装pig(Pig的应用)
|
分布式计算 Java Hadoop
Hadoop WordCount案例
Hadoop WordCount案例
172 0
Hadoop WordCount案例
|
分布式计算 算法 Java
pig
应用场景 Pig并不适合所有的数据处理任务,和MapReduce一样,它是为数据批处理而设计的,如果想执行的查询只涉及一个大型数据集的一小部分数据,Pig的实现不会很好,因为它要扫描整个数据集或其中很大一部分。
1509 0
|
SQL 关系型数据库 数据挖掘
|
分布式计算 Hadoop
Hadoop入门之WordCount运行详解
原文:http://www.cnblogs.com/xia520pi/archive/2012/05/16/2504205.html 虾皮工作室:赠人玫瑰,手留余香。 http://www.xiapistudio.com/
886 0