1. 程式人生 > >Pig安裝講解

Pig安裝講解

添加 zxvf union white oca mapreduce 軟件 位置 嵌套表

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;


Pig安裝講解