作者:Tina 來源:InfoQ
讓數據產生價值才叫成功。早期有不少的公司引入了 Hadoop,將企業的各種結構化非結構化數據加載至 Hadoop 環境當中,想讓自己的數據發揮更大的價值,但這并不容易。2016 年,Gartner 公司估計有 60% 的大數據項目遭遇失敗。一年之后,他們表示 60% 的估計太過保守,這個數字應該是 85%。
大數據存儲已經走到了一個新的階段,肯定會有新的革命性技術來替換它。
大數據的未來
前十多年,大數據的發展主要集中在技術框架上,社區出現了一系列優秀的作品,如最開始引領大數據風潮的 Hadoop,到計算引擎 Spark、Flink ,消息中間件 Kafka ,以及資源調度器 Kubernetes 等等,大數據領域的技術框架已經比較成熟。
通過開源架構策略,現代化數字企業逐漸意識到自己的目標是通過業務實現數據的價值化,未來將會把更多的精力投向研究底層數據消費和上層的產品應用。
2019 年 6 月,谷歌以 26 億美元收購了數據分析公司 Looker。同月,Salesforce 宣布以 157 億美元收購 BI 企業 Tableau 。2019 年 9 月,Cloudera 宣布收購商業智能實時分析廠商 Arcadia Data。這些收購案例都說明企業的目標開始轉向解讀所積累的海量數據。
賦能業務,快速應對挑戰,正是數據湖所能提供的。數據湖的概念,最早是在 2011 年由 Dan Woods 提出,”是一個集中化存儲海量的、多個來源,多種類型數據,并可以對數據進行快速加工,分析的平臺,本質上是一套先進的企業數據架構“。例如在社交廣告中的用戶畫像,需要行為日志等非結構化數據,經過層層數據加工形成業務價值。以后也會延伸到圖像、語音等類型。這些就是數據湖能提供的特別優勢。
Apache Ozone 項目是由大數據公司 Hortonworks 貢獻出來的,最初是為了解決 Hadoop 系統中的對象存儲問題。面對 Hadoop 向云上發展的方向,騰訊選擇了在一年多前正式加入 Ozone,組了一支隊伍,利用騰訊的業務場景和數據規模,進行協同開發,擴展成數據湖存儲,并推進技術落地。InfoQ 采訪了騰訊大數據海量存儲與數據湖研發負責人堵俊平,了解數據湖的發展和面臨的挑戰,本文基于這次采訪。堵俊平曾在 Hortonworks 供職 4 年,負責 YARN 團隊,目前在騰訊負責騰訊大數據的海量存儲、海量計算以及數據湖等研發方向,有 10 多年的云計算與大數據產品研發經驗。
今年 10 月,他將在 QCon 全球軟件開發大會(上海站)2019 作題為《OZone - 下一代數據湖存儲》的演講。
數據湖是數據倉庫的進階
關于數據湖的定義確實是一個業界有較多爭議的地方。狹義的數據湖指的是數據湖存儲,即可以存放海量數據(各種格式)的地方,包括 Hadoop 的文件系統 HDFS 或者云上的對象存儲系統 S3 都屬于這個范疇。廣義的數據湖除了數據湖存儲,還包括數據湖的管理和分析,即提供一整套工具,提供數據目錄(Data Catalog)服務以及統一的數據訪問。
業界很重要的趨勢,是從傳統的數據倉庫向數據湖的方向在演進。
1. 傳統的數倉體系
最早出現的是數據庫一體機,是由單獨的硬件軟件所構成,這種數倉的問題也很明顯,它需要一個專有的硬件設計,你只要用的不是通用的硬件,一般成本都會比較高。第二,它的擴展性非常差,在往前推十年、二十年是可以的,但是在這樣的大數據時代,大家都不想隨意地拋棄掉自己的數據和數據資產,所以一體機模式的數倉肯定要被這個時代淘汰掉。
2. 分布式的數倉階段
這個階段也分兩塊,一塊是從分庫分表,從邏輯上把這個數據分成不同的模塊,放在不同的數據庫上面;另外一個方式,整個過程是通過 MPP 這個架構,通過一些獨立的數據庫組建出來 MPP 數據庫,總體來說 MPP 數據庫還是非常強大的。但是 MPP 有一個限制,它不能支持海量的數據,因為更多添加節點,尤其是當它的擴展規模超過 100 個節點以上的時候,會發現大的任務幾乎無法執行,因為最慢的節點會拖累整個任務的執行。
3. 云原生的數倉階段
這些 adhoc 分析的任務在業務不斷變化的情況下,包括經歷波峰、波谷,對計算資源有不同的需求,這個時候云原生數倉就會越來越流行,因為它是一個多集群的,彈性可伸縮的,并且支持海量的高并發。這里說回傳統的 MPP 數倉,還有個問題,就是 SQL 并發能力跟單機數據庫是一樣的,因為并發的所有 SQL 都要在每一臺機器上去執行,無法突破單機數據庫的并發限制。
無論是傳統數倉還是新型數倉,無論是類似 Teradata,還是 MPP 架構,或者是 Oracle 單機加強版架構,都是從數據庫發展而來的。使用的場景也主要是用格式化的數據。但數據湖并不要求很強的數據格式,非結構化、半結構化數據都行,也不要求數據入庫之前需要像數倉那樣建立嚴格的一套 ER 模型,或者其他的范式模型。
數據可以很輕松進入數據湖,用戶也可以延遲數據的采集、數據清洗、規范化的處理,可以把這些延遲到業務需求來了之后再進行處理。這跟早期的數倉思維就很不一樣,它相對于企業來說,靈活性比較強。傳統的數倉,因為模型范式的要求,業務不能隨便的變遷,變遷涉及到底層數據的各種變化。傳統數倉沒法支持業務變化。對于數據湖來說,尤其像互聯網行業中新的應用,不斷的發生變化,它的數據模型也不斷的變化。相對來說,數據湖就更加的靈活,能更快速的適應上層數據應用的變化。
數據湖的三個層次,分為數據庫等底層存儲、元數據管理、跨不同數據源的 SQL 引擎。數據湖也是數據倉庫發展的高級階段,對于數倉來說,數據湖有很多擴展能力。數倉解決的核心問題,數據湖也解決了一遍,而且涉及面更廣。比如說,數據庫的數據有對齊的要求,數據庫是面向應用的,每個應用可能需要一個數據庫。如果一個公司有幾十個應用,就會有幾十個數據庫。幾十個數據庫之間怎么去連接分析、統一分析?是沒有辦法的。隨后就由數據庫發展成了一個數據倉庫,數據倉庫不面向任何應用。但是,它對接到數據庫,如果需要每天定時有些 ETL 的批處理的任務,將不同應用和數據匯總起來,按照一些范式模型去做連接分析,得到一定時間段的總體數據視圖。這個前提是很多數據庫要給數倉供應數據。這些供應數據是數據庫是表格化、規范化的方式。
但現在互聯網企業的應用,大部分數據不再來源于數據庫了,它可能來源于日志,比如用戶的行為日志,或機器的日志,可能來源于各種各樣的非格式化的數據。這時就必須要用數據湖這種方式。可以跨越之前數倉建模種種的約束,針對業務需求去做聯合分析和查詢。對上層數據應用所提供的接口更像是一個統一的界面,屏蔽了底層異構數據源的差異,這也是大數據發展未來的重要趨勢。
面向未來,數據湖做出的變革
存儲計算分離
二十年前,Google 用普通硬盤代替了昂貴的專有硬件設備方案,但當時的網絡帶寬只有 100M。為了快讀訪問,同時也創造出了計算和存儲耦合的架構。Hadoop 延續了計算存儲一體化的方式。
存儲計算一體化架構的性能是經過了優化的:通過任務調度的方式,將計算調度到離數據更近的地方,訪問更快也省資源。而云端的場景,采用的是計算和存儲分離的方式,第一性能可能不是最重要的點,第二大家更考慮”彈性伸縮“,業務需要大的波峰時候,需要很多的資源,業務相對在低谷的時候,希望資源可以是收縮的。
Ozone 這樣的下一代數據湖兼顧 Hadoop 的計算存儲一體化和云的彈性伸縮的優勢,一方面實現了邏輯上的計算存儲分離,同時在任務調度時,又能做到數據和機架感知功能(data、rack awareness),能讓計算更貼近存儲。
這也是對傳統云存儲數據訪問方式的一個變革。
?
?
如上圖所示傳統云訪問方式,存儲計算是分離的,各種計算節點統一的通過接口,也即 RESTful 方式訪問數據。之后,計算框架在基于 Ozone 計算存儲分離的條件下,可以把計算任務發送到臨近存儲的節點之上,通過調度計算而不是拖數據的方式達到高性能。
高性能高可靠的海量存儲
Hadoop 的三副本保證了數據的可靠性,傳統的大數據的 HDFS 寫的方式是依次寫多個副本。在寫性能優化上,Ozone 采用 Raft 分布式通訊協議,同時寫幾個副本。這種局部創新,讓 Ozone 得到了很好的性能上的提升。
對于 Hadoop 存儲面向云的演化,還要看 HDFS 如何跟云上的對象存儲配合。在 HDFS 上,所有的元數據(命名空間、塊管理等)都會放在單個的 NameNode 節點上,如果考慮到同時并行的文件操作以及數據塊上報、RPC 的響應等因素,這個時候就會遭遇擴展瓶頸。如果集群存儲的是海量小文件,元數據體量會劇烈暴增,這個瓶頸期會更快到來。所以這種架構不適合海量的高性能大數據處理。Ozone 將元數據進行了分散處理,規避了以前的問題。并且云上的對象存儲方式,從硬件上和通用 API 訪問的方式上,性價比比較高。Ozone 除了提供文件接口,為了跟云去做對接,還提供了對象存儲,這樣就可以在云上部署類似的系統,對數據訪問進行無縫的集成,而且相比傳統的云端對象存儲還可以做高性能的拓撲感知。
這相當于在傳統的對象存儲和 HDFS 海量分布式文件存儲中做了取長補短,也是一個重要的變革。
面向機器學習
現在面對機器學習和離線計算,跟大數據場景下處理的數據方式不一樣,現在需要去處理的可能是一張張圖片,或云語料文字,這種數據的顆粒度更小,不像傳統的大數據應用那么集中。這種海量小文件,不是傳統的 HDFS 所擅長的,正好在 Ozone 里得到了解決,可以支撐小文件或對象存儲方式,對機器學習的發展也有促進作用。
現在深度學習和超大規模的神經網絡潮流來了之后,更離不開大量的數據。AI 和大數據在技術層面上,兩個社區也開始相互對接融合,不斷出現在大數據平臺做深度學習的 AI 框架,這樣的平臺能在底層有調度的能力,能同時調度好 AI 模型訓練、推理以及做數據預處理的任務。
針對云和機器學習場景,Ozone 項目具有很多特點,包括:無限的擴展能力,強一致性的對象存儲能力,與主流計算調度框架 YARN 和 Kubernetes 無縫對接,以及同時兼容對象存儲與 HDFS API 等。這些技術特性也決定了 OZone 的現在的發展方向。
堵俊平總結說:”大數據存儲已經走到了一個新的階段,肯定會有新的革命性技術來替換它。“
未來挑戰
數據湖的使用場景,是為了將各種數據匯集到一起,但現在的數據引擎太千差萬別了,SQL 引擎是一套,NoSQL 包括 Cassandra、HBase 又是另一套東西,還有類似 Elasticsearch 和圖計算等等。很多引擎都自帶存儲,將這些數據從不同的引擎里去拉通,堵俊平覺得是很有價值的。但是目前還沒有哪家公司有工具能完全做到,大部分是選擇少數幾個數據引擎去統一。堵俊平表示”騰訊內部有研發項目,來做類似的事情。希望能夠把各種各樣的數據引擎和元數據都能夠做一個聚合和統一,這樣才能真正達到理想中的數據湖管理和統一數據分析的愿景“。








