Apache Pig 學習筆記

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

本文將持續更新!!!

相關文章
相關標籤/搜索