banner
武大胆

武大胆

不能为这个世界留下些什么,但是却想在这个世界留下些什么!
bilibili
x
discord user
email
steam

大數據篇-大數據技術綜述

發展歷程#

新事物的產生根植於舊矛盾的解決與新矛盾的誕生,其本質是矛盾運動的階段性結果;

矛盾是事物內在的普遍屬性,而發展是通過矛盾的不斷 “產生 - 解決 - 再生產” 實現的動態過程。

大數據技術的產生本質上是存儲與計算的矛盾,而發展則是 “數據規模的爆炸式增長與計算效率、實時性需求之間的持續博弈”,這一矛盾推動技術不斷革新。

數據規模膨脹 vs 存儲與計算能力不足#

  • 矛盾本質:傳統單機系統無法承載指數級增長的數據量(從 TB 到 PB 甚至 EB 級)。
  • 技術突破
    • 分佈式存儲(如 HDFS、雲存儲)將數據分散到多節點,解決存儲瓶頸。
    • 分佈式計算框架(如 MapReduce、Spark)通過並行處理提升計算吞吐量。

批處理延遲 vs 實時性需求#

  • 矛盾本質:早期 Hadoop 僅支持離線批處理(小時 / 天級延遲),但業務需要秒級甚至毫秒級響應。
  • 技術突破
    • 內存計算(Spark)減少磁碟 I/O,提升批處理速度。
    • 流處理引擎(Flink、Kafka Streams)實現 “數據在流動中計算”,滿足實時分析需求。

數據多樣性 vs 處理範式單一性#

  • 矛盾本質:結構化、半結構化、非結構化數據(文本、圖像等)的複雜性,與傳統數據庫的單一處理模式不兼容。
  • 技術突破
    • 多模態存儲:NoSQL(如 MongoDB)、數據湖(如 Delta Lake)支持靈活的數據模型。
    • 混合計算引擎:Spark 支持批處理、流處理、圖計算和機器學習,實現 “一棧式” 處理。

資源靜態分配 vs 動態彈性需求#

  • 矛盾本質:固定集群資源導致利用率低,無法應對業務波動。
  • 技術突破
    • 雲原生架構:Kubernetes 實現容器化彈性擴縮容,Serverless(如 AWS Lambda)按需分配資源,降低成本。

集中式治理 vs 分佈式複雜性#

  • 矛盾本質:數據分散在多個系統(數據庫、數據湖、流平台)中,難以統一管理和保障質量。
  • 技術突破
    • 數據編織(Data Fabric):通過元數據管理(如 Apache Atlas)、自動化管道(如 Airflow)實現跨平台數據協同。
    • 湖倉一體(Lakehouse):Delta Lake 等工具融合數據湖的靈活性與數倉的治理能力。

總結 - 矛盾驅動創新#

大數據技術的演進本質是 **“不斷打破舊平衡,建立新平衡”** 的過程:

  • Hadoop 的 “以存儲換計算”,到 Spark 的 “以內存換速度”
  • 批處理的確定性,到 流處理的不確定性應對
  • 固定資源分配,到 雲原生的彈性伸縮

每一次矛盾的激化都催生了新技術的誕生,而未來趨勢(如邊緣計算、AI 原生數據平台)仍將圍繞這一核心矛盾展開。


技術體系#

生態架構#

image

數據採集層#

  • 目標:從多源(數據庫、日誌、傳感器等)高效採集數據。
  • 工具
    • 批量採集:Sqoop(關係數據庫 ↔ Hadoop)、Flume(日誌收集)。
    • 實時採集:Kafka(分佈式消息隊列)、Debezium(CDC 變更捕獲)。
    • 爬蟲:Scrapy、Apache Nutch(網頁數據抓取)。

數據存儲層#

  • 分佈式文件系統
    • HDFS:Hadoop 生態核心存儲,適合冷數據。
    • 對象存儲:AWS S3、阿里雲 OSS(雲原生場景)。
  • NoSQL 數據庫
    • 鍵值型:Redis(內存緩存)、DynamoDB(高並發)。
    • 列存儲:HBase(海量隨機讀寫)、Cassandra(高可用)。
    • 文檔型:MongoDB(靈活 JSON 結構)。
  • 數據湖:Delta Lake、Iceberg(支持 ACID 事務的湖倉一體架構)。

資源管理與調度層#

  • 集群管理
    • YARN:Hadoop 資源調度器。
    • Kubernetes:容器化編排,支持混合雲部署。
  • 工作流引擎
    • Airflow:任務依賴管理與定時調度。
    • DolphinScheduler:國產可視化調度工具。

數據計算層#

  • 批處理
    • MapReduce:Hadoop 原生計算模型,適合離線任務。
    • Spark SQL:兼容 SQL 語法,優化複雜 ETL 流程。
  • 流處理
    • Flink:低延遲流處理,支持狀態管理和窗口計算。
    • Spark Streaming:微批處理,與 Spark 生態無縫集成。
  • 交互式查詢
    • Presto:多數據源聯邦查詢,適合即席分析。
    • ClickHouse:列式存儲,OLAP 場景极速響應。

數據分析與挖掘層#

  • 機器學習
    • Spark MLlib:分佈式機器學習庫。
    • TensorFlow/PyTorch:深度學習框架,與大數據平台集成(如 Horovod)。
  • 數據可視化
    • Tableau/Power BI:商業智能工具。
    • Superset/Grafana:開源可視化儀表盤。
  • 圖計算:Neo4j(圖數據庫)、GraphX(Spark 圖處理庫)。

數據治理與安全#

  • 元數據管理:Apache Atlas(數據血緣追蹤)。
  • 數據質量:Great Expectations(數據校驗框架)。
  • 安全合規:Kerberos(認證)、Ranger(權限控制)、GDPR 合規工具。

數據分層#

在大數據架構中,數據分層(Data Layering)是一種將數據按處理階段、用途和訪問需求劃分為不同層次的設計方法,旨在提高數據管理效率、降低冗餘、優化性能,並支持多樣化的分析場景。

image

原始數據層#

數據運營層:Operation Data Store 數據準備區,也稱為貼源層。

輸入表:無(直接對接數據源)
輸出表:原始數據表(Raw Data Tables)
示例

  • 用戶點擊日誌表(ods_user_click_log)
{
  "timestamp": "2023-10-01T14:22:35+08:00",
  "user_id": "u_12345",
  "event": "click_product_detail",
  "device": "Android 12|Xiaomi 13 Pro",
  "ip": "192.168.1.100",
  "extra": "{'product_id':'p_678', 'page_num':3}"
}
  • MySQL 訂單表快照(ods_order_mysql)
order_iduser_idamountcurrencycreate_timestatus
1001u_123299.00CNY2023-10-01 14:25:00pending
1002u_456150.50USD2023-10-01 14:30:00completed

特點:保留原始數據的所有字段,包含冗餘、未清洗的信息。


清洗與標準化層#

輸入表ods_user_click_log, ods_order_mysql
輸出表:清洗後的結構化表
示例

  • 標準化點擊日誌表(cleaned_user_click)
log_idevent_timeuser_idevent_typedevice_osdevice_modelip_hashproduct_idpage_num
12023-10-01 14:22:3512345product_detailAndroidXiaomi 13 Proa1b2c3d4p_6783

處理邏輯

  • 解析extra字段中的 JSON,提取product_idpage_num
  • user_id統一為純數字(去除前綴u_)。
  • ip字段進行哈希脫敏。
  • 拆分device字段為操作系統和設備型號。
  • 統一訂單表(cleaned_order)
order_iduser_idamount_cnycreate_timestatus_code
1001123299.002023-10-01 14:25:001
10024561053.502023-10-01 14:30:002

處理邏輯

  • 轉換貨幣為 CNY(假設 1 USD=7.0 CNY)。
  • 映射狀態碼(pending→1, completed→2)。

整合與建模層#

數據細節層:data warehouse details,DWD/Dimensional Model
該層是業務層和數據倉庫的隔離層,保持和 ODS 層一樣的數據顆粒度;主要是對 ODS 數據層做一些數據的清洗和規範化的操作,比如去除空數據、髒數據、離群值等。
數據中間層:Data Warehouse Middle,DWM;
該層是在 DWD 層的數據基礎上,對數據做一些輕微的聚合操作,生成一些列的中間結果表,提升公共指標的重用性,減少重複加工的工作。

輸入表cleaned_user_click, cleaned_order
輸出表:維度表 + 事實表
示例

  • 維度表:用戶維度(dim_user)
user_idnamegenderagereg_datevip_level
123張三M282022-01-012
456李四F352021-05-153
  • 事實表:訂單交易事實表(fact_order)
order_iduser_idproduct_idamountorder_timepayment_time
1001123p_678299.002023-10-01 14:25:002023-10-01 14:26:05
1002456p_9011053.502023-10-01 14:30:002023-10-01 14:31:20

建模邏輯

  • 通過user_id關聯事實表與維度表,支持 “訂單金額按性別分析” 等場景。

匯總與聚合層#

數據服務層:Data Warehouse Service,DWS/Data Mart
該層是基於 DWM 上的基礎數據,整合匯總成分析某一個主題域的數據服務層,一般是寬表,用於提供後續的業務查詢,OLAP 分析,數據分發等。
一般來說,該層的數據表會相對較少;一張表會涵蓋比較多的業務內容,由於其字段較多,因此一般也會稱該層的表為寬表。

輸入表fact_order, dim_user
輸出表:預聚合寬表
示例

  • 每日用戶消費匯總表(dws_user_daily_spend)
dateuser_idgendertotal_amountorder_countavg_amount
2023-10-01123M299.001299.00
2023-10-01456F1053.5011053.50

計算邏輯

  • 按天聚合每個用戶的訂單總金額、訂單數、平均金額。
  • 關聯維度表獲取性別字段,支持快速生成 “不同性別用戶消費對比” 報表。

應用與服務層#

數據應用層:Application Data Service,ADS;
該層主要是提供給數據產品和數據分析使用的數據,一般會存放在 ES、Redis、PostgreSql 等系統中供線上系統使用;也可能存放在 hive 或者 Druid 中,供數據分析和數據挖掘使用,比如常用的數據報表就是存在這裡的。

輸入表dws_user_daily_spend
輸出表:業務接口或報表
示例

  • BI 報表數據(ads_bi_gender_spend)
日期性別總消費金額訂單數
2023-10-01299.001
2023-10-011053.501
  • API 響應(用戶畫像接口)
{
  "user_id": 123,
  "last_purchase_date": "2023-10-01",
  "total_spend_7d": 299.00,
  "favorite_category": "電子產品"
}

特點:數據高度聚合,字段命名符合業務術語,可直接用於展示或決策。


ETL#

核心定義#

ETL 是數據從源系統到目標存儲的標準化流程,包含三個階段:

  1. Extract(抽取):從異構數據源提取原始數據。
  2. Transform(轉換):清洗、標準化、加工數據。
  3. Load(加載):將處理後的數據寫入目標存儲。

技術棧與工具#

階段典型工具
ExtractSqoop、Flume、Kafka、Debezium(CDC)、AWS Glue
TransformSpark、Flink、dbt、Python Pandas、SQL
LoadHive、HBase、ClickHouse、Snowflake、Redis、Elasticsearch

參考#

詳解數倉中的數據分層:ODS、DWD、DWM、DWS、ADS

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。