1.Pig安裝web
目前最新穩定版爲pig-0.12.1,下載解壓到/opt/tools/目錄下。
shell
因爲pig是基於hadoop的上層應用,因此須要先部署好hadoop集羣。對於hadoop-0.23.0以上的版本,pig雖然也已經支持,可是須要從新編譯pig,否則執行dump命令時會報錯顯示版本不兼容。數據庫
從新編譯pig也很簡單,只需一條命令便可,在$pig_home/目錄下,即/opt/tools/pig-0.12.1/ 下輸入:apache
ant -Dhadoopversion=23
若提示ant命令沒法找到,直接去apache官網下載ant,解壓到/opt/tools/apache-ant-1.9.3vim
cd到pig目錄,執行oop
/opt/tools/apache-ant-1.9.3/bin/ant -Dhadoopversion=23
編譯可能會好久,可是慢慢等吧,最後顯示successful就表示ok了,而後重命名文件學習
mv pig.jar pig-0.12.1.jar mv pig-withouthadoop.jar pig-0.12.1-withouthadoop.jar
接下來配置環境變量 vim /etc/profile
spa
export PIG_HOME=/opt/tools/pig-0.12.1 export PIG_CLASSPATH=$HADOOP_HOME/etc/hadoop export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$PIG_HOME/bin:$PATH
保存退出,執行下列命令使之生效
命令行
source /etc/profile
2.Pig學習概要調試
2.1 執行方式
交互式shell(命令行) |
腳本文件(建議以.pig做爲擴展名) | |
本地模式 |
pig -x local |
pig -x local log.pig |
Mapreduce模式 |
pig -x mapreduce (或 pig) |
pig -x mapreduce log.pig(或 pig log.pig) |
2.2 執行Pig Latin的通常操做以下:
LOAD : 從文件系統hdfs讀取數據
一系列聲明(如GROUP,FOREACH,FILTER等)進行數據操做
最後DUMP打印輸入結果或者STORE存儲數據到hdfs
2.3 調試Pig Latin
DUMP (or \d):輸出結果到終端
DESCRIBE (or \de):查看一個關係的結構
EXPLAIN (or \e):查看一個關係的邏輯結構,物理機構和map reduce執行計劃
ILLUSTRATE (or \i):查看聲明語句的每一步執行狀況
2.4 大小寫問題
字段名,關係名,和方法名,如PigStorage,COUNT等,是大小寫敏感的。
關鍵字,如LOAD,USING,AS,GROUP,BY,FOREACH,GENERATE,DUMP,STORE等不區分大小寫
2.5 數據類型
Complex Types:
關係(relations):一個關係就是一個包,確切的說是一個外包(outer bag),例如A。至關於數據庫中的表。
A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int, gpa:float); DUMP A; (John,18,4.0F) (Mary,19,3.8F) (Bill,20,3.9F) (Joe,18,3.8F)
包(bags):一個包是一系列元祖的集合
外包:
B = LOAD 'data' as (f1:int, f2:int, f3;int); DUMP B; (1,2,3) (4,2,1) (8,3,4) (4,3,3)
內包:
X = GROUP C BY f1; DUMP X; (1,{(1,2,3)}) (4,{(4,2,1),(4,3,3)}) (8,{(8,3,4)})
元祖(tuples):一個元祖是一系列有序字段的集合
(John,18,4.0F)
映射(map):映射是一系列鍵值對的集合
[name#John,phone#5551212]
字段(fields):一個字段就是一個數據
字段能夠經過名字或者位置來肯定,如上面例子A,第一列name能夠用$0表示,第二例age能夠用$1表示。
Simple Types:
int:32bit,如10
long:64bit,如10l或10L
float:32bit,如10.5F
double:64bit,如10.5
chararray:UTF-8格式,如hello world
bytearray:Byte array (blob)
boolean:true/false(or TRUE/FALSE)
datetime:1970-01-01T00:00:00.000+00:00
biginteger:200000000000
bigdecimal:33.456783321323441233442
2.6 Pig Latin中的Nulls
本文將持續更新!!!