作者:ezaya
鏈接:https://www.zhihu.com/question/403840013/answer/1317631316
著作權歸作者所有,商業轉載請聯系作者獲得授權,非商業轉載請注明出處,
目錄
一、MapReduce
二、Spark
三、Flink & Storm
四、總結
這四個專案能放在一起比較的背景應該是分布式計算的演程序序,
一、MapReduce
開源分布式計算的第一個流行的框架是 Hadoop 專案中的 MapReduce 模塊,它將所有計算抽象成 Map 和 Reduce 兩個階段,在計算時通過增加機器,并行的讀取資料檔案,進行 Map 或 Reduce 的操作,并將結果寫到檔案中,如此反復得到最終的結果,
上面程序中,每個 Map 和 Reduce 階段所能表達的計算邏輯是有限的,因此完整的業務邏輯往往包含了多個階段,注意到每個階段都有讀取資料檔案和資料寫出到檔案的開銷,對于同一個任務的中間結果,其唯一用途就是被下一階段讀取,且讀后就成為垃圾檔案,對中間結果落盤顯然是不合理的重大開銷,
二、Spark
基于這樣的觀察,Spark 提出了記憶體計算的概念,核心思想就是中間結果盡量不落盤,依靠這樣的基礎思想,Spark 相對 Hadoop MapReduce 獲得了千百倍的性能提升,代價是更高的記憶體開銷以及 OOM 風險,經歷過 Spark 1.x 年代的研發和運維應該都對此深有體會,
三、Flink & Storm
Storm 和 Flink 完全是另一個路數,我們這里討論 Flink 的流計算部分,而不討論它早年被 Spark 全方位吊打的 DataSet 批計算部分,前面討論的批計算,其特點是輸入資料集是事先知曉且有限的,而流計算的世界觀認為輸入資料集是無限的訊息流,因此,它們的計算邏輯處理的不是一批一批的資料,而是一條一條連綿不斷的訊息,
Storm 通過產生資料流的源頭和消費資料流的管道來抽象流計算的世界,Flink 的流計算部分其實大同小異,兩者最大的區別或者說 Flink 最大的優勢是它擁有內置的狀態管理和精確一次送達語意的容錯機制,Flink 的官方標語就是狀態化的流計算,因此這才是它的核心競爭力,有了內置的狀態管理,Flink 相比 Storm 就少了對接外部狀態存盤的負擔,要知道,每次手動對接外部存盤,重復開發量是巨大的,而且涉及兩個分布式專案的端到端一致性保證,將變得非常復雜,
四、總結
以上就是對這四個專案口水化的介紹,其使用場景大抵如下,
Spark 作為批計算的王者存在,基本處理所有分布式批處理的場景,有的時候會使用 Hadoop MapReduce 是因為存量業務沒有明顯的性能瓶頸,不需要故意開發遷移,另一種情況是在沒有嚴格性能要求的情況下,減少 Spark 的部署運維成本,簡單使用 HDFS 集群直接支持的 MapReduce 計算任務,還有一種情況是早年某些 MapReduce 作業的 DSL 的存量,傳遞依賴 MapReduce 且同樣沒有升級的強需求,例如 Pig 程式,
Flink 作為流計算的標桿,基本覆寫了阿里巴巴內部的流計算場景,但是,在阿里強推之前,或者從技術上說被雙十一磨礪之前,大部分公司的偽實時需求可以通過 Spark Streaming 或者 Storm 乃至訂閱 Kafka 加消費者任務來解決,因此市面上非 Flink 的流計算大抵是過時或者有局限性技術的存量,Flink 的核心優勢在于內置狀態管理以及先發優勢帶來的較為完善的功能支持,這方面解決了流計算開箱即用的問題,以及雙十一磨礪的性能優勢,目前仍然是流計算框架的跑分榜第一,
當然,這些專案都還有其他內容,例如 Hadoop 的 YARN 資源管理框架,Spark 跟高迭代的機器學習的整合等等,同時,外圍還有資料湖技術和 HTAP 以及其他流計算框架在爭奪這四款軟體的業務場景,那就不是這里一兩句話能說完的了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260993.html
標籤:其他
上一篇:Discuz論壇安裝流程
下一篇:計算機導論-1-圖靈模型
