對於筆者來說,更加好奇的卻是另外一個問題,在國內外紛紛唱衰 Hadoop 的論調中,為什麼騰訊還要花費這麼大精力去主導 Hadoop 的開源版本釋出?
更多幹貨內容請關注微信公眾號“AI 前線”,(ID:ai-front)
Hadoop 最早誕生於 2006 年,並在 2008 年成為 Apache 頂級專案。雖然在誕生之初,只有國內外幾家巨頭嘗試使用 Hadoop 技術,但沒過多久,Hadoop 就成為了網際網路行業大資料計算的標準配置,Hadoop 也快速成為 Apache 軟體基金會的金牌專案之一。不僅如此,它還孕育了包括 HBase、Hive、ZooKeeper 等一系列知名 Apache 頂級專案,而這些專案一開始都是以 Apache Hadoop 子專案的形式在社群運作併為開發者熟知的。
至今,Hadoop 已經走過了 12 個年頭,這對於任何軟體來說生命週期都不可謂不長。而從 2016 年開始,國內外就開始出現唱衰 Hadoop 的聲音。雖然對於國內外很多企業來說,Hadoop 依然是大資料計算不可缺少的配置,但對於 Hadoop 未來的發展,很多人都並不看好,“談不上會有好的發展”。Hadoop 背後最大的平臺提供商 Hortonworks 也開始往以雲端計算為中心的世界靠攏。
去年 9 月,Gartner 將 Hadoop 發行版從資料管理的技術成熟度曲線中淘汰出局,原因是由於整個 Hadoop 堆疊的複雜性和可用性問題,許多組織已經開始重新考慮其在資訊基礎架構中的角色。而今年 KDnuggets 釋出的資料科學和機器學習工具調查報告則顯示 Hadoop 的使用率也下降了,這讓“Hadoop 老矣”的說法又再度流傳起來。
2018 年資料科學和機器學習工具調查報告顯示 Hadoop 使用率下降 35%
在這個時候,為什麼騰訊要花費大力氣去主導 Hadoop 開源版本的釋出?
負責主導本次開源版本釋出的騰訊雲專家研究員堵俊平告訴 AI 前線,真正“老矣”的是 Hadoop 商業發行版而非 Hadoop 技術本身, 不論在國內還是國外,Hadoop 技術都保持著大資料平臺的核心和事實標準地位。需要變革的是 Hadoop 技術的使用和發行方式, 未來越來越多的使用者從使用線下 Hadoop 發行版向雲上的資料湖(物件儲存 +Hadoop)遷移可能會成為一種趨勢。
騰訊的大資料平臺有不少為自身特殊場景優化甚至重新自研的產品和元件,但有相當大的一部分是基於開源 Hadoop 生態元件構建的。
目前騰訊的大資料平臺用到了非常多的 Hadoop 生態元件。以騰訊雲上開放的彈性 MapReduce 服務為例,騰訊提供了 Hadoop、HBase、Spark、Hive、Presto、Storm、Flink、Sqoop 等元件服務。不同元件也發揮了不同的用處:資料儲存和計算資源排程由 Hadoop 來實現,資料的匯入可以用 Sqoop,HBase 提供了 NoSQL 資料庫服務,離線資料處理由 MapReduce、Spark、Hive 等完成,流式資料處理則由 Storm、Spark Streaming 以及 Flink 來提供等等。
堵俊平表示,對於 Hadoop 生態的各類元件的選型,騰訊的總體原則是兼顧平臺穩定性和技術先進性。一方面,需要理解每個元件所適用的場景以及它們的能力邊界,另一方面,從測試和運維實踐來看,要了解每個元件的穩定程度和運維複雜度。以基於 Hadoop 的數倉元件為例,新版的 Hive 增加了 LLAP 元件來提升互動式查詢的效能和速度,但從當前執行的實際效果來看並不穩定,所以騰訊暫緩把這個元件引入生產系統,Hive 更多服務於離線計算的場景,而互動式查詢由更為穩定的 SparkSQL 和 Presto 來提供。
騰訊並非個例,在國內外很多企業的大資料平臺中,Hadoop 生態的各類元件都佔了相當大的比重。誰都離不開它,但可能應用太普遍,Hadoop 受到的關注反而變少了。作為 Hadoop 的 PMC,堵俊平表示,Hadoop 作為大資料平臺的核心和事實標準地位,在國內外並沒有太大的區別。不過在各個行業,Hadoop 應用的成熟度卻不盡相同。舉例來說,Hadoop 在網際網路公司應用的最早也最為成熟;其次是金融行業,Hadoop 大資料平臺落地的成功案例很多,也相對比較成熟。當前 Hadoop 大資料平臺應用的熱點是在政務和安防領域以及 IOT 工業網際網路平臺,這些新的熱點帶來新的需求也會促使 Hadoop 技術和生態繼續向前進化。
對於 Gartner 將 Hadoop 從技術成熟度曲線中淘汰出局,堵俊平指出,Gartner 的報告是針對 Hadoop 商業發行版而非 Hadoop 技術本身。
報告中所提到的 Hadoop 發行版的問題:比如發行版的複雜度高以及包含很多非必要性元件,從使用者的反饋來看,是真實存在的。很多商業發行版,例如 CDH 或者 HDP,都包含了洋洋灑灑十幾種甚至幾十種元件給使用者使用,在提供靈活性的同時,也給使用者帶來了很多使用和運維上的煩惱。更嚴重的是,這個問題從近幾年的觀察來看,不但沒有減輕且有愈演愈烈的趨勢。所以,Hadoop 技術的使用和發行的方式需要變革,未來越來越多的使用者從使用線下的 Hadoop 發行版向雲上的資料湖(物件儲存 +Hadoop)遷移可能會成為一種趨勢。
堵俊平坦言,Hadoop 生態確實存在一些不足。Hadoop 的生態系統非常複雜,每個元件都是獨立的模組,由單獨的開源社群開發和釋出,我們可以稱之為鬆耦合。這種鬆耦合的開發方式,好處是靈活、適應面廣、開發週期可控,缺點是元件之間配合的成熟度低、版本衝突嚴重、整合測試困難。這也給使用者的使用帶來了困難,因為一個場景中需要涉及到很多元件的配置工作。
雖然流計算對於大資料處理來說越來越重要,但不支援流計算卻不會成為 Hadoop 的致命傷。雖然 Hadoop 自身不提供流計算服務,不過主要的流計算元件,如 Storm、Spark Streaming 以及 Flink 本身就屬於 Hadoop 生態系統的一部分,因此並不構成太大的問題。
曾有開發者向 AI 前線表示,Hadoop 主要是被 MapReduce 拖累了,其實 HDFS 和 YARN 都還不錯。堵俊平則認為 MapReduce 拖累 Hadoop 的說法並不準確,首先 MapReduce 還是有應用場景,只是越來越窄,它仍然適合某些超大規模資料處理的批量任務,且任務執行非常穩定;其次,Hadoop 社群對於 MapReduce 的定位就是進入維護模式, 並不追求任何新的功能或效能演進,這樣可以讓資源投入到更新的計算框架,比如 Spark、Tez,促進其成熟。
HDFS 和 YARN 目前還是大資料領域分散式儲存和資源排程系統的事實標準,不過也面臨一些挑戰。對 HDFS 而言,在公有云領域,越來越多的大資料應用會選擇跳過 HDFS 而直接使用雲上的物件儲存, 這樣比較方便實現計算與儲存分離,增加了資源彈性。YARN 也面臨著來自 Kubernetes 的強大挑戰,尤其是原生的 docker 支援,更好的隔離性以及上面生態的完整性。不過 K8S 在大資料領域還是追趕者,在資源排程器以及和對各計算框架支援上還有很大的進步空間。
Spark 在計算框架方面基本上佔據了主導地位,MapReduce 主要是一些歷史應用,而 Tez 更像是 Hive 的專屬執行引擎。流處理方面,早期的流處理引擎 Storm 正在退役,而當前唱主角的則是 Spark Streaming 和 Flink,這兩個流處理引擎各有千秋,前者強在生態,後者則在架構方面有優勢。一個有意思的情況是,對於 Spark Streaming 和 Flink 的應用在國內外的情況很不一樣,國內已經有大量的公司開始使用 Flink 構建自己的流處理平臺,但美國市場 Spark Streaming 還是佔絕對主流的地位。當然,還有一些新的流處理框架,例如 Kafka Streams 等等,發展得也不錯。
在大資料 SQL 引擎方面,四大主流引擎 Hive、SparkSQL、Presto 以及 Impala 仍然各有所長。
Hive 最早由 Facebook 開源貢獻也是早年應用最廣泛的大資料 SQL 引擎,和 MapReduce 一樣,Hive 在業界的標籤就是慢而穩定。其無私地提供了很多公共元件為其他引擎所使用,堪稱業界良心,比如後設資料服務 Hive Metastore、查詢優化器 Calcite、列式儲存 ORC 等。近年來,Hive 發展很快,例如查詢優化方面採用了 CBO,在執行引擎方面用 Tez 來替換 MapReduce,通過 LLAP 來 cache 查詢結果做優化,以及 ORC 儲存不斷演進。不過相比較而言,這些新技術從市場應用來說還不算成熟穩定,Hive 仍然被大量使用者定義為可靠的 ETL 工具而非即時查詢產品。
SparkSQL 這兩年發展迅猛,尤其在 Spark 進入 2.x 時代,發展更是突飛猛進。其優秀的 SQL 相容性(唯一全部 pass TPC-DS 全部 99 個 query 的開源大資料 SQL),卓越的效能、龐大且活躍的社群、完善的生態(機器學習、圖計算、流處理等)都讓 SparkSQL 從這幾個開源產品中脫穎而出,在國內外市場得到了非常廣泛的應用。
Presto 這兩年應用也非常廣泛,這款記憶體型 MPP 引擎的特點就是處理小規模資料會非常快,資料量大的時候會比較吃力。Impala 的效能也非常優異,不過其發展路線相對封閉,社群生態進展比較緩慢,SQL 相容性也比較差,使用者群體相對較小。
Hadoop 已經 12 歲了,未來 Hadoop 生態將會如何發展?堵俊平表示,未來 Hadoop 的生態會向雲的方向發展,簡化運維甚至免運維既是使用者的需求也是雲廠商的優勢所在。越來越多的資料在雲中產生、儲存和消費,從而形成資料生命週期在雲端的閉環——資料湖。所以雲上的資料安全和隱私保護技術顯得十分重要。
除此之外,Hadoop 在混合雲上的部署和應用也會是一個重要的趨勢,而這方面的技術和架構還不是非常成熟,需要持續創新和創造。在這樣的背景下,傳統 Hadoop 發行版廠商的話語權在技術和商業層面會相對減少,而云廠商的話語權則會增大。 另外一個趨勢是 Hadoop 生態會不斷向資料應用端生長,強調從資料處理到資料治理的轉變,更方便的 ETL 工具、後設資料管理與資料治理工具會逐漸走向成熟與完善。最後,Hadoop 生態也會從單純的大資料平臺演化到集資料與機器學習平臺為一體, 未來可助力很多的 AI 應用場景。
堵俊平告訴 AI 前線,未來大資料領域比較重要的發展方向中,IOT 是一個值得長期關注的領域。在大資料發展歷史上,這部分業務發展週期較短,很多技術都不是非常成熟,標準也沒有完全統一。除此之外,雲上的大資料產品還有技術變革的空間,例如:跨資料中心 / 雲的解決方案、自動化關鍵資料業務遷移、資料隱私保護、自動機器學習等,未來一定會有更加創新的產品來打動和吸引使用者上雲。
騰訊雲會聚焦雲端大資料使用者的核心痛點,制定相應的技術和產品路線。對於大資料平臺的底層平臺架構,騰訊雲會更加強調 serverless,注重效能與開銷的平衡,提高資源利用率會是一個長期的方向。而 Hadoop 生態會繼續在其中扮演重要角色,因為市場更為認可開放和開源的產品以及解決方案。騰訊雲也會繼續貢獻和回饋開源社群,和社群一起創造更好更新的技術來滿足未來的需要。
Hadoop 花了 12 年從一個新興開源專案成長為大資料平臺標準配置,實屬不易。如今 Hadoop 生態內部面臨著來自眾多年輕開源元件的競爭壓力,優勝劣汰也很正常,世上沒有十全十美的開源平臺,憑藉已有的優勢,Hadoop 生態的地位依然十分穩固,但未來是否還能煥發出新的活力,抑或在全面雲化的程式中逐漸式微,仍是一個未知數。