為什麼 Spark 在數據科學界這麼紅?

  • 2019 年 12 月 25 日
  • 筆記

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

End