2011年5月11日 星期三

Building a High-Level Dataflow System on top of Map-Reduce: The Pig Experience

Building a High-Level Dataflow System on top of Map-Reduce: The Pig Experience


Alan F. Gates, Olga Natkovich, Shubham Chopra, Pradeep Kamath,
Shravan M. Narayanamurthy, Christopher Olston, Benjamin Reed,
Santhosh Srinivasan, Utkarsh Srivastava
Yahoo!, Inc.

VLDB ‘09

=========================================================

面對現在愈來愈大量的及運端資料的處理,Map-Reduce是運端資料處理的方式
但其對於很多地方都有限制(ex: user define function, data type)
這篇提出的方法是用dataflow programming model 就像SQL語法一樣
提供類似的服務給大量的database處理,並研究它們的performance

"Pig" 是一種high-level dataflow system 作為SQL跟Map-Reduce的媒介
所以它也提供像是SQL那樣的語法(ex: filter, join, count...)以供search

Paper裡提到Map-Reduce的架構上有些缺點:
1. 不能直接提供較為複雜的N-step dataflows
2. 無法直接處理multiple data sets
3. 一些處理data的function ex: filtering, aggregation 都要自己implement

然後Pig會compile 這些dataflow programs成為Pig Latin然後丟進Hadoop Map-Reduce

這篇paper主要focus在一些跟原本SQL架構上不同的部分


Map-Reduce Data type的部分,原本只支援int, long, double 及 char array
這裡提到可以全部轉用Pig的byte array 來handle

Map-Reduce在Map階段,會透過指派的key來控制
然後在Reduce階段再利用這些key來作sort 及 aggregation

Pig 是把logical plan 轉為physical plan 然後再轉為Map-Reduce plan
另外在Flow control 的部分在Pig可以用push model 和 pull model來達到nested program

另外在文中也提到因為Map-Reduce是用java寫的,所以memory management是很大的問題
因為java不允許developer直接對memory allocation來作控制
最直接的想法就是把直接調整 java virtual machine 能用的記憶体空間
但這樣會降低performance 很多
這裡用的方法是透過Pig,先把data集成 bags再去處理

另外在user define function (UDF)這裡也可以透過streaming的概念
把executable files 放在Pig 的處理階一併執行,這樣就可以解決原本的限制

========================================================

這篇感覺是在Map-Reduce 的架構上說出它們現有的缺點,然後用Pig再以改進

沒有留言:

張貼留言