Pig v.s Sawzall : Yahoo與Google的對決

五月 2, 2007

Yahoo的Pig專案與Google的Sawzall專案是兩個很類似的東西,都是屬於平行處理大量資料的高階程式語言。並不是每家公司都能從底層去解決效率問題,但是對Yahoo與 Google來說,為傳統資料庫無法容納的大規模資料集專門設計一種程式設計語言是完全合理的。即使其他程式設計工具可以解決問題,他們仍然會為了追求效率而另外開發一套客制化方案。這正是他們未來資料搜尋市場能立於不敗之地的武器。

從Pig資料來看:
我們建立了可以用在大量資料的隨境分析法,而這個方法就是一種平行處理。我們的系統運算在叢集計算架構下,其上有許多抽象層,這種方式可以將平行處理的巨大力量帶給一般使用者。這些抽象層把使用者的查詢轉譯為有效率的平行處理,並且協調的在叢集硬體上運作。

由Sawzall paper來看:為了有效運用大型的叢集運算來分析大量資料,必須讓程式能夠平行處理…我們的做法就是使用一種叫Sawzall的程式語言。.使用者可以寫簡短的程式來平行運作在上千台機器上,而使用者不需有任何平行處理的知識,Sawzal就可以處理平行運算的工作。

Google Sawzall 建制於MapReduce之上,Yahoo Pig 建於Hadoop之上(Hadoop為MapReduce的clone),兩者幾乎系出同門。

但是Sawzall比較像Java與 Pascal,而Pig較像延伸的 SQL。

以下是Sawzall的例子
proto “querylog.proto"
static RESOLUTION: int = 5; # minutes; must be divisor of 60
log_record: QueryLogProto = input;
queries_per_degree: table sum[t: time][lat: int][lon: int] of int;
loc: Location = locationinfo(log_record.ip);
if (def(loc)) {
t: time = log_record.time_usec;
m: int = minuteof(t); # within the hour
m = m – m % RESOLUTION;
t = trunctohour(t) + time(m * int(MINUTE));
emit queries_per_degree[t][int(loc.lat)][int(loc.lon)] <- 1; }

以下是 Pig的例子
a = COGROUP QueryResults BY url, Pages BY url;
b = FOREACH a GENERATE FLATTEN(QueryResults.(query, position)), FLATTEN(Pages.pagerank);
c = GROUP b BY query;
d = FILTER c BY checkTop5(*);

到底哪種方式會主導下一場戰局,脽也說不凖,但是可預見的是: 大量資料的平行處理功能可以讓大家用起來更便利。

敬請留言

你的回應對我們是很重要的. 你的電子郵件將不會被公開.

請等待 ...
*
Loading Facebook Comments ...