我們今天經常談論的大數據技術,其實源於Google在2004年前後發表的三篇論文,也就是我們經常聽到的“三駕馬車”,即分布式文件系統GFS、大數據分布式計算框架MapReduce和NoSQL數據庫系統BigTable。
要知道,搜索引擎主要做兩件事,壹是網頁抓取,二是索引建立,而在這個過程中,有大量的數據需要存儲和計算。這“三駕馬車”其實就是用來解決這個問題的。從介紹中也可以看出,有文件系統,有計算框架,有數據庫系統。
現在聽到分布式、大數據之類的詞,肯定壹點都不陌生。但妳要知道,2004年那個時候,整個互聯網還處於蒙昧時代,Google發表的論文真的讓業界為之振奮,大家恍然大悟,原來還可以這麽玩。
因為那時候大部分公司其實都是以單機為主,想著如何提高單機性能,找到更貴更好的服務器。Google的思路是部署壹個大規模的服務器集群,將海量數據以分布式的方式存儲在這個集群中,然後使用集群中的所有機器來計算數據。這樣的話,谷歌其實不需要購買很多昂貴的服務器。它只需要把這些普通的機器組織在壹起,就很強大了。
當時才華橫溢的程序員、Lucene開源項目的創始人Doug Cutting正在開發壹個開源搜索引擎Nutch。看了Google的論文,他很興奮,然後根據論文的原理初步實現了類似GFS和MapReduce的功能。
兩年後的2006年,Doug Cutting將這些與大數據相關的功能從Nutch中分離出來,然後開始了壹個獨立的項目,開發和維護大數據技術,這就是著名的Hadoop,主要包括Hadoop分布式文件系統HDFS和大數據計算引擎MapReduce。
當我們回顧軟件開發的歷史,包括我們自己的軟件,妳會發現有些軟件在開發後被忽略了或者只被少數人使用,而這樣的軟件實際上占了所有開發軟件的大部分。而有些軟件可能會創造壹個產業,每年創造數百億美元的價值,創造數百萬個就業崗位。這些軟件以前是Windows,Linux,Java,現在這個列表裏應該加上Hadoop的名字。
有時間的話可以簡單瀏覽壹下Hadoop的代碼。這個純Java寫的軟件,沒有什麽高深的技術難度,用的是壹些基本的編程技巧。沒什麽好驚訝的,但是給社會帶來了巨大的影響,甚至引發了壹場深刻的科技革命,推動了人工智能的發展和進步。
我覺得,我們在做軟件開發的時候,也可以多想想我們開發的軟件的價值是什麽。真正需要用軟件實現價值的地方在哪裏?妳要關註業務,了解業務,以價值為導向,用自己的技術為公司創造真正的價值,進而實現自己的人生價值。與其整天埋頭在需求規格文檔裏,不如做壹個不用思考的代碼機器人。
Hadoop發布後,雅虎很快就用上了。2007年又過了壹年左右,百度和阿裏巴巴也開始使用Hadoop進行大數據存儲和計算。
2008年,Hadoop正式成為Apache的頂級項目,後來Doug Cutting自己也成為了Apache基金會的主席。從那時起,Hadoop已經成為軟件開發領域的明星,冉冉。
同年,專註於Hadoop的商業公司Cloudera成立,Hadoop得到了進壹步的商業支持。
這時候雅虎有人覺得用MapReduce編程大數據太麻煩,於是開發了Pig。Pig是壹種腳本語言。使用類似SQL的語法,開發人員可以使用Pig腳本來描述要在大型數據集上執行的操作。編譯後,Pig會生成MapReduce程序,然後在Hadoop上運行。
盡管編寫Pig腳本比直接MapReduce編程更容易,但您仍然需要學習新的腳本語法。於是臉書又放出了蜂巢。Hive支持使用SQL語法進行大數據計算。比如可以寫壹個Select語句進行數據查詢,然後Hive會把SQL語句轉換成MapReduce計算程序。
這樣,熟悉數據庫的數據分析師和工程師就可以使用大數據進行數據分析和處理,沒有任何門檻。Hive出現後,大大降低了Hadoop的使用難度,很快受到開發者和企業的追捧。據說2011年,臉書大數據平臺上運行的90%的工作來自Hive。
隨後,很多Hadoop周邊產品開始出現,大數據生態圈逐漸形成,包括:Sqoop,專門從事關系數據庫的數據導入導出到Hadoop平臺;水槽;用於大規模日誌的分布式收集、聚合和傳輸;MapReduce工作流調度引擎Oozie等。
在Hadoop早期,MapReduce既是執行引擎又是資源調度框架,服務器集群的資源調度管理由MapReduce自己完成。但這不利於資源重用,也讓MapReduce非常臃腫。於是壹個新的項目開始了,它將MapReduce執行引擎從資源調度中分離出來。這是紗線。2012,紗成為獨立項目,開始運營。後來被各種大數據產品支持,成為大數據平臺上最主流的資源調度系統。
也是在2012年,由UC Berkeley AMP Lab(算法、機器和人的縮寫)開發的Spark開始嶄露頭角。當時AMP實驗室的馬鐵博士發現使用MapReduce進行機器學習計算的性能很差,因為機器學習算法通常需要進行多次叠代,MapReduce每次執行Map和Reduce計算都需要重新啟動作業,帶來了很多不必要的消耗。還有壹點就是MapReduce主要使用磁盤作為存儲介質,而在2012中,內存已經突破了容量和成本的限制,成為數據操作過程中的主要存儲介質。Spark壹經推出,立即受到業界追捧,並逐漸在企業應用中取代MapReduce。
壹般來說,MapReduce、Spark等計算框架所處理的業務場景都被稱為批量計算,因為它們通常是將“天”內生成的數據計算壹次,然後得到所需的結果,這大約需要幾十分鐘甚至更長的時間。因為計算出來的數據不是線上獲得的實時數據,而是歷史數據,所以這種計算也叫大數據離線計算。
在大數據領域,還有壹類應用場景,需要對實時產生的大量數據進行計算,比如對遍布城市的監控攝像頭進行人臉識別和嫌疑人追蹤。這種計算被稱為大數據流計算,相應的,有Storm、Flink、Spark Streaming等流計算框架來滿足這種大數據應用場景。流式計算要處理的數據是實時在線生成的數據,所以這種計算也叫大數據實時計算。
在典型的大數據業務場景中,最常見的數據業務方式是使用批處理技術處理歷史總數據,使用流計算處理實時新數據。像Flink這樣的計算引擎可以同時支持流式計算和批處理計算。
除了大數據的批處理和流處理,NoSQL系統主要處理大規模海量數據的存儲和訪問,因此也被歸為大數據技術。NoSQL在2011前後非常流行,湧現出HBase、Cassandra等眾多優秀產品,其中HBase是從Hadoop中分離出來的基於HDFS的NoSQL系統。
回顧軟件發展的歷史,我們會發現功能幾乎相似的軟件都是在非常接近的時間出現的。比如Linux和Windows都出現在90年代初,Java開發中的各種MVC框架基本上同時出現。Android和iOS也是同時出來的。大約在2011年前,各種NoSQL數據庫也是層出不窮。當時我還參與了阿裏巴巴自己的NoSQL系統的開發。
事物都有自己的趨勢和規律。當妳在趨勢中的時候,妳要抓住趨勢的機會,想辦法脫穎而出。即使不成功,也會更好地了解時代的脈搏,獲得寶貴的知識和經驗。而如果潮水已經退去,此時再往這個方向走,只會產生迷茫和沮喪,對時代和自己都沒有幫助。
但時代的潮汐就像沙灘上的波浪,總是壹波接著壹波。只要妳是袖手旁觀的海洋,並在這個行業,下壹波浪潮很快就會到來。妳需要敏感而深刻的觀察,忽略那些浮躁的泡沫,抓住真正趨勢的機會,努力拼搏,不論成敗,無怨無悔。
說是在歷史前進的邏輯中前進,在時代潮流中發展。通俗地說,就是迎風飛翔。
我上面說的基本可以歸類為大數據引擎或者大數據框架。大數據處理的主要應用場景包括數據分析、數據挖掘和機器學習。數據分析主要通過使用Hive、Spark SQL等SQL引擎來完成。對於數據挖掘和機器學習,有TensorFlow、Mahout、MLlib等專門的機器學習框架,內置了主要的機器學習和數據挖掘算法。
此外,大數據應存儲在分布式文件系統(HDFS)中,MapReduce和Spark作業應有序調度,執行結果可寫入各種應用系統的數據庫中。還需要壹個大數據平臺來整合所有這些大數據組件和企業應用系統。
圖中所有這些框架、平臺和相關算法都同構到大數據的技術體系中。我會在專欄後面逐壹分析,幫助大家構建大數據的技術原理和應用算法的完整知識體系。可以全職從事大數據開發,在自己的應用開發中可以更好的與大數據結合,掌控自己的項目。
希望對妳有幫助!~