1. 程式人生 > >Hadoop學習筆記—16.Pig框架學習

Hadoop學習筆記—16.Pig框架學習

rar 開發人員 ava 大型 arr 壓縮包 上網 結構化數據 模式

一、關於Pig:別以為豬不能幹活

1.1 Pig的簡介

技術分享技術分享

  Pig是一個基於Hadoop的大規模數據分析平臺,它提供的SQL-LIKE語言叫Pig Latin,該語言的編譯器會把類SQL的數據分析請求轉換為一系列經過優化處理的MapReduce運算。Pig為復雜的海量數據並行計算提供了一個簡單的操作和編程接口。

Compare:相比Java的MapReduce API,Pig為大型數據集的處理提供了更高層次的抽象,與MapReduce相比,Pig提供了更豐富的數據結構,一般都是多值和嵌套的數據結構。Pig還提供了一套更強大的數據變換操作,包括在MapReduce中被忽視的連接Join操作。

  Pig包括兩部分:

  • 用於描述數據流的語言,稱為Pig Latin。
  • 用於執行Pig Latin程序的執行環境,當前有兩個環境:單JVM中的本地執行環境和Hadoop集群上的分布式執行環境。

  Pig內部,每個操作或變換是對輸入進行數據處理,然後產生輸出結果,這些變換操作被轉換成一系列MapReduce作業,Pig讓程序員不需要知道這些轉換具體是如何進行的,這樣工程師可以將精力集中在數據上,而非執行的細節上。

1.2 Pig的特點

  (1)專註於於大量數據集分析;
(2)運行在集群的計算架構上,Yahoo Pig 提供了多層抽象,簡化並行計算讓普通用戶使用;這些抽象完成自動把用戶請求queries翻譯成有效的並行評估計劃,然後在物理集群上執行這些計劃;
(3)提供類似 SQL 的操作語法;
(4)開放源代碼;

1.3 Pig與Hive的區別

  對於開發人員,直接使用Java APIs可能是乏味或容易出錯的,同時也限制了Java程序員在Hadoop上編程的運用靈活性。於是Hadoop提供了兩個解決方案,使得Hadoop編程變得更加容易。

  ?Pig是一種編程語言,它簡化了Hadoop常見的工作任務。Pig可加載數據、表達轉換數據以及存儲最終結果。Pig內置的操作使得半結構化數據變得有意義(如日誌文件)。同時Pig可擴展使用Java中添加的自定義數據類型並支持數據轉換。

  ?Hive在Hadoop中扮演數據倉庫的角色。Hive添加數據的結構在HDFS,並允許使用類似於SQL語法進行數據查詢。與Pig一樣,Hive的核心功能是可擴展的。

  Pig和Hive總是令人困惑的。Hive更適合於數據倉庫的任務,Hive主要用於靜態的結構以及需要經常分析的工作。Hive與SQL相似促使 其成為Hadoop與其他BI工具結合的理想交集。Pig賦予開發人員在大數據集領域更多的靈活性,並允許開發簡潔的腳本用於轉換數據流以便嵌入到較大的應用程序。Pig相比Hive相對輕量,它主要的優勢是相比於直接使用Hadoop Java APIs可大幅削減代碼量。正因為如此,Pig仍然是吸引大量的軟件開發人員。

二、Pig的安裝配置

2.1 準備工作

  下載pig的壓縮包,這裏使用的是pig-0.11.1版本,已經上傳至了百度網盤中(URL:http://pan.baidu.com/s/1o6IDfhK)

  (1)通過FTP工具上傳到虛擬機中,可以選擇XFtp、CuteFTP等工具

  (2)解壓縮

tar -zvxf pig-0.11.1.tar.gz

  (3)重命名

mv pig-0.11.1 pig

  (4)修改/etc/profile,增加內容如下,最後重新生效配置文件source /etc/profile

export PIG_HOME=/usr/local/pig

export PATH=.:$HADOOP_HOME/bin:$PIG_HOME/bin:$HBASE_HOME/bin:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH

2.2 設置Pig與Hadoop關聯

  進入$PIG_HOME/conf中,編輯pig.properties文件,加入以下兩行內容:

fs.default.name=hdfs://hadoop-master:9000

mapred.job.tracker=hadoop-master:9001

三、Pig的使用實例

3.1 文件背景

  結合本筆記第五篇《自定義類型處理手機上網日誌》的手機上網日誌為背景,我們要做的就是通過Pig Latin對該日誌進行流量的統計。該日誌的數據結構定義如下圖所示:(該文件的下載地址為:http://pan.baidu.com/s/1dDzqHWX)

技術分享

  PS:在使用Pig之前先將該文件上傳至HDFS中,這裏上傳到了/testdir/input目錄中

hadoop fs -put HTTP_20130313143750.dat /testdir/input

技術分享

3.2 Load:把HDFS中的數據轉換為Pig可以處理的模式

  (1)首先通過輸入Pig進入grunt,然後使用Load命令將原始文件轉換為Pig可以處理的模式:

grunt>A = LOAD ‘/testdir/input/HTTP_20130313143750.dat‘ AS (t0:long,
msisdn:chararray, t2:chararray, t3:chararray, t4:chararray, t5:chararray, t6:long, t7:long, t8:long, t9:long, t10:chararray);

  (2)通過Pig對指令的解析,幫我們轉換成為了MapReduce任務:

技術分享

  (3)通過以下命令可以查看結果:

grunt>DUMP A;

技術分享

3.3 FOREACH:把A中有用的字段抽取出來

  (1)這裏我們需要統計的只是手機號以及四個流量數據,因此我們通過遍歷將A中的部分字段抽取出來存入B中:

grunt> B = FOREACH A GENERATE msisdn, t6, t7, t8, t9;

  (2)通過以下命令可以查看結果:

grunt>DUMP B;

  技術分享

3.4 GROUP:分組數據

  (1)有用信息抽取出來後,看到結果中一個手機號可能有多條記錄,因此這裏通過手機號進行分組:

grunt> C = GROUP B BY msisdn;

  (2)通過以下命令可以查看結果:

grunt>DUMP C;

技術分享

3.5 GENERATE:流量匯總

  (1)在對手機號進行分組之後,我們可以看到某個手機號對應著多條流量記錄數據,因此繼續使用FOREACH遍歷分組數據,然後對四個流量數據進行匯總,這裏使用了聚合函數SUM():

grunt> D = FOREACH C GENERATE group, SUM(B.t6), SUM(B.t7), SUM(B.t8), SUM(B.t9);

  (2)通過以下命令可以查看結果:

grunt>DUMP D;

  技術分享

3.6 STORE:將統計結果存儲到HDFS中進行持久化

  (1)在對流量統計完畢之後,結果仍然是在Pig中,這裏就需要對其進行持久化操作,即將結果存儲到HDFS中:

grunt> STORE D INTO ‘/testdir/output/wlan_result‘;

  (2)通過HDFS Shell查看存儲結果:

hadoop fs -text /testdir/output/wlan_result/part-r-*

技術分享

參考資料

(1)yanghuahui,《Hadoop Pig簡介、安裝與使用》:http://www.cnblogs.com/yanghuahui/p/3768270.html

(2)cloudsky,《Hadoop使用(六)Pig》:http://www.cnblogs.com/skyme/archive/2012/06/04/2534876.html

(3)rzhzhz,《Pig與Hive的對比》:http://blog.csdn.net/rzhzhz/article/details/7557607

原文鏈接:http://www.cnblogs.com/edisonchou/

Hadoop學習筆記—16.Pig框架學習