大數據那些事(7):騰飛的拉丁豬
2007到2008年的Hadoop世界,是Hadoop發展歷史上非常關鍵的一年。這一年Yahoo Research 發表了Pig Latin的paper 在 SIGMOD2008上。之後HIVE也出來了。Pig的出現標誌著Hadoop的community從此走上了一條和Google分道揚鑣的道路,標誌著大數據近代的到來,在我眼裡,這個變化是具有歷史意義的里程碑式的大事件。
MapReduce這個非常傻的模型的出現,讓人們一下子發現原來大規模的並行計算可以這樣來做,寫個Mapper 寫個Reducer,再寫個Mapper,再寫個Reducer,...,搞定。但是我想除非是瘋狂程序猿,大部分人對於這種新時代的原始社會編程方式多半會瘋掉。這畢竟不像SQL,寫個SELECT FROM WHERE就搞定了。為了查點數據,還得你妹的寫JAVA寫C++寫Python。到底是系統有病還是程序猿有病。
這個問題Google內部也遇到了。有過一些嘗試,最後在Google內部勝出的是Flume。Flume開始叫Flume Java因為只支持JAVA,後來也加了C++,所以就改了名字。注意這個不是開源社區的那個Flume。開源社區的人做了一個Apache Crunch的東西,那個才是Flume Java的copycat。當然這個項目其實沒多大的影響力。Google的套路基本上還是程序猿的套路,大家來寫Java啊C++啊,調用API,後面則提供優化啊之類的。因為不是今天這篇文章的重點,大家有興趣深入研究可以去看Flume Java的論文或者等我後續的文章里來講。
開源社區走向了另外一條道路。這條道路其實更多的像是SQL的。使用一種高級語言,然後在很高的層次上表明自己想做什麼,和Java啊C++啊之類的東西沒半毛錢關係。所以說Pig的出現表明開源社區走向了一條更受傳統database的影響的做法,而非Google做什麼大家跟進什麼。這成為以後開源社區百花齊放的非常有意義的一步。因此,在我看來,拉丁豬飛起來的這一年,對開源大數據社區,有著極其重要的意義。
很多人喜歡比較Pig和Hive。當然我接下來也會講Hive,但是今天不得不嫌提一句,我個人的傾向。我覺得設計理念上,我更喜歡Pig,但是Pig Latin也體現了所謂研究人員學究的那一面。時至今日,我們必須說Pig是被大部分人放棄了。
我在這裡假設大家都知道Pig長什麼樣了。如果不知道,請大家參閱原始論文:Pig Latin:A Not-So-Foreign Language for Data Processing,或者其他的資料。我喜歡Pig是因為這個語言解決了SQL長期以來最為詬病的一個問題。Pig是一個data flow language,所以我們可以把一行命令的結果賦值給一個臨時的變數,然後在後續的處理中引用這個變數作為下一個命令的輸入。這使得我們需要寫nested query的概率大大的降低了。SQL這個東西就是簡單的query很簡單。一旦開始nesting了,那麼可以寫出鬼和神仙都看不懂的SQL,當然我更看不懂。至於Pig引入的Load和Store作為輸入輸出的方式,我覺得schemaless也是一種選擇,相對於Hive基於metadata store的方式來說更具備靈活性。總而言之這是一款很容易上手,上手以後寫出複雜的東西也可以被分割成為相對簡單的邏輯和data flow來理解的語言。對於做比較複雜的數據處理尤其顯得合適。
但是我們必須說文人相輕的傳統在學術圈裡也同樣適用。No zuo no die更是在哪裡都是成立的。但凡研究猿做出來的東西,總是透著一股子酸味的不接地氣。我想這群寫出Pig Latin的人骨子裡肯定看不起SQL,看不起到連做Filter不會用WHERE卻偏偏要發明自己的Filter,Join不叫Join非要叫CoGroup。如果是這不是有病的話,那隻能是自掘墳墓了。在這個SQL大行其道這麼多年的數據處理市場里,如果你要搞出一個想要做SQL的事情,卻偏偏要按上一個不是SQL的syntax,唯一的結果就是被拋棄,再拋棄。這種反覆被歷史驗證的事情,只有研究猿才願意不斷的推陳出新,一個好東西就這樣給糟蹋了。
倘若我來設計Pig的話,我想Load和Store我會保留,只是凡是和SQL功能差不多的地方都會用上SELECT FROM WHERE的樣子。我會儘可能的禁止所謂的subquery,讓每個命令行盡量的簡介。我想我會在Pig里一開始就引入類似HCatlog那樣的東西,使得Pig有Hive一樣的表的概念,但是同時並不禁止通過Load和Store直接的憑空產生數據和分析。與其做Pig Latin,不如做Pig SQL。據說Pig SQL曾經也是一個立項,但是伴隨Yahoo的不景氣,這項目就咔嚓了。
最為有意思的事情莫過於Yahoo spin off了Hortonworks以後,原來做Pig的跑去了Hortonworks,改行做Hive了。總之,Pig是一個本來可以有機會成為很偉大的語言的東西,活生生的給研究猿們不接地氣的糟蹋了。我想寫Pig的人做Hive,發明Pig的公司拆分出來的Hadoop 批發商成了Hive開發的主力,這畫面不得不說非常的美啊。大家好好欣賞一下吧。
推薦閱讀:
※Hive JDBC入門示例
※在Hive中適不適合像傳統數據倉庫一樣利用維度建模?
※為何Hive中的數據不均勻分布會導致數據傾斜?
※Hive On Spark, SparkSQL On Spark, 與Spark On YARN如何定義呢?