1. 程式人生 > >資料湖的概念以及解決方案

資料湖的概念以及解決方案

今天這篇文章主要介紹資料湖(data lake)的定義,其次介紹各大雲廠商的解決方案以及目前的開源解決方案。

定義

看下維基百科的定義:資料湖是一個以原始格式(通常是物件塊或檔案)儲存資料的系統或儲存庫。資料湖通常是所有企業資料的單一儲存。用於報告、視覺化、高階分析和機器學習等任務。資料湖可以包括來自關係資料庫的結構化資料(行和列)、半結構化資料(CSV、日誌、XML、JSON)、非結構化資料(電子郵件、文件、pdf)和二進位制資料(影象、音訊、視訊)。定義中的重點內容我用紅色字型標註出來,簡單說明一下這幾點。

  • 原始格式:資料不做預處理,儲存資料的原始狀態
  • 單一儲存:儲存庫中會彙總多種資料來源,是一個單一庫
  • 用於機器學習:除了 BI 、報表分析,資料湖更適用於機器學習

資料湖並不是新概念,最早 2015 年就被提出來了,可以看到資料湖經常被拿來跟目前的資料倉庫作比較。下面是谷歌搜到的一篇比較早的資料湖和資料倉庫對比的文章

至於為什麼資料湖慢慢走近大家的視野,並且越來越多的跟倉庫作比較。我認為主要是跟機器學習的廣泛應用有很大關係。

資料湖和資料倉庫的對比

大資料剛興起的時候,資料主要用途是 BI 、報表、視覺化。因此資料需要是結構化的,並且需要 ETL 對資料進行預處理。這個階段資料倉庫更適合完成這樣的需求,所以企業大部分需要分析的資料都集中到資料倉庫中。而機器學習的興起對資料的需求更加靈活,如果從資料倉庫中提數會有一些問題。比如:資料都是結構化的;資料是經過處理的可能並不是演算法想要的結果;演算法同學與數倉開發同學溝通成本較大等。我在工作中就遇到這種情況,做演算法的同學需要經常理解我們的數倉模型,甚至要深入到做了什麼業務處理,並且我們的處理可能並不是他們的想要的。基於上面遇到的各種問題,資料湖的概念應運而生。下面的表格對比一下資料湖和資料倉庫的區別,主要來自 AWS 。

從以上表格的區別上我們可以看到資料湖的應用場景主要在於機器學習,並且在用的時候再建 Schema 更加靈活。雖然資料湖能夠解決企業中機器學習應用方面的資料訴求,可以與資料倉庫團隊解耦。但並不意味著資料湖可以取代資料倉庫,資料倉庫在高效的報表和視覺化分析中仍有優勢。

雲廠商的解決方案

近幾年雲端計算的概念也是非常火,各大雲廠商自然不會錯失資料湖的解決方案。下面簡單介紹阿里雲、AWS 和 Azure 分別的資料產品。

  • 阿里雲:Data Lake Analytics,通過標準JDBC直接對阿里雲OSS,TableStore,RDS,MongoDB等不同資料來源中儲存的資料進行查詢和分析。DLA 無縫整合各類商業分析工具,提供便捷的資料視覺化。阿里雲OSS 可以儲存各種結構化、半結構化、非結構化的資料,可以當做一個數據湖的儲存庫。DLA 使用前需要建立 Schema 、定義表,再進行後續分析。
  • AWS:Lake Formation,可以識別 S3 或關係資料庫和 NoSQL 資料庫中儲存的現有資料,並將資料移動到 S3 資料湖中。使用 EMR for Apache Spark(測試版)、Redshift 或 Athena 進行分析。支援的資料來源跟阿里雲差不多。
  • Azure:Azure Data Lake Storage,基於 Azure Blob 儲存構建的高度可縮放的安全 Data Lake 功能,通過 Azure Databricks 對資料湖中的資料進行處理、分析。但文件中並沒有看到支援其他資料來源的說明

開源解決方案

除了雲廠商提供的方案外, 還有一個開源解決方案——kylo 。這個框架的關注度並不高,社群不是很活躍。大概看了下官網的介紹視訊,基本上與雲廠商的解決方案一致。支援多種資料來源,分析時建立 Schema。另外,Databricks 團隊(開源 Spark 框架)年初開源了 Delta lake 框架, Delta lake 是儲存層,為資料湖帶來了可靠性。Delta Lake 提供 ACID 事務、可伸縮的元資料處理,並統一流和批資料處理。Delta Lake執行在現有資料湖之上,與Apache Spark api完全相容。架構圖如下:

小結

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

公眾號「渡碼」,分享更多高質量內容

&n