介紹pig,一個不得不說的hadoop的擴展。
Pig是一個基于Hadoop的大規(guī)模數(shù)據(jù)分析平臺,它提供的SQL-LIKE語言叫Pig Latin,該語言的編譯器會把類SQL的數(shù)據(jù)分析請求轉(zhuǎn)換為一系列經(jīng)過優(yōu)化處理的MapReduce運算。Pig為復雜的海量數(shù)據(jù)并行計算提供了一個簡單的操作和編程接口。
1、專注于于大量數(shù)據(jù)集分析(ad-hoc analysis , ad-hoc 代表:a solution that has been custom designed for a specific problem );
2、運行在集群的計算架構(gòu)上,Yahoo Pig 提供了多層抽象,簡化并行計算讓普通用戶使用;這些抽象完成自動把用戶請求queries翻譯成有效的并行評估計劃,然后在物理集群上執(zhí)行這些計劃;
3、提供類似 SQL 的操作語法;
4、開放源代碼;
1、yahoo
2、twitter
對于開發(fā)人員,直接使用Java APIs可能是乏味或容易出錯的,同時也限制了Java程序員在Hadoop上編程的運用靈活性。于是Hadoop提供了兩個解決方案,使得Hadoop編程變得更加容易。
·Pig是一種編程語言,它簡化了Hadoop常見的工作任務。Pig可加載數(shù)據(jù)、表達轉(zhuǎn)換數(shù)據(jù)以及存儲最終結(jié)果。Pig內(nèi)置的操作使得半結(jié)構(gòu)化數(shù)據(jù)變得有意義(如日志文件)。同時Pig可擴展使用Java中添加的自定義數(shù)據(jù)類型并支持數(shù)據(jù)轉(zhuǎn)換。
·Hive在Hadoop中扮演數(shù)據(jù)倉庫的角色。Hive添加數(shù)據(jù)的結(jié)構(gòu)在HDFS(hive superimposesstructure on data in HDFS),并允許使用類似于SQL語法進行數(shù)據(jù)查詢。與Pig一樣,Hive的核心功能是可擴展的。
Pig和Hive總是令人困惑的。Hive更適合于數(shù)據(jù)倉庫的任務,Hive主要用于靜態(tài)的結(jié)構(gòu)以及需要經(jīng)常分析的工作。Hive與SQL相似促使 其成為Hadoop與其他BI工具結(jié)合的理想交集。Pig賦予開發(fā)人員在大數(shù)據(jù)集領域更多的靈活性,并允許開發(fā)簡潔的腳本用于轉(zhuǎn)換數(shù)據(jù)流以便嵌入到較大的應用程序。Pig相比Hive相對輕量,它主要的優(yōu)勢是相比于直接使用HadoopJava APIs可大幅削減代碼量。正因為如此,Pig仍然是吸引大量的軟件開發(fā)人員。
下載pig的最新版本:
http://www.apache.org/dyn/closer.cgi/pig
我下載的是pig-0.10.0.tar.gz
解壓縮
tar zxvf pig-0.10.0.tar.gz
進入目錄
cd pig-0.10.0
注意,pig是hadoop的工具,所以不需要修改原h(huán)adoop的配置。
將pig加入到環(huán)境變量中:
輸入
cd ~
進入到用戶主目錄
vi .bashrc
最下邊加入環(huán)境變量的配置
保存然后執(zhí)行
. .bashrc
輸入 pig -help進行測試,如果設置成功,則出現(xiàn)如下界面
如果想獲取pig的源碼,可以使用svn下載
http://svn.apache.org/repos/asf/pig/trunk
進入目錄$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
有可能出現(xiàn)下面的錯誤
Cannot findhadoop configurations in classpath (neither hadoop-site.xml nor core-site.xmlwas found in the classpath).
需要配置~/.bashrc或者/etc/profile,建議配置.bashrc文件,加入
exportHADOOP_HOME=/home/hadoop/hadoop-1.0.3
exportPIG_CLASSPATH=$HADOOP_HOME/conf
配置完成后可正常進入
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
到安裝目錄下找到/tutorial/data/excite-sall.log文件,數(shù)據(jù)分為3列,按制表符分隔,第一列為用戶ID,第二列為Unix時間戳,第三列為查詢記錄。
輸入如下語句:
grunt> log =LOAD 'tutorial/data/excite-small.log' AS (user,time,query);
將數(shù)據(jù)裝載到一個稱為log的別名中。
查詢返回4個元組并顯示:
grunt> lmt =LIMIT log 4;
grunt> DUMPlmt;
得到結(jié)果:
PIG中的讀寫操作:
LOAD
從文件裝載數(shù)據(jù)到一個關系
LIMIT
限制元組個數(shù)為n
DUMP
顯示一個關系的內(nèi)容,主要用于調(diào)試
STORE
將一個關系中的數(shù)據(jù)存儲到一個目錄中
輸入執(zhí)行:
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> STOREcntd INTO 'output';
用于統(tǒng)計每個用戶查詢發(fā)起的個數(shù)
使用grunt> DESCRIBE log;
查看schema
log: {user:chararray,time: long,query: chararray}
pig中的診斷運算符:
DESCRIBE alias;
顯示一個關系的schema
EXPLAIN
顯示用于計算一個關系的執(zhí)行計劃
ILLUSTRATE alias
逐步顯示數(shù)據(jù)如何被轉(zhuǎn)換
AVG
求平均值
CONCAT
連接兩個字符串
COUNT
計算一個包中的元組個數(shù)
DIFF
比較一個元組中的兩個字段
MAX
計算在一個單列包中的最大值
MIN
計算在一個單列包中的最小值
SIZE
計算元素的個數(shù)
SUM
計算在一個單列包中的數(shù)值的總和
IsEmpty
檢查一個包是否為空
更多的相關的使用與配置已整理到
http://code.google.com/p/mycloub/
聯(lián)系客服