溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Pig安裝講解

發(fā)布時(shí)間:2020-07-04 17:33:32 來源:網(wǎng)絡(luò) 閱讀:1478 作者:菜鳥的征程 欄目:大數(shù)據(jù)

Pig 簡介:

     Pig 是 Apache 項(xiàng)目的一個(gè)子項(xiàng)目,Pig 提供了一個(gè)支持大規(guī)模數(shù)據(jù)分析的平臺(tái),Pig 突出的特點(diǎn)就是它的結(jié)構(gòu)經(jīng)得起大量并行任務(wù)的檢驗(yàn),使得它能夠處理大規(guī)模數(shù)據(jù)集


Pig  特點(diǎn):

    Pig 可簡化 MapReduce 任務(wù)的開發(fā)

    Pig 可以看做 Hadoop 的客戶端軟件,可以連接到 Hadoop 集群進(jìn)行數(shù)據(jù)分析工作

    Pig 方便不熟悉 Java 的用戶,使用一種較為簡便的類似 SQL 的面向數(shù)據(jù)流的語言 PigLatin 語言進(jìn)行數(shù)據(jù)處理    

    PigLatin 可以進(jìn)行排序,過濾,求和,分組,關(guān)聯(lián)等常用操作,還可以自定義函數(shù),這是面向數(shù)據(jù)分析處理的輕量級(jí)腳本語言

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

    當(dāng)Pig在MapReduce模式運(yùn)行時(shí),它將訪問一個(gè)Hadoop集群和HDFS的安裝位置。這時(shí)Pig將自動(dòng)地對(duì)這個(gè)集群進(jìn)行分配和回收


Pig 的數(shù)據(jù)模式: relation(關(guān)系), bag(包), tuple(元組), field(字段,列)

        relation(關(guān)系):具有相同字段(列)的 tuple 稱為關(guān)系

        bag(包):與關(guān)系型數(shù)據(jù)庫中的表類似,包含多個(gè) tuple, 

        tuple(元組):相當(dāng)于關(guān)系型數(shù)據(jù)庫中的行,與關(guān)系型數(shù)據(jù)庫不同的是,tuple 不要求每一行具有相同的結(jié)構(gòu)

        field(字段,列):與關(guān)系型數(shù)據(jù)庫中的列相似,不同的是,field 中可以嵌套表,而關(guān)系型 數(shù)據(jù)庫中的列中不可以嵌套表

        



Pig 的安裝和配置:

    安裝: 解壓安裝包并添加環(huán)境變量即可

            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 有兩種運(yùn)行模式:本地模式: 操作 Linux 文件

                                                        啟動(dòng)方式: pig  -x   local

                                     集群模式: 鏈接到 HDFS

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

                                                export  PIG_CLASSPATH

                                                        啟動(dòng)命令: pig


Pig 操作 Linux 命令:

         sh  后面跟linux 命令可以直接對(duì) linux 中的文件進(jìn)行操作

          ls    cd   cat   mkdir    pwd  操作 HDFS

          copyFromLocal    從linux 系統(tǒng) copy 文件到  HDFS

          copyToLocal        從 HDFS copy 文件到 linux 系統(tǒng)

          register   define        使用 Pig 自定義函數(shù)


PigLatin 語句:

        ---> 需要使用 Hadoop 的 HistoryServer

                mr-jobhistory-daemon.sh  start  historyserver

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

        ---> 常用的 PigLatin 語句

                load                        加載數(shù)據(jù)到 bag (表) 

                foreach                   相當(dāng)于循環(huán), 對(duì) bag 每一條數(shù)據(jù)遍歷

                filter                        相當(dāng)于 where

                group  by                分組

                join                          連接

                generate                  提取列

                union/intersect        集合運(yùn)算

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

    ·                      store             輸出到 HDFS 上


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

加載員工數(shù)據(jù)到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);

        查看表結(jié)構(gòu): describe   emp;


查詢員工信息:員工號(hào), 姓名, 薪水

        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 ;


分組:求每個(gè)部門工資最高值

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

        PL 語句:需要分兩部

                    1.  分組

                        emp_group = group  emp  by  deptno ;

                    2. 求每個(gè)部門最大值

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


查詢 10 號(hào)部門的員工:

        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 語句: 分兩部實(shí)現(xiàn)

            1. 將兩個(gè)表中的兩個(gè)字段提取出來放入一張表中

                newtable = join dept by deptno,  emp  by  ename

            2. 遍歷提取出來的表,將 員工表的員工姓名, 部門表的部門名稱提取出來        

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


集合運(yùn)算: 關(guān)系型數(shù)據(jù)庫 Oracle : 參與集合運(yùn)算的各個(gè)集合必須列數(shù)相同且類型一致

        查詢 10  號(hào)  和 20  號(hào)部門的員工

        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實(shí)現(xiàn)WordCount:

① 加載數(shù)據(jù) 

mydata = load '/data/data.txt' as (line:chararray);


② 將字符串分割成單詞 

words = foreach mydata generate flatten(TOKENIZE(line)) as word;


③ 對(duì)單詞進(jìn)行分組 

grpd = group words by word; 


④ 統(tǒng)計(jì)每組中單詞數(shù)量 

cntd = foreach grpd generate group,COUNT(words); 


⑤ 打印結(jié)果 

dump cntd;


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI