1. 程式人生 > >比拼生態和未來,Spark和Flink哪家強?

比拼生態和未來,Spark和Flink哪家強?

我們 成功 mapr 復用 tab 最簡 mapred 發的 北京

概 況

技術分享圖片
Spark 是最活躍的 Apache 項目之一。從 2014 年左右開始得到廣泛關註。Spark 的開源社區一度達到上千的活躍貢獻者。最主要推動者是 Databricks,由最初的 Spark 創造者們成立的公司。今年 6 月的 Spark+AI 峰會參加人數超過 4000。 Spark 因為在引擎方面比 MapReduce 全面占優,經過幾年發展和 Hadoop 生態結合較好,已經被廣泛視為 Hadoop MapReduce 引擎的取代者。
技術分享圖片
Flink 也是 Apache 頂級項目,創始者們成立了 Data Artisans。社區規模還無法和 Spark 相比。不過在業界,特別是流處理方面,有不錯的口碑。在大規模流處理方面走在最前沿,也是需求最強的幾個美國公司,包括 Netflix、 LinkedIn、Uber、Lyft 等,除 LinkedIn 有自己的 Samza 外,都已經采用 Flink 作為流處理引擎或者有了較大投入。

阿裏集團在 Flink 社區也有較大影響力。最近 Flink 1.3 到 1.5 裏都有幾個重磅功能是阿裏和 Data Artisans 合作或者獨立開發的。阿裏還有可能是世界上最大的流計算集群,也是在 Flink 的基礎上開發的。

Unified Analytic platform
最近的 Spark+AI 峰會上, Databricks 主打的主題是統一分析平臺(Unified Analytics Platform)。三大新發布:Databricks delta、Databricks Runtime for ML和 ML flow,都是圍繞這一主題。隨著近年來機器學習(包括深度學習)在數據處理中占比越來越高,可以說 Databricks 又一次把握住了時代的脈搏。

統一分析平臺回應了 Spark 的初衷。經過幾年的探索,對初始問題,即用戶可以在一個系統裏解決絕大部分大數據的需求,有了一個比較明確具體的解決方案。
技術分享圖片

不過有意思的是可以看出 Databricks 在 AI 方面策略的轉變。在深度學習流行前,Spark 自帶的 MLLib 功能上應該是夠用的,但是可能是由於兼容性原因並沒有取得預期中的廣泛采用。

對深度學習的新寵 TensorFlow,Spark 曾經推出過 TensorFrames 和 Spark 引擎做了一些集成。結果應該不是很成功,可能還沒有 Yahoo 從外面搭建的 TensorFlowOnSpark 影響力大。

從這次來看,Spark 轉向了集成的策略。Databricks Runtime for ML 實際上就是預裝了各個機器學習框架,然後支持在 Spark 任務裏啟動一個比如 TensorFlow 自己的集群。Spark 引擎方面做的主要改進就是 gang scheduling,即支持一次申請多個 executor 以便 TensorFlow 集群能正常啟動。

MLFlow 更是和 Spark 引擎無關。作為一個工作流工具,MLFlow 的目標是幫助數據科學家提高工作效率。主要功能是以項目為單位記錄和管理所做的機器學習試驗,並支持分享。設計要點是可重復試驗,以及對各種工具的靈活易用的支持。看起來 Spark 暫時在作為 AI 引擎方面可能沒什麽大動作了。

Flink 的目標其實和 Spark 很相似。包含 AI 的統一平臺也是 Flink 的發展方向。Flink 從技術上也是可以支持較好的機器學習集成和整條鏈路的,而且有一些大規模線上學習的使用實例。不過看起來在現階段 Flink 這方面的平臺化還沒有 Spark 成熟。值得一提的是 Flink 由於流處理引擎的優勢,在線上學習方面可能能支持得更好一些。

數據使用者

產品和生態歸根結底是要解決大數據使用者的問題,從數據中產生價值。了解數據的使用者和他們的需求可以幫助我們在在討論生態的各方面時有一個比較清晰的脈絡。

數據相關的工作者大致可以分為以下角色。實際情況中一個組織裏很可能幾個角色在人員上是重合的。各個角色也沒有公認的定義和明確的界限。
技術分享圖片

數據采集:在產品和系統中合適的地方產生或收集數據發送到數據平臺。
平臺:提供數據導入,存儲,計算的環境和工具等等。
數據工程師:使用數據平臺把原始數據加工成可以供後續高效使用的數據集。把分析師和數據科學家創建的指標和模型等等生產化成為高效可靠的的自動處理。
數據分析師和數據科學家(關於這兩者的異同有很多討論。感興趣的可以自行搜索。https://www.jianshu.com/p/cfd94d9e4466 這裏的譯文可以提供一個視角):為數據賦予意義,發現內含的價值。 下文再不特別區分的地方統稱為數據分析。
產品經理,管理和決策層:根據以上產生的數據調整產品和組織行為。

這些構成了一個完整的環。上面的順序是數據流動的方向,而需求的驅動是反過來的方向。

本文所說的 Spark 和 Flink 的生態主要是對應到數據平臺這一層。直接面向的用戶主要是數據工程師、數據分析師和數據科學家。好的生態能夠大大簡化數據平臺和數據工程師的工作,並使得數據分析師和數據科學家更加自主化同時提高效率。

開發環境
API
從 API 上來看,Spark 和 Flink 提供的功能領域大致相當。當然具體看各個方向支持的程度會有差異。總體來看 Spark 的 API 經過幾輪叠代,在易用性,特別是機器學習的集成方面,更強一些。Flink 在流計算方面更成熟一些。
技術分享圖片

支持的語言也大致相當。Spark 發展的時間長一些還是有優勢,特別是數據分析常用的 Python 和 R。
技術分享圖片

Connectors

有了 API,再有數據就可以開工了。Spark 和 Flink 都能對接大部分比較常用的系統。如果暫時還沒有支持的,也都能比較好地支持自己寫一個 connector。

技術分享圖片

集成開發工具
這方面數據工程師和數據分析的需求有一些不同。

數據分析的工作性質比較偏探索性,更強調交互性和分享。Notebook 能比較好地滿足這些需求,是比較理想的開發工具,用來做演示效果也相當不錯。比較流行的 Notebook 有 Apache Zeppelin,Jupyter 等。Databricks 更是自己開發了 Databricks Notebook 並將之作為服務的主要入口。Zeppelin 支持 Spark 和 Flink,Jupyter 還只支持 Spark。

數據工程師的工作更傾向於把比較確定的數據處理生產化,能快速把代碼寫出來是一方面。另外還有項目管理,版本管理,測試,配置,調試,部署,監控等等工作,需求和傳統的集成開發工具比較相似。 還經常出現需要復用已有的業務邏輯代碼庫的情況。Notebook 對其中一些需求並不能很好地滿足。比較理想的開發工具可能是類似 IntelliJ 加上 Spark/Flink 插件,再加上一些插件能直接提交任務到集群並進行調試,並對接 Apache Oozie 之類的工作流管理等等。在開源社區還沒有見到能把這些集成到一起的。在商業產品中倒是見過一些比較接近的。Spark 和 Flink 在這方面差不多。

運行環境
部署模式 / 集群管理 / 開源閉源

應用開發完後要提交到運行環境。Spark 和 Flink 都支持各種主流的部署環境,在這方面都算做得比較好的。
技術分享圖片

企業級平臺
既然 Spark 和 Flink 都支持各種部署方式,那一個企業是否可以使用開源代碼快速搭建一個支持 Spark 或者 Flink 的平臺呢?

這個要看想要達到什麽效果了。最簡單的模式可能是給每個任務起一個獨占集群,或著給小團隊一個獨立集群。這個確實可以很快做到,但是用戶多了以後,統一運維的成本可能太高,需要用戶參與運維。還有一個缺點是資源分配固定,而負載會有變化,導致資源利用率上不去。比較理想的是多租戶的共享大集群,可以提高運維效率的同時最大限度地提高資源利用率。而這就需要一系列的工作,比如不同的作業提交方式,數據安全與隔離等等。對一些企業來說,可能利用托管服務(包括雲服務)是一種值得考慮的開始方式。

社 區
Spark 社區在規模和活躍程度上都是領先的,畢竟多了幾年發展時間。而且作為一個德國公司,Data Artisans 想在美國擴大影響力要更難一些。不過 Flink 社區也有一批穩定的支持者,達到了可持續發展的規模。

在中國情況可能會不一樣一些。比起美國公司,中國公司做事情速度更快,更願意嘗試新技術。中國的一些創新場景也對實時性有更高的需求。這些都對 Flink 更友好一些。

近期 Flink 的中國社區有一系列動作,是了解 Flink 的好機會。

Spark 的中文文檔在 http://www.apachecn.org/bigdata/spark/27.html。

Flink 的中文社區在 http://flink-china.org/。

另外,今年年底 Flink 中文社區也會在北京舉辦 Flink Forward China 大會,感興趣的朋友可以關註。

未來發展趨勢
近兩年一個明顯的趨勢就是機器學習在數據處理中的比重增長。Spark 和 Flink 都能支持在一個系統中做機器學習和其它數據處理。誰能做得更好就能掌握先機。

另一個可能沒有那麽明顯的趨勢是,隨著 IOT 的增長以及計算資源和網絡的持續發展,實時處理需求會越來越多。現在其實真正對低延遲有很高追求的業務並沒有那麽多,所以每一次流計算新技術的出現都能看到那幾家公司的身影。隨著新應用場景的出現和競爭環境的發展,實時處理可能會變得越來越重要。Flink 現在在這方面是領先的,如果發揮得好可以成為核心優勢。

還有一點值得一提的是,因為用戶不想鎖定供應商,擔心持續的支持等原因,是否開源已經成為用戶選擇數據產品的一個重要考量。閉源產品如果沒有決定性優勢會越來越難和基於開源技術的產品競爭。

總 結
Spark 和 Flink 都是通用的開源大規模處理引擎,目標是在一個系統中支持所有的數據處理以帶來效能的提升。兩者都有相對比較成熟的生態系統。是下一代大數據引擎最有力的競爭者。Spark 的生態總體更完善一些,在機器學習的集成和易用性上暫時領先。Flink 在流計算上有明顯優勢,核心架構和模型也更透徹和靈活一些。在易用性方面兩者也都還有一些地方有較大的改進空間。接下來誰能盡快補上短板發揮強項就有更多的機會。

如果你喜歡這篇文章,或希望看到更多類似優質報道,記得給我留言和點贊哦!

比拼生態和未來,Spark和Flink哪家強?