數(shù)據(jù)湖的這些知識點你了解嗎
今天這篇文章主要介紹數(shù)據(jù)湖(data lake)的定義,其次介紹各大云廠商的解決方案以及目前的開源解決方案。
定義
看下維基百科的定義:數(shù)據(jù)湖是一個以原始格式(通常是對象塊或文件)存儲數(shù)據(jù)的系統(tǒng)或存儲庫。數(shù)據(jù)湖通常是所有企業(yè)數(shù)據(jù)的單一存儲。用于報告、可視化、高級分析和機器學習等任務。數(shù)據(jù)湖可以包括來自關系數(shù)據(jù)庫的結構化數(shù)據(jù)(行和列)、半結構化數(shù)據(jù)(CSV、日志、XML、JSON)、非結構化數(shù)據(jù)(電子郵件、文檔、pdf)和二進制數(shù)據(jù)(圖像、音頻、視頻)。定義中的重點內(nèi)容我用紅色字體標注出來,簡單說明一下這幾點。
- 原始格式:數(shù)據(jù)不做預處理,保存數(shù)據(jù)的原始狀態(tài)
- 單一存儲:存儲庫中會匯總多種數(shù)據(jù)源,是一個單一庫
- 用于機器學習:除了 BI 、報表分析,數(shù)據(jù)湖更適用于機器學習
數(shù)據(jù)湖并不是新概念,最早 2015 年就被提出來了,可以看到數(shù)據(jù)湖經(jīng)常被拿來跟目前的數(shù)據(jù)倉庫作比較。下面是谷歌搜到的一篇比較早的數(shù)據(jù)湖和數(shù)據(jù)倉庫對比的文章

至于為什么數(shù)據(jù)湖慢慢走近大家的視野,并且越來越多的跟倉庫作比較。我認為主要是跟機器學習的廣泛應用有很大關系。
數(shù)據(jù)湖和數(shù)據(jù)倉庫的對比
大數(shù)據(jù)剛興起的時候,數(shù)據(jù)主要用途是 BI 、報表、可視化。因此數(shù)據(jù)需要是結構化的,并且需要 ETL 對數(shù)據(jù)進行預處理。這個階段數(shù)據(jù)倉庫更適合完成這樣的需求,所以企業(yè)大部分需要分析的數(shù)據(jù)都集中到數(shù)據(jù)倉庫中。而機器學習的興起對數(shù)據(jù)的需求更加靈活,如果從數(shù)據(jù)倉庫中提數(shù)會有一些問題。比如:數(shù)據(jù)都是結構化的;數(shù)據(jù)是經(jīng)過處理的可能并不是算法想要的結果;算法同學與數(shù)倉開發(fā)同學溝通成本較大等。我在工作中就遇到這種情況,做算法的同學需要經(jīng)常理解我們的數(shù)倉模型,甚至要深入到做了什么業(yè)務處理,并且我們的處理可能并不是他們的想要的?;谏厦嬗龅降母鞣N問題,數(shù)據(jù)湖的概念應運而生。下面的表格對比一下數(shù)據(jù)湖和數(shù)據(jù)倉庫的區(qū)別,主要來自 AWS 。

從以上表格的區(qū)別上我們可以看到數(shù)據(jù)湖的應用場景主要在于機器學習,并且在用的時候再建 Schema 更加靈活。雖然數(shù)據(jù)湖能夠解決企業(yè)中機器學習應用方面的數(shù)據(jù)訴求,可以與數(shù)據(jù)倉庫團隊解耦。但并不意味著數(shù)據(jù)湖可以取代數(shù)據(jù)倉庫,數(shù)據(jù)倉庫在高效的報表和可視化分析中仍有優(yōu)勢。
云廠商的解決方案
近幾年云計算的概念也是非?;?,各大云廠商自然不會錯失數(shù)據(jù)湖的解決方案。下面簡單介紹阿里云、AWS 和 Azure 分別的數(shù)據(jù)產(chǎn)品。
- 阿里云:Data Lake Analytics,通過標準JDBC直接對阿里云OSS,TableStore,RDS,MongoDB等不同數(shù)據(jù)源中存儲的數(shù)據(jù)進行查詢和分析。DLA 無縫集成各類商業(yè)分析工具,提供便捷的數(shù)據(jù)可視化。阿里云OSS 可以存儲各種結構化、半結構化、非結構化的數(shù)據(jù),可以當做一個數(shù)據(jù)湖的存儲庫。DLA 使用前需要創(chuàng)建 Schema 、定義表,再進行后續(xù)分析。
- AWS:Lake Formation,可以識別 S3 或關系數(shù)據(jù)庫和 NoSQL 數(shù)據(jù)庫中存儲的現(xiàn)有數(shù)據(jù),并將數(shù)據(jù)移動到 S3 數(shù)據(jù)湖中。使用 EMR for Apache Spark(測試版)、Redshift 或 Athena 進行分析。支持的數(shù)據(jù)源跟阿里云差不多。
- Azure:Azure Data Lake Storage,基于 Azure Blob 存儲構建的高度可縮放的安全 Data Lake 功能,通過 Azure Databricks 對數(shù)據(jù)湖中的數(shù)據(jù)進行處理、分析。但文檔中并沒有看到支持其他數(shù)據(jù)源的說明
開源解決方案
除了云廠商提供的方案外, 還有一個開源解決方案——kylo 。這個框架的關注度并不高,社區(qū)不是很活躍。大概看了下官網(wǎng)的介紹視頻,基本上與云廠商的解決方案一致。支持多種數(shù)據(jù)源,分析時創(chuàng)建 Schema。另外,Databricks 團隊(開源 Spark 框架)年初開源了 Delta lake 框架, Delta lake 是存儲層,為數(shù)據(jù)湖帶來了可靠性。Delta Lake 提供 ACID 事務、可伸縮的元數(shù)據(jù)處理,并統(tǒng)一流和批數(shù)據(jù)處理。Delta Lake運行在現(xiàn)有數(shù)據(jù)湖之上,與Apache Spark api完全兼容。架構圖如下:

小結
今天這篇文章主要介紹了數(shù)據(jù)湖的概念,以及數(shù)據(jù)湖與數(shù)據(jù)倉庫的區(qū)別,然后簡單了解了目前數(shù)據(jù)湖在云廠商和開源軟件中的解決方案。作為數(shù)倉建設和數(shù)據(jù)開發(fā)人員要密切關注這種新的概念,如果我們的工作中遇到這種問題我們也可以思考是否可以推動數(shù)據(jù)湖的建設。另外,作為中小企業(yè)上云的方案可能是一個比較好的選擇,畢竟開源解決方案目前不是很成熟,社區(qū)還不是很強大。