Pig安装讲解-创新互联

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;

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页名称:Pig安装讲解-创新互联
本文网址:http://pwwzsj.com/article/cegsjc.html