大數據雜談
最近忙於搬家,買車,保險等雜事,講座聽得少,只是聽了兩個中文的:喜馬拉雅的創始人於建軍在InnoSpring分享喜馬拉雅的心得,以及coursera的董飛(知乎:董老師)在Stanford分享大數據相關的主題。
是的,這些活動都是中文的。而且,只要你加入當地的一些技術群(比如JaywSalon),再關注一些公眾號(比如StanfordACSSSS - 斯坦福中國人聯合會,ACE_Berkeley - ACE伯克利華人創業協會),基本上,中文的技術分享一周能有個好幾次。難怪最近池大參加矽谷這邊一個高逼格的會議,抵達後的在朋友圈驚呼:「。。。到處都是華人和漢字。。。看來世界被華人佔領是遲早的」。
言歸正傳。大數據這詞熱了好幾年,其核心無非就是幾點:在互聯網用戶基數越來越大的情況下,海量數據(實時數據,歷史數據)如何有效存儲?存儲之後如何利用(實時分析,非實時分析)?如何通過歷史數據推測未來(個性化推薦,定製化服務)?
海量數據的存儲,托google的GFS paper的福,誕生了HDFS。演算法的力量解放了廉價機器和普通硬碟的能力,使得互聯網公司可以不走銀行證券業(它們應該是Big Data的鼻祖)的老路,使用昂貴的SAN,而是通過演算法將數據放置於普通的PC伺服器上,分散式存儲。
分散式的海量數據的運算和分析,托google的map reduce paper的福,誕生了Hadoop(以及構建其上的pig - data analyzing, hive - sql-like warehouse等應用)。一個大任務被切分成多個小任務,分布在不同的節點計算,然後匯總。
由於大數據的存儲和運算都是分散式完成的,而任何一個分散式系統,最頭疼的事情就是synchronization,而synchronization的核心是atomic operation,我們知道,單機的atomic operation一般基於CPU本身提供的CAS(Compare and Swap)指令,而分散式的atomic operation只能依賴於messaging。一個message要準確無誤地傳遞給系統的每個節點是件很困難(難點在高效)的事情。如果這個問題解決不好,那麼大數據領域的很多應用都會存在潛在問題,於是Zookeeper應運而生。Zookeeper提供分散式的atomic operation,可以用於存儲統一的配置 [1],選舉master等等。我們知道,分散式系統總歸需要局部(比如skype的supernode)或者全局的master(如OSPF的master),來做一些統籌的事情(包括但不限於reduce),而master往往是個單點,為了避免單點故障,實現high availability,n+m cluster和lead election必不可少。所以,Zookeeper是大數據生態圈的關鍵一環。
對於計算資源而言,以硬體伺服器為單位的粒度顯然太大,n個物理node如果隔離和調度合理,可能可以同時處理遠大於n的任務。但往往任務和任務的運行時不盡相同(甚至衝突),用VM做隔離,磁碟和CPU的額外損耗不小,且受限於硬體能力,scale還做不大;同時VM的硬傷是elasticity,資源的切分一旦確定,修改的代價不小。為了適應計算上elasticity,最近兩年在整個生態圈上又出現了新的資源管理和調度系統,如mesos,yarn。mesos使用Zookeeper做lead election,所有計算資源上運行slave,向master彙報資源狀態,然後master將這些資源schedule到各個註冊在master上的framework,framework再進行細粒度的task scheduling,最終,task在若干個slave上的executor里執行。Mesos里默認使用container來切分資源,粒度完全由task的大小決定,非常靈活。當然,executor也可以是docker。
解決了存儲,運算,configuration/synchronization/HA,scheduling的問題後,"OS"級別的事情就差不多了,剩下的就是application。前面提到的pig,hive,以及後來居上意欲(局部)取代hadoop的spark,等等,構成了一個巨大的大數據生態系統(從類比操作系統的角度看):
如果說今天的大多數應用軟體開發者主要還工作在linux stack上,跟從CPU/memory起一直到framework級別的軟體打交道;未來,整個stack則完全不同,也許應用開發者要逐漸切換技能棧了。系統軟體工程師則可以略微高枕無憂,畢竟driver還要寫,kernel bug還要fix,networking總得有人做。大數據生態圈的磚瓦還是linux,TCP/IP這些基礎組件。
不過,就internet的現狀來說,應用軟體工程師更容易成為那個站在風口的豬。對於搭好梯子,累好磚瓦,供豬站在風口上的系統軟體工程師來說,只能哀嘆一句:「遍身羅綺者,不是養蠶人」。
以上是董老師的講座主題濃縮及我個人的一些總結,草草而作。董老師將其整個講座的slides + 解說放在了他的知乎專欄「董老師在矽谷」,感興趣可以點擊閱讀
如果您覺得這篇文章不錯,請點贊。多謝!
歡迎訂閱公眾號『程序人生』(搜索微信號 programmer_life)。每篇文章都力求原汁原味,北京時間中午12點左右,美西時間下午8點左右與您相會。
1. 簡單的配置,而非大量的數據
推薦閱讀:
※奇博士的管理課 - 激勵
※[產品與技術] Flight data recorder
※[雜談] 當你回首往事的時候
※黑客馬拉松續 - 旅遊極客開發大賽
※軟體性能調優:看數據,還是看概念?