最近忙于搬家,買車,保險等雜事,講座聽得少,只是聽了兩個中文的:喜馬拉雅的創始人于建軍在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的現狀來說,應用軟件工程師更容易成為那個站在風口的豬。對于搭好梯子,累好磚瓦,供豬站在風口上的系統軟件工程師來說,只能哀嘆一句:「遍身羅綺者,不是養蠶人」。