Title: Building a High-Level Dataflow System on top of Map-Reduce: The Pig Experience
Author: Alan F. Gates, Olga Natkovich, Shubham Chopra, Pradeep Kamath, Shravan M. Narayanamurthy, Christopher Olston, Benjamin Reed, Santhosh Srinivasan, Utkarsh Srivastava
Publication: VLDB 2009
Pig 是一個high-level的系統,有點像SQL一樣可以利用一些語法去控制資料。
隨著資料量越來越龐大,許多地方都使用Map-Reduce來處理資料,Pig像是一個中介,將所寫的語法轉成Map-Reduce可處理的job。
Map-Reduce programming model存在著一些問題。
1. 不支援N-step dataflow
2. 缺乏支援結合多個data set的processing
3. 一些基本的且常用的操作(ex. Filtering, aggregation)必須自己寫。
Pig使用Pig Latin作為輸入,將之轉成Map-Reduce job。
下面是整個處理過程的overviewFig2 左邊就是使用者寫的Pig Latin,先將她轉為logical plan。
Pig提供了許多type可以使用,支援比較複雜的type: map、tuple、bag。
接著將Logical plan轉為physical plan。
上面的數字表示對應的步驟,其中JOIN與GROUP會對應的多個physical stage。
最後再將physical plan轉成map reduce plan。
Pig 提供了對nested sub-plan的處理,所以在physical多了SPLIT/MULTIPLEX的處理。因為使用者可能想對同一份資料作多項處理,但是並不想重複load data。
為了控制pipeline中的tuple,他們也考慮的push model和pull model。
由於Hadoop是用java開發,所以pig也用java開發,但是因為java無法直接對memory作處理,所以很容易造成memory不夠的問題。
一般解決的方式是用增加JVM memory大小。
此外,Pig也提供了UDF,使用者自訂的函式。
他們對每個STREAM建立兩個thread: 一個用來feeding data去執行,另一個用來consuming data,先queue起來。
這篇paper最主要應該是要解決Map-Reduce上的問題,以及提供一些high-level的控制方式,讓使用者可以更方便操作資料。
沒有留言:
張貼留言