06.20 技術解讀:Hadoop、PostgreSQL 與 Storm 正面比拼報告!

在 “Hadoop 是否已失寵?” 的選題調研中,筆者調查了銀行、Hadoop 發行商、Hadoop 企業用戶以及部分工程師的意見,所處環境、業務需求以及看問題角度的不同讓這些組織或個人有著不同的意見。如果你的數據量和增長速度還未達到使用 Hadoop 的級別,你一定會認為 Hadoop 是十分不明智的選擇; 相反,當你已經從 Hadoop 生態受益良久時,你一定會認為這是大數據時代最佳解決方案之一,比如那些從 PostgreSQL 遷移至 Hadoop 的企業。

技術解讀:Hadoop、PostgreSQL 與 Storm 正面比拼報告!

很多人不屑於討論 Hadoop 與 Spark、Flink 等之間的對比,因為在大多數人的認知中,只要提起 Hadoop 就一定代表著整個 Hadoop 生態。但在不少企業內部,Hadoop 更多的時候只是表示狹義上的 MapReduce 和 HDFS,由於大多數企業內部還保留著關係型數據庫時代的解決方案,因此企業更傾向於將狹義上的 Hadoop 和其他方案與業務需求對比,選擇最合適的搭建模式,尤其是資金不太充足的企業,搭建整個 Hadoop 生態的前期和後期維護成本以及複雜性是非常高的,其中有些問題可能傳統方案也足以解決。

如今,不少企業將數據庫從 PostgreSQL 遷移到 Hadoop,可能速度、容量以及類型是他們面臨的主要問題,PostgreSQL 正在漸漸從這些企業的數據中心消失,並且在行業中,Hadoop 生態各開源工具的使用頻率很可能遠遠超過 PostgreSQL。與此同時,也會有一些企業從 Hadoop 遷移至 PostgreSQL,這為思考大數據問題和解決方案及其影響提供了機會。

很早之前,我們在分析大數據問題時傾向於三個層面: 管理不斷增加的數據量、管理數據增長速度以及處理多種類的數據結構。值得注意的是,這些只是問題類型,而不是問題本身,同類別的問題之間可能存在很大差異,所有解決方案几乎都意味著不小的成本付出,我經常看到將 Hadoop 作為企業通用解決方案,而不關注成本和問題類型的,結果往往是整個體系過於複雜,難以維護,速度可能很慢。

因此,我們應該學會區分 Hadoop(狹義的 MR 和 HDFS 組合,不代指整個生態)、Storm 以及 PostgreSQL,Hadoop 是專業通用的解決方案,而 OLTP 和關係型數據庫則是更通用的方案。通常,明智的企業會從通用解決方案開始逐漸轉向專業解決方案,並且知道應該使用專業的解決方案來解決哪些問題,比如 Hadoop 在批處理方面很牛,但它並不是一個很好的通用 ETL 平臺.....

PostgreSQL 與 Hadoop 對比

企業應該清楚,構建 Hadoop 是為了同時解決大數據 3V 問題,這就意味著,如果你只存在某一方面的困擾,那麼構建 Hadoop 的成本就顯得過高了。PostgreSQL 和其他關係型數據解決方案為數據提供了非常好的保證,因為它們強化了多樣性,在寫入時強制使用模式,如果違反該模式,則會引發錯誤。Hadoop 在讀取時強制執行模式,因此可以在存儲數據後再嘗試讀取數據,這對於大量非結構化數據很有幫助。

技術解讀:Hadoop、PostgreSQL 與 Storm 正面比拼報告!

如果僅僅面臨容量和速度問題,首先要查看的解決方案應該是 Postgres-XL 或者類似的集群解決方案,但這些方案確實需要良好的數據分區標準。如果數據集高度相關,這可能不是一個好的解決方案,因為跨節點連接是昂貴的。此外,這些方案也不適用於小型數據集,因為搭建這些解決方案的複雜性和成本也不是很低。

Storm 與 Hadoop 對比

Storm 和 Hadoop 的主攻方向完全不同,Storm 的主工程師 Nathan Marz 曾表示, Storm 可以方便地在一個計算機集群中編寫與擴展複雜的實時計算,Storm 之於實時處理就好比 Hadoop 之於批處理。如果習慣於用 Hadoop 代指整個 Hadoop 生態,那你可能會把 Storm 也劃分在生態圈之中。但在企業選擇解決方案時,還是應該將狹義上的 Hadoop 與 Storm 進行一些對比。

技術解讀:Hadoop、PostgreSQL 與 Storm 正面比拼報告!

根據 Hadoop 官網的說法,“Apache Hadoop 是一個框架,允許使用簡單的編程模型在整個計算機集群上分佈式處理大型數據集,它可以從單個服務器擴展到數千臺機器,本地計算和存儲,而不是依靠硬件來提供高可用性,該框架本身旨在檢測和處理應用層的故障,最大的優勢是批處理。

Apache Storm 是一個分佈式實時計算系統,本身不會在典型的 Hadoop 集群上運行,可以與任何編程語言一起工作。Storm 是一個任務並行連續計算引擎,使用 Apache ZooKeeper 和主 / 從工作進程,協調拓撲,主機和工作者狀態,保證信息語義。無論如何,Storm 必定還是可以從 HDFS 文件消費或者從文件寫入到 HDFS 的,Storm 可以與任何隊列或數據庫系統 (即 RDBMS,NOSQL) 集成。

根據官網介紹,Storm 的應用非常廣泛,比如實時分析、在線機器學習、連續計算、分佈式 RPC、ETL 等。Storm 的速度很快—每個節點每秒鐘可處理超過一百萬個元組,具有可擴展性和容錯性,可確保數據得到處理並且易於設置和操作。在消耗資源相同的情況下,一般來說 Storm 的延時低於 MapReduce,但是吞吐也低於 MapReduce。Storm 是典型的流計算系統,MapReduce 是典型的批處理系統。下表對比了 Storm 和 Hadoop 進行數據處理時的各項指標:

技術解讀:Hadoop、PostgreSQL 與 Storm 正面比拼報告!

如果你正在因為大數據的 3V 問題煩惱,Hadoop 是最理想的解決方案,如果你只需要解決其中之一,你可以嘗試一些其他解決方案,因為此時搭建 Hadoop 生態的性價比會大打折扣。如果數據量較少,比如國外企業的數據量整體上少於國內,沒必要使用 Hadoop 處理,因為無法發揮出 Hadoop 的全部價值。

每日分享互聯網趣聞,福利、思維、模式


分享到:


相關文章: