- 數據質量管理:數據可靠性與數據質量問題解決之道
- (美)巴爾·摩西等
- 1484字
- 2024-08-19 16:20:03
2.3.2 數據湖:文件級別的操作
數據湖是現代數據系統另一種日益流行的存儲和計算選擇,它也依賴于高質量的分析型數據來提供最佳結果。
與數據倉庫不同,數據湖架構允許“讀時模式”訪問。這意味著我們可以在準備使用數據時再推斷數據的結構。
數據湖是數據倉庫的DIY版本,允許團隊根據系統需求選擇自己想要使用的各種元數據、存儲和計算技術。數據湖非常適合希望構建定制化平臺的數據團隊,通常由少數(或更多)數據工程師提供支持。借助數據湖,數據科學家、機器學習工程師和數據工程師可以從更大的數據池中提取半結構化數據和非結構化數據。
數據湖的概念最早是由軟件公司Pentaho的創始人兼前首席技術官James Dixon提出的,他將其描述為“在一個更自然的環境中的一大片水域。數據湖的內容從源頭涌入并填滿整個湖泊,湖的不同用戶都可以來檢查、探索或取樣”。
非常早期的數據湖主要建立在Apache Hadoop MapReduce和HDFS(Hadoop Distributed File System)上,利用Apache Hive通過SQL引擎來查詢數據。在21世紀10年代初期,Apache Spark讓數據湖更加穩定,為數據湖中大型數據集的分布式計算提供了一個通用框架。
數據湖的一些通用特征包括:
解耦存儲和計算
此功能不僅可以節省大量成本,而且有助于解析并豐富數據以進行實時流式傳輸和查詢。
支持分布式計算
分布式計算有助于提高大規模數據處理的性能,因為它允許更好的分段查詢性能、更容錯的設計和更佳的并行數據處理能力。
定制化和互操作性
由于其“即插即用”的特性,隨著公司數據需求的演進和成熟,數據湖可以讓棧中的不同元素輕松地協同工作,從而支持數據平臺的可擴展性。
主要基于開源技術進行構建
這有助于降低供應商被鎖定的風險并提供強大的定制功能,對于擁有大型數據工程團隊的公司來說非常適用。
處理非結構化或弱結構化數據的能力
數據湖可以支持原始數據,這意味著在處理數據時具有更大的靈活性,非常適合數據科學家和數據工程師。使用原始數據可以更好地控制聚合與計算。
支持復雜的非SQL編程模型
與大多數數據倉庫不同,數據湖支持Apache Hadoop、Apache Spark、PySpark等高級數據科學和機器學習框架。
雖然數據倉庫提供的結構讓數據團隊可以輕松有效地運用數據(即收集分析洞察并支持機器學習能力),但這種結構會使它們在某些應用程序中不夠靈活且成本高昂。另外,數據湖具有無限的靈活性和定制化能力來支持廣泛的用例,但隨著靈活性的提高,還會出現許多與數據組織和治理相關的其他問題。
以下是數據團隊嘗試在其數據湖環境中獲得更可靠的數據時所面臨的一些突出挑戰:
數據完整性
數據湖中的資源在文件級別進行操作時無法保證其數據模式。如果你在數據湖中轉換數據時對它的模式有些假設,那么你正在進行一種稱作“盲目ETL”(blind ETL)的危險操作。由于不可預見的上游變化,轉換可能會在任何時候失敗。
沼澤化
沼澤化是指數據湖隨時間推移產生技術負債和隱性知識的趨勢。通常來說,你必須依靠熟練的數據工程師或數據科學家來了解特定數據所在的位置、利益相關方是誰,并預計數據將如何變化。但過于依賴他們會讓數據湖變得“沼澤化”,這意味著沒人能完成任何工作,因為數據認知所需的學習成本實在是太高了。
更多端點
數據可靠性通常是數據湖中一個更大的挑戰,因為人們可以通過更多方式來收集、操作和轉換數據。管道中的步驟越多,出錯的可能性就越大。
數據湖通常被用作大量非結構化數據的收集點,例如應用程序數據或用于某些機器學習任務而自動生成的數據。這些數據可以在數據湖中保持其原始格式,也可以通過像AW S Glue這樣的數據集成層提供給可能會作為上游資源的數據倉庫或商業智能工具。
較小的團隊可能會使用數據湖作為唯一的數據存儲工具,以實現快速移動的目的,而不是依賴強大的基礎設施——盡管這種做法的從業者應該始終警惕“數據沼澤”問題。
- 云數據中心基礎
- SQL入門經典(第5版)
- 劍破冰山:Oracle開發藝術
- Access 2016數據庫技術及應用
- 揭秘云計算與大數據
- 區塊鏈通俗讀本
- UDK iOS Game Development Beginner's Guide
- 網站數據庫技術
- 圖數據實戰:用圖思維和圖技術解決復雜問題
- IPython Interactive Computing and Visualization Cookbook(Second Edition)
- 一本書講透Elasticsearch:原理、進階與工程實踐
- 數據庫技術及應用
- SQL Server 2012實施與管理實戰指南
- Internet of Things with Python
- Scratch 2.0 Game Development HOTSHOT