發展歷程#
新事物的產生根植於舊矛盾的解決與新矛盾的誕生,其本質是矛盾運動的階段性結果;
矛盾是事物內在的普遍屬性,而發展是通過矛盾的不斷 “產生 - 解決 - 再生產” 實現的動態過程。
大數據技術的產生本質上是存儲與計算的矛盾,而發展則是 “數據規模的爆炸式增長與計算效率、實時性需求之間的持續博弈”,這一矛盾推動技術不斷革新。
數據規模膨脹 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 原生數據平台)仍將圍繞這一核心矛盾展開。
技術體系#
生態架構#
數據採集層#
- 目標:從多源(數據庫、日誌、傳感器等)高效採集數據。
- 工具:
- 批量採集: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)是一種將數據按處理階段、用途和訪問需求劃分為不同層次的設計方法,旨在提高數據管理效率、降低冗餘、優化性能,並支持多樣化的分析場景。
原始數據層#
數據運營層: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_id | user_id | amount | currency | create_time | status |
---|---|---|---|---|---|
1001 | u_123 | 299.00 | CNY | 2023-10-01 14:25:00 | pending |
1002 | u_456 | 150.50 | USD | 2023-10-01 14:30:00 | completed |
特點:保留原始數據的所有字段,包含冗餘、未清洗的信息。
清洗與標準化層#
輸入表:ods_user_click_log
, ods_order_mysql
輸出表:清洗後的結構化表
示例:
- 標準化點擊日誌表(cleaned_user_click)
log_id | event_time | user_id | event_type | device_os | device_model | ip_hash | product_id | page_num |
---|---|---|---|---|---|---|---|---|
1 | 2023-10-01 14:22:35 | 12345 | product_detail | Android | Xiaomi 13 Pro | a1b2c3d4 | p_678 | 3 |
處理邏輯:
- 解析
extra
字段中的 JSON,提取product_id
和page_num
。 - 將
user_id
統一為純數字(去除前綴u_
)。 - 對
ip
字段進行哈希脫敏。 - 拆分
device
字段為操作系統和設備型號。
- 統一訂單表(cleaned_order)
order_id | user_id | amount_cny | create_time | status_code |
---|---|---|---|---|
1001 | 123 | 299.00 | 2023-10-01 14:25:00 | 1 |
1002 | 456 | 1053.50 | 2023-10-01 14:30:00 | 2 |
處理邏輯:
- 轉換貨幣為 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_id | name | gender | age | reg_date | vip_level |
---|---|---|---|---|---|
123 | 張三 | M | 28 | 2022-01-01 | 2 |
456 | 李四 | F | 35 | 2021-05-15 | 3 |
- 事實表:訂單交易事實表(fact_order)
order_id | user_id | product_id | amount | order_time | payment_time |
---|---|---|---|---|---|
1001 | 123 | p_678 | 299.00 | 2023-10-01 14:25:00 | 2023-10-01 14:26:05 |
1002 | 456 | p_901 | 1053.50 | 2023-10-01 14:30:00 | 2023-10-01 14:31:20 |
建模邏輯:
- 通過
user_id
關聯事實表與維度表,支持 “訂單金額按性別分析” 等場景。
匯總與聚合層#
數據服務層:Data Warehouse Service,DWS/Data Mart;
該層是基於 DWM 上的基礎數據,整合匯總成分析某一個主題域的數據服務層,一般是寬表,用於提供後續的業務查詢,OLAP 分析,數據分發等。
一般來說,該層的數據表會相對較少;一張表會涵蓋比較多的業務內容,由於其字段較多,因此一般也會稱該層的表為寬表。
輸入表:fact_order
, dim_user
輸出表:預聚合寬表
示例:
- 每日用戶消費匯總表(dws_user_daily_spend)
date | user_id | gender | total_amount | order_count | avg_amount |
---|---|---|---|---|---|
2023-10-01 | 123 | M | 299.00 | 1 | 299.00 |
2023-10-01 | 456 | F | 1053.50 | 1 | 1053.50 |
計算邏輯:
- 按天聚合每個用戶的訂單總金額、訂單數、平均金額。
- 關聯維度表獲取性別字段,支持快速生成 “不同性別用戶消費對比” 報表。
應用與服務層#
數據應用層:Application Data Service,ADS;
該層主要是提供給數據產品和數據分析使用的數據,一般會存放在 ES、Redis、PostgreSql 等系統中供線上系統使用;也可能存放在 hive 或者 Druid 中,供數據分析和數據挖掘使用,比如常用的數據報表就是存在這裡的。
輸入表:dws_user_daily_spend
輸出表:業務接口或報表
示例:
- BI 報表數據(ads_bi_gender_spend)
日期 | 性別 | 總消費金額 | 訂單數 |
---|---|---|---|
2023-10-01 | 男 | 299.00 | 1 |
2023-10-01 | 女 | 1053.50 | 1 |
- API 響應(用戶畫像接口)
{
"user_id": 123,
"last_purchase_date": "2023-10-01",
"total_spend_7d": 299.00,
"favorite_category": "電子產品"
}
特點:數據高度聚合,字段命名符合業務術語,可直接用於展示或決策。
ETL#
核心定義#
ETL 是數據從源系統到目標存儲的標準化流程,包含三個階段:
- Extract(抽取):從異構數據源提取原始數據。
- Transform(轉換):清洗、標準化、加工數據。
- Load(加載):將處理後的數據寫入目標存儲。
技術棧與工具#
階段 | 典型工具 |
---|---|
Extract | Sqoop、Flume、Kafka、Debezium(CDC)、AWS Glue |
Transform | Spark、Flink、dbt、Python Pandas、SQL |
Load | Hive、HBase、ClickHouse、Snowflake、Redis、Elasticsearch |