hadoop使用(六)


第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/ 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM