第1章 引言
1.1 編寫目的
介紹pig,一個不得不說的hadoop的擴展。
1.2 什么是pig
Pig是一個基於Hadoop的大規模數據分析平台,它提供的SQL-LIKE語言叫Pig Latin,該語言的編譯器會把類SQL的數據分析請求轉換為一系列經過優化處理的MapReduce運算。Pig為復雜的海量數據並行計算提供了一個簡單的操作和編程接口。
1.3 pig的特點
1、專注於於大量數據集分析(ad-hoc analysis , ad-hoc 代表:a solution that has been custom designed for a specific problem );
2、運行在集群的計算架構上,Yahoo Pig 提供了多層抽象,簡化並行計算讓普通用戶使用;這些抽象完成自動把用戶請求queries翻譯成有效的並行評估計划,然后在物理集群上執行這些計划;
3、提供類似 SQL 的操作語法;
4、開放源代碼;
1.4 pig的主要用戶
1、yahoo
2、twitter
1.5 關於pig和hive
對於開發人員,直接使用Java APIs可能是乏味或容易出錯的,同時也限制了Java程序員在Hadoop上編程的運用靈活性。於是Hadoop提供了兩個解決方案,使得Hadoop編程變得更加容易。
•Pig是一種編程語言,它簡化了Hadoop常見的工作任務。Pig可加載數據、表達轉換數據以及存儲最終結果。Pig內置的操作使得半結構化數據變得有意義(如日志文件)。同時Pig可擴展使用Java中添加的自定義數據類型並支持數據轉換。
•Hive在Hadoop中扮演數據倉庫的角色。Hive添加數據的結構在HDFS(hive superimposes structure on data in HDFS),並允許使用類似於SQL語法進行數據查詢。與Pig一樣,Hive的核心功能是可擴展的。
Pig和Hive總是令人困惑的。Hive更適合於數據倉庫的任務,Hive主要用於靜態的結構以及需要經常分析的工作。Hive與SQL相似促使 其成為Hadoop與其他BI工具結合的理想交集。Pig賦予開發人員在大數據集領域更多的靈活性,並允許開發簡潔的腳本用於轉換數據流以便嵌入到較大的 應用程序。Pig相比Hive相對輕量,它主要的優勢是相比於直接使用Hadoop Java APIs可大幅削減代碼量。正因為如此,Pig仍然是吸引大量的軟件開發人員。
第2章 安裝pig
2.1 下載pig
下載pig的最新版本:
http://www.apache.org/dyn/closer.cgi/pig
我下載的是pig-0.10.0.tar.gz
2.2 安裝pig
解壓縮
tar zxvf pig-0.10.0.tar.gz
進入目錄
cd pig-0.10.0
注意,pig是hadoop的工具,所以不需要修改原hadoop的配置。
將pig加入到環境變量中:
輸入
cd ~
進入到用戶主目錄
vi .bashrc
最下邊加入環境變量的配置
保存然后執行
. .bashrc
輸入 pig -help進行測試,如果設置成功,則出現如下界面
如果想獲取pig的源碼,可以使用svn下載
http://svn.apache.org/repos/asf/pig/trunk
2.3 配置hadoop
進入目錄$PIG_HOME/conf
修改配置文件,在pig.properties中加入
fs.default.name=hdfs://localhost:9000
mapred.job.tracker=localhost:9001
指向本地偽分布式的hdfs和mapreduce
在本地運行pig
pig -x local
得到如下界面
和hadoop一起運行
直接輸入pig或者pig -x mapreduce
有可能出現下面的錯誤
Cannot find hadoop configurations in classpath (neither hadoop-site.xml nor core-site.xml was found in the classpath).
需要配置~/.bashrc或者/etc/profile,建議配置.bashrc文件,加入
export HADOOP_HOME=/home/hadoop/hadoop-1.0.3
export PIG_CLASSPATH=$HADOOP_HOME/conf
配置完成后可正常進入
第3章 grunt shell
3.1 基本命令
Quit 退出grunt
kill hadoopID 終止正在運行的hadoop進程
set debug on 打開debug級別
使用命令包括:
help,quit,kill jobid,set debug [on|off],set job.name ‘jobname’
文件命令包括:
cat,cd,copyFromLocal,copyToLocal,cp,ls,mkdir,mv,pwd,rm,rmf,exec,run
3.2 查詢測試
到安裝目錄下找到/tutorial/data/excite-sall.log文件,數據分為3列,按制表符分隔,第一列為用戶ID,第二列為Unix時間戳,第三列為查詢記錄。
輸入如下語句:
grunt> log = LOAD 'tutorial/data/excite-small.log' AS (user,time,query);
將數據裝載到一個稱為log的別名中。
查詢返回4個元組並顯示:
grunt> lmt = LIMIT log 4;
grunt> DUMP lmt;
得到結果:
PIG中的讀寫操作:
LOAD
從文件裝載數據到一個關系
LIMIT
限制元組個數為n
DUMP
顯示一個關系的內容,主要用於調試
STORE
將一個關系中的數據存儲到一個目錄中
輸入執行:
grunt> log = LOAD '/home/lgstar888/hadoop/pig-0.10.0/tutorial/data/excite-small.log' AS (user:chararray,time:long,query:chararray);
grunt> grpd = GROUP log BY user;
grunt> cntd = FOREACH grpd GENERATE group,COUNT(log);
grunt> STORE cntd INTO 'output';
用於統計每個用戶查詢發起的個數
使用grunt> DESCRIBE log;
查看schema
log: {user: chararray,time: long,query: chararray}
pig中的診斷運算符:
DESCRIBE alias;
顯示一個關系的schema
EXPLAIN
顯示用於計算一個關系的執行計划
ILLUSTRATE alias
逐步顯示數據如何被轉換
AVG
求平均值
CONCAT
連接兩個字符串
COUNT
計算一個包中的元組個數
DIFF
比較一個元組中的兩個字段
MAX
計算在一個單列包中的最大值
MIN
計算在一個單列包中的最小值
SIZE
計算元素的個數
SUM
計算在一個單列包中的數值的總和
IsEmpty
檢查一個包是否為空
更多的相關的使用與配置已整理到
http://code.google.com/p/mycloub/