初學pig的筆記

2021-08-19 19:40:32 字數 4901 閱讀 3380

資料分析引擎:pig

---------------------------------

一、什麼是pig?安裝和配置

1、最早由yahoo開發,後來給apache

2、支援語句piglatin語句,類似sql

3、翻譯器:piglatin語句 ----> mapreduce

spark(從0.17開始支援)

4、安裝和配置

tar -zxvf pig-0.17.0.tar.gz -c ~/training/

設定環境變數

pig_home=/root/training/pig-0.17.0

export pig_home

path=$pig_home/bin:$path

export path

5、兩種模式

(1)本地模式:操作的是linux的檔案

pig -x local

日誌: connecting to hadoop file system at: file:///

(2)集群模式:鏈結到hdfs上

設定乙個環境變數: pig_classpath  ----> hadoop的配置檔案所在的目錄

pig_classpath=$hadoop_home/etc/hadoop

export pig_classpath

pig日誌:connecting to hadoop file system at: hdfs://bigdata111:9000

二、pig的常用命令:操作hdfs

ls、cd、cat、mkdir、pwd

sh: 呼叫作業系統的命令

register、define -----> 部署pig的自定義函式的jar包

三、pig的資料模型(重要) ----> 表結構

tuple: 行  pig

apache storm是實時計算引擎

四、使用piglatin語句分析資料

1、需要啟動yarn的historyserver:記錄所有執行過的任務

2、常見的piglatin語句(注意:piglatin語句跟spark中運算元/方法非常像)

(*)load

載入資料到表(bag)

(*)foreach   相當於迴圈,對bag中每乙個行tuple進行處理

(*)f

ilter    過濾、相當於where

(*)group by  分組

(*)order by  排序

(*)join      鏈結

(*)generate  提取列

(*)union、intersect  集合運算

(*)輸出:dump  螢幕

store  儲存到檔案

注意:piglatin有些會觸發計算,有些不會

類似spark rdd 運算元(方法):transformation方法(運算元) -----> 不會觸發計算

action方法(運算元) ------> 會觸發spark的計算

3、使用piglatin語句

7499,allen,salesman,7698,1981/2/20,1600,300,30

(1)建立員工表  emp

emp = load '/scott/emp.csv';

檢視表結構

describe emp;

schema for emp unknown

(2)建立表,指定schema(結構)

emp = load '/scott/emp.csv' as(empno,ename,job,mgr,hiredate,sal,comm,deptno);

預設的列的型別:bytearray

預設的分隔符:製表符

最終版:

emp = load '/scott/emp.csv' using pigstorage(',') as(empno:int,ename:chararray,job:chararray,mgr:int,hiredate:chararray,sal:int,comm:int,deptno:int);

再建立部門表

10,accounting,new york

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

(3)查詢員工資訊:員工號 姓名 薪水

sql:  select empno,ename,sal from emp;

pl:   e*** = foreach emp generate empno,ename,sal;    ----> 不會觸發計算

dump e***;

(4)查詢員工資訊,按照月薪排序

sql:  select * from emp order by sal;

pl:   emp4 = order emp by sal;

dump emp4;

(5)分組:求每個部門的最高工資: 部門號  部門的最高工資

sql:  select deptno,max(sal) from emp group by deptno;

pl:   第一步:先分組

emp51 = group emp by deptno;

檢視emp51的表結構

emp51: }

dump emp51;

資料group         emp

(10,)

(20,)

(30,)

第二步:求每個組(每個部門)工資的最大值

注意:max大寫

emp52 = foreach emp51 generate group,max(emp.sal)

(6)查詢10號部門的員工

sql:  select * from emp where deptno=10;

pl:   emp6 = filter emp by deptno==10;   注意:兩個等號

(7)多表查詢:部門名稱、員工姓名

sql:  select d.dname,e.ename from emp e,dept d where e.deptno=d.deptno;

pl:   emp71 = join dept by deptno,emp by deptno;

emp72 = foreach emp71 generate dept::dname,emp::ename;

(8)集合運算:

查詢10和20號部門的員工資訊

sql:   select * from emp where deptno=10

union

select * from emp where deptno=20;

注意:oracle中,是否任意的集合都可以參與集合運算?

參與集合運算的各個集合,必須列數相同、且型別一致

select deptno,job,sum(sal) from emp group by deptno,job

union 

select deptno,to_char(null),sum(sal) from emp group by deptno

union

select to_number(null),to_char(null),sum(sal) from emp;

pl:  emp10 = filter emp by deptno==10;

emp20 = filter emp by deptno==20;

emp1020 = union emp10,emp20;

(9)執行wordcount

① 載入資料 

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

注意:後面的操作依賴前面的操作,類似spark的rdd(依賴關係)

五、pig的自定義函式:3種  ---> 打成jar包

依賴的jar

/root/training/pig-0.14.0/pig-0.14.0-core-h2.jar

/root/training/pig-0.14.0/lib

/root/training/pig-0.14.0/lib/h2

/root/training/hadoop-2.4.1/share/hadoop/common

/root/training/hadoop-2.4.1/share/hadoop/common/lib

1、自定義的運算函式: 根據員工的薪水,判斷薪水的級別

2、自定義的過濾函式: 查詢薪水大於2000的員工

emp11 = filter emp by pig.issalaryto0high(sal);dump emp11;(執行)

3、自定義的載入函式(最麻煩)

還需要mr的jar包

註冊jar包

register /root/temp/pigfunc.jar

(define 建立別名

define myloadfunc pig.myloadfunction;)

mydemo = load '/input/data.txt' using pig.myloadfunction();(執行)

dump mydemo;

Pig語言的學習

pig 是基於hadoop並行資料流語言 pig 輸入輸出 第一步 載入load 最後執行完資料流之後可以可以 store 儲存 或 dump輸出到螢幕 pig 關係操作 foreach 對於每一條記錄,可以選擇相應的字段,傳給下乙個操作符 相當於sql中選擇需要的列,可以進行count和sum操作...

總結 Pig的安裝部署

tar zxvf pig 0.17.0.tar.gz c 2 建立軟鏈結 ln s pig 0.17.0 pigvi bashrc在檔案末尾加上這兩行 export pig home home 使用者名稱 pig 0.17.0 export path pig home bin path 1 本地模式...

初學MongoDB的筆記

建立資料庫名字 use name 檢視建立的資料庫 show dbs 剛建立的資料庫,直接檢視,並不會檢查到。需要像資料庫新增檔案 插入檔案到新建的資料庫 db.name.insert 再次使用show dbs 就可以查詢到剛建立的新的資料庫了。刪除資料庫,使用use name 進入使用 db dr...