1、什么是數據湖?
數據湖是一種技術系統,可以大批量並且廉價的分析結構化和非結構化數據資產。
其實很簡單,數據湖的最大魅力在於可以分析一切類型的數據。
自 2010 年首次提出“數據湖”一詞以來,采用數據湖架構的組織數量呈指數級增長。 它們支持多種分析功能,從數據的基本 SQL 查詢到實時分析,再到機器學習。

主要組成:
數據湖由四個主要組件組成:存儲層、格式化層、計算層和元數據層。

2、為什么要使用數據湖?
數據湖架構將數據資產整合到一個集中的存儲庫中。該存儲庫將用作對以前孤立的數據進行跨功能分析的根基。此外,來自數據湖的架構有助於數字化驅動的實現。
任何擁有來自物聯網傳感器或移動應用點擊流等來源的大規模非結構化數據都可以采用數據湖架構,這也是未來大數據的發展方向之一。
數據湖與數據倉庫
數據湖和數據倉庫的相似之處在於它們都支持分析大型數據集。然而,他們實現這一目標的方法在幾個關鍵方面有所不同。
模塊化:數據倉庫通常是專有的、單一的應用程序,比如使用HADOOP,HIVE等構建數據倉庫。而數據湖的特點是其組件的模塊化,主要由開源技術和開放格式組成。
架構:數據倉庫要求數據在寫入或攝取時立即符合 DDL 定義的架構。相比之下,數據湖允許數據自由存儲,數據的結構驗證在讀取時進行。
成本與性能:數據倉庫通常以更高的價格提供高性能。用戶在將數據插入表之前通常會面臨歷史記錄的聚合,以避免過高的成本。
數據湖將數據存儲保持在極具成本效益的存儲服務中,因此不會產生過高存儲費用。計算資源可彈性伸縮,以最佳方式滿足工作負載的需求,無需額外成本。
結構化與非結構化數據:數據倉庫專為結構化表格數據集而設計。而數據湖也可用於分析非結構化或半結構化格式的數據。
事實上,數據湖與數據倉庫是可以並行的,要結合實際業務情況進行。
3、如何構建數據湖?
高度可用的存儲服務是數據湖的第一步。
在將數據轉換為更適合分析的格式之前,應以原始格式存儲數據。
接下來,連接諸如 Spark 或 Presto 之類的計算引擎以對數據運行計算。

總共分四部:
- 原始數據進入對象存儲
- 優化原始數據文件以按大小和格式進行分析
- 添加元數據工具來定義模式並啟用版本控制 + 發現
- 將下游消費者集成到優化的數據資產中
4、數據湖技術路線
在數據湖的每一層架構中,都有許多技術可以組合起來創建數據湖。
存儲: 主要雲提供商 AWS S3的存儲服務最常用於數據湖的存儲層。還有許多其他托管和開源存儲提供商也完全能夠支持數據湖,包括:MinIO、HDFS、IBM 雲存儲、阿里巴巴對象存儲、Wasabi、Ceph、Oracle 雲存儲、SwiftStack ,和Spaces Object Storage。
數據格式:最簡單的格式示例是 CSV 和 JSON,基本都是支持的。還存在專為數據湖用例設計的更專業的格式,如 Parquet、Delta、Iceberg、Avro 和 Hudi。這些格式提高了湖操作的效率,並使事務原子性和時間回溯等功能成為可能。
媒體圖像、視頻和音頻文件相關的非結構化數據格式也常見於數據湖中。
計算:大型的計算引擎必須是分布式的。示例包括 MapReduce 和 Hadoop 等技術、以及 Spark 、Presto、Flink 等等。
元數據:非常的重要,特別是影響到以后的數據治理。
客戶端和庫:通過 JDBC/ODBC 和其他數據傳輸接口,可以訪問湖中數據。S3 API,BI 工具和 SQL 客戶端。
5、應用
數據湖適用於一切分析的場景。
- 本地數據分析:一旦將數據放入湖中,就無需將其移至其他地方以進行基於 SQL 的分析。讓分析師對數據湖數據運行查詢,以識別趨勢並計算有關業務的指標。
- 機器學習模型訓練:機器學習模型通常需要大量數據來訓練以優化其參數,並實現高水平的准確性。數據湖使數據科學家可以重復創建訓練和測試集以優化模型。
- 存檔和歷史數據存儲:除了數據湖提供的直接業務價值外,還可以將它們用作存檔歷史數據的存儲。
6、數據湖的挑戰
數據湖周圍的生態系統相對較新,在某些情況下使用的技術仍在成熟中。因此,數據湖容易面臨一些常見問題。
小文件:一個這樣的問題是“小文件問題”,當大量文件(每個文件包含少量數據)出現在數據湖中時就會發生。小文件的問題是它們運行計算和保持最新的元數據統計數據效率低下。
小文件問題的解決方案是運行定期維護作業,將數據壓縮到理想大小以進行有效分析。
分區 和查詢效率:類似於在倉庫表上添加索引的概念,數據湖資產可以通過使用分區來優化聚合或過濾某些字段。分區是指按 Blob 存儲上的特定字段或字段集對數據進行物理組織。
在沒有意識到這一點的情況下,用戶可能會因運行不太適合表分區結構的查詢而招致大量成本和等待時間。
共享驅動器:如果沒有適當的工作流程和治理,數據湖很容易類似於共享文件夾,多人在其中放置文件,而無需考慮其他用戶的預期要求。適當的工作流程是必要的,以避免湖成為數據沼澤。
7、如何避免數據沼澤
數據沼澤是數據湖的退化狀態。湖中的表要么返回不准確的數據,要么文件損壞並且查詢完全停止運行。
必須保持對插入生產數據集的任何數據的質量和屬性有充分的認識。
更多數據湖相關技術與方案分享,歡迎關注 大數據流動

相關技術交流群已經成立,歡迎大家掃碼加入
