今天是2019年,要是有誰說有十年大數據工作經驗,我是不信的。因為 Spark 正式應用才多少年?看過下面文章的你,應該就知道了,2012 年移交 Apache Spark, 就算他是 Spark 的 Committer, 滿打滿算才 7 年。
如果是 2006 年 Hadoop 一代長老呢,那肯定有 10 年大數據經驗了,但依然只能說是半吊子的大數據工程師,因為真正有實時大數據平臺的年代,要從 2012 年 Apache Spark 正式推出算起。
Spark 是 Apache 的頂級項目,一舉一動都在整個社區的矚目之下。凡是由 Apache 推動的項目,自然大概率是比較成功的。回想 Google 當年沒將 Big Table, Map Reduce, GFS 及時的推廣到 Apache 落地,反而被後來者 Hadoop 奪得了頭魁,甚為惋惜。想知道Google 錯過這段好時機,可以看我的這篇文章《繼螞蟻金服OceanBase之後,騰訊也祭出了大殺技》
最初時,Spark 孵化於加利福尼亞大學(University of California) 伯克利分校(Berkeley)的大數據實驗室( AMPLab).說起這個實驗室,還有兩個巨頭產品, Apache Mesos 和 Alluxio. 看官可能對這兩產品不是很瞭解,沒關係,這裡也不打算講,以後再細說。
2006 年, Hadoop 基於 Google 的三駕馬車,先於 GCP 而被世人所知。除了分佈式存儲擴充了商業關係型數據庫的存儲容量外,Map Reduce 更是一大創舉,讓分佈式計算取得了開創新的進展。但 Map Reduce 的原理註定了它的致命缺陷,中間數據集要存盤,以致於丟失了性能上的戰略牌。被 Spark 的內存式彈性分佈數據集(Resilient Distributed Dataset)撿了個漏。於是 Spark 於 2009 年橫空出世,彌補了 Hadoop 性能上的缺陷,由此也搶到了一塊市場。
Hadoop 本來被期望很高,直指機器學習與人工智能,科學家已經嘗試在 Hadoop 上研發機器學習的軟件庫,但由於中間數據要存盤的這一致命缺陷,導致最終很多實時計算項目爛尾,而科學家們在另外一個項目,叫做 Mesos(分佈式集群管理) 上取得長足進展,索性在 Mesos 上建立 Spark(分佈式計算) 來替代 Hadoop.
由此可見,Hadoop 之所以會被 Spark 打敗,完全是市場新興的訴求(機器學習與人工智能)使然。Spark 的出生,就是為了解決機器學習的困境。
當然,說 Spark 打敗 Hadoop 有些不嚴謹,就像說 Apple 的 iOS 打敗 Google 的 Andriod 一樣,兩者是補充,滿足了不同的市場需求而已。Spark 與 Hadoop 在應用場景上,只是互相補充罷了,畢竟實現 Spark 的硬件要求比 Hadoop 要高很多,成本也就不一樣了。這些都是廠商不會直接告訴你的。
Hadoop 先於 Spark 3 年出世,那麼做為 Spark 如何快速從 Hadoop 中奪取屬於自己的市場呢?從頭建立自己的分佈式管理,還是利用 Hadoop 已有市場,與 Hadoop 兼容 ,只拋出自己的分佈式計算引擎呢?很顯然, 聰明人都會選後者,沒必要從頭建立一個輪子啊。所以很快的,社區對於 Spark 的接受也相當輕鬆。社區的推廣在很大程度上也助推了 Spark 的應用鋪貨。
Spark 流行的基礎原因說的差不多了,那再說點高級應用。軟件發生到現在這個時間段,真不是哪家軟件能解決某個問題而已了,而是哪家軟件能提供一整套應用鏈,就用那家。所以開放性就決定了軟件體系能走多遠。
就跟編程語言一樣的,原本的 Visual FoxPro, Visual Basic, Delphi 本是解決 MIS 系統的最有效編程工具,但隨著 web, mobile 應用需求的出現,這些工具再也跟不上需求發展的步伐了,逐漸就被市場給拋棄了。
縱觀 現在主流的編程語言,Java, Python, 哪一個不是包羅萬象,既可以玩的了 C/S 傳統開發,又駕馭的了 B/S 的潮流,甚至在 mobile 應用上也能對付。Spark 也一樣,除了能玩轉數據 CRUD(Create, Retrieve, Update, Delete), 更能匹配當下數據科學的潮流,比如批量,實時 ETL, 比如集成各種數據分析,數據挖掘的算法,高效的去完成機器學習。
Spark 在擁抱內存式分佈計算的同時,順應時勢間接容納了 Spark Streaming, Spark Machine Learning(MLlib)Spark SQL 和 Spark GraphX, 這些組件是當下互聯網生態需求的大綜合,可以說整個數據應用鏈,Spark 都完美的提供瞭解決方案,那麼它不紅,都沒理由了!
參考文章:
http://blog.madhukaraphatak.com/history-of-spark/
https://medium.com/@chandanbaranwal/spark-streaming-vs-flink-vs-storm-vs-kafka-streams-vs-samza-choose-your-stream-processing-91ea3f04675b
https://www.quora.com/What-are-the-differences-between-Apache-Spark-and-Apache-Flink
https://en.wikipedia.org/wiki/Apache_Spark
閱讀更多 SQL大數據專列 的文章