2025-06-01-Hive 技術及應用介紹

Hive 技術及應用介紹

參考資料

  • Hive 技術原理
  • Hive 架構及應用介紹
  • Hive - 小海哥哥 de - 博客園
  • https://cwiki.apache.org/confluence/display/Hive/Home(官方文檔)

Apache Hive 是基于 Hadoop 構建的數據倉庫工具,它為海量結構化數據提供類 SQL 的查詢能力,并將查詢翻譯為 MapReduce、Tez 或 Spark 作業執行。Hive 簡化了大數據批量分析的使用門檻,讓熟悉 SQL 的開發者能夠在 Hadoop 生態上輕松進行 ETL、OLAP 和 BI 分析。

1749361719853NEWubQsOsob8hwxG164ce9SWnxe.png

Hive 的執行流程

Hive 的背景與定位

  • 背景:隨著大數據時代到來,Hadoop 分布式文件系統(HDFS)與 MapReduce 為存儲與計算提供了高吞吐的能力,但原生 MapReduce 編程復雜、開發成本高。
  • 定位:Hive 通過 HiveQL(類似 SQL 的查詢語言)屏蔽 MapReduce/Tez/Spark 的底層細節,將查詢語句編譯為執行計劃并自動運行,適合批量離線分析,主要面向 ETL、數據聚合與多維分析。

Hive 在 Hadoop 生態系統中的位置

1749361730854XD25bKuMWocEPtxmRBQc1JaOn6c.png

Hive 的運行深度依賴于 Hadoop 的核心生態,包括其分布式文件系統 HDFS、計算框架 MapReduce 以及資源調度器 YARN,因此可以將 Hive 理解為一種構建在 Hadoop 之上的 “SQL on Hadoop” 應用。其核心工作機制是將用戶輸入的類 SQL 查詢語句轉換為底層的 MapReduce 任務來執行,也正是因為多了這一步從 SQL 到 MapReduce 的轉化開銷,所以在同等條件下,Hive 查詢的執行效率通常會低于直接編寫原生 MapReduce 程序。

Hive 體系結構

1749361740853ZjDRb5l8hozhtExpjCrcgQXFnzd.png
1749361749853Rykybe2KzostXMxQrA2cx8pgnWh.png

Hive 的核心組件包括:

  1. Hive 客戶端(CLI、Beeline、JDBC/ODBC)

    • 支持交互式提交 HiveQL,或通過 JDBC/ODBC 接入 BI 工具(如 Tableau、Power BI)。
  2. Driver

    • 接收并解析 HiveQL,生成抽象語法樹(AST),再進行優化和編譯,生成執行計劃(Execution Plan)。
  3. Compiler / Optimizer

    • 將 AST 轉為邏輯計劃,應用謂詞下推、列裁剪等優化,再生成物理計劃,拆分為一個或多個 MapReduce/Tez/Spark 任務。
  4. Execution Engine

    • 將物理計劃提交給底層執行框架(MapReduce、Tez 或 Spark),監控任務狀態并返回結果。
  5. Metastore

    • 存儲表結構、分區信息、列類型、SerDe、統計信息等元數據,通常使用 MySQL、PostgreSQL 或 Derby。

數據模型與存儲格式

1749361758853Z6E0bN8eQofC9kxqkCmcz14ynBg.png

  • 表與分區
    • Hive 將 HDFS 文件組織為表(Table)、分區(Partition)和桶(Bucket)。分區通常按日期、地域等字段維度存儲,減少查詢掃描量。

數據庫:創建表時如果不指定數據庫,則默認為 default 數據庫。
表:物理概念,實際對應 HDFS 上的一個目錄。
分區:對應所在表所在目錄下的一個子目錄。
桶:對應表或分區所在路徑的一個文件

  • 文件格式
    • 支持文本(Text)、SequenceFile、ORC、Parquet、Avro 等列式與行式格式。列式格式(ORC、Parquet)通過壓縮和列裁剪大幅提升查詢性能。
-- 創建按日期分區的 ORC 表
CREATE EXTERNAL TABLE logs (user_id BIGINT,action  STRING,ts      TIMESTAMP
)
PARTITIONED BY (dt STRING)
STORED AS ORC
LOCATION '/data/logs/';
  • SerDe(序列化/反序列化)
    • 通過自定義 SerDe,Hive 能解析任意復雜格式(JSON、CSV、XML 等)。

HiveQL 基本用法

  • www.slideshare.net

數據操作

創建表
CREATE TABLE IF NOT EXISTS example.employee(
Id INT COMMENT 'employeeid',
Company STRING COMMENT 'your company',
Money FLOAT COMMENT 'work money',)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;

可以發現就是對應的 SQL 語句

查詢
SELECT id, name FROM employee WHERE salary >= 10000;
SELECT department, avg(salary) FROM employee GROUP BY department;
SELECT id, salary, date FROM employee_a UNION ALL
SELECT id, salary, date FROM employee_b;
-- 加載數據到表(分區)
ALTER TABLE logs ADD PARTITION (dt='2025-06-01');
LOAD DATA INPATH '/raw/logs/2025-06-01/*.log'
INTO TABLE logs PARTITION (dt='2025-06-01');
-- 簡單查詢
SELECT user_id, COUNT(*) AS cnt
FROM logs
WHERE dt='2025-06-01'
GROUP BY user_id
ORDER BY cnt DESC
LIMIT 10;

窗口函數與高級特性

-- 統計每個用戶每天的前 3 次操作
SELECT dt, user_id, action, ts,ROW_NUMBER() OVER (PARTITION BY dt, user_id ORDER BY ts) AS rn
FROM logs
WHERE dt >= '2025-06-01' AND dt <= '2025-06-07'
AND rn <= 3;

與 Spark 集成

在 Hive on Spark 模式下,HiveQL 會被提交到 Spark 引擎執行,兼享 Spark 的低延遲與豐富算子。

-- 啟動 Hive 使用 Spark 執行引擎
set hive.execution.engine=spark;

典型應用場景

  1. ETL 批量處理

    • 定時從日志系統、關系庫導入數據,清洗、聚合后寫入 Hive 數據倉庫,用于下游 BI 報表。
  2. 多維 OLAP 分析

    • 基于 Hive 的 HiveCube 或第三方 OLAP 引擎(如 Apache Kylin)實現大規模多維分析。
  3. 數據探索與報表

    • 數據分析師通過 Beeline 或 BI 工具(Tableau、Power BI)直接查詢 Hive 表。
  4. 機器學習特征工程

    • 使用 HiveQL 快速統計用戶行為特征,然后將結果導出到 HDFS,再由 Spark/MLlib 訓練模型。

性能優化要點

  • 合理分區

    • 按查詢高頻過濾字段分區(如按日期、地域),減少文件掃描。
  • 使用列式存儲

    • ORC/Parquet 格式支持列裁剪、矢量化讀取和壓縮。
  • 開啟成本模型優化

SET hive.cbo.enable=true;
  • 利用 Tez/Spark

    • 將執行引擎換為 Tez 或 Spark,降低 MapReduce 的啟動開銷與 I/O 序列化成本。
  • 小文件合并

    • 小文件過多會導致任務過多,建議合并或使用 HDFS 合并工具。

示例:用戶次日留存率統計

-- 1. 計算用戶首次活躍日期
CREATE TABLE user_first (user_id BIGINT,first_dt STRING
)
STORED AS ORC
AS
SELECT user_id, MIN(dt) AS first_dt
FROM logs
GROUP BY user_id;
-- 2. 次日留存:join 當天活躍用戶與第一天活躍日期后一天
SELECT f.first_dt AS reg_dt,l.dt        AS act_dt,COUNT(DISTINCT f.user_id)      AS reg_users,COUNT(DISTINCT l.user_id)      AS retained_users,ROUND(COUNT(DISTINCT l.user_id) / COUNT(DISTINCT f.user_id), 4) AS retention_rate
FROM user_first f
JOIN logs lON f.user_id = l.user_idAND l.dt = date_add(f.first_dt, 1)
GROUP BY f.first_dt, l.dt
ORDER BY f.first_dt;

優缺點

1749361767853GqNBbN8ARo70Ijxlv3dcyQ5rn0v.png

1749361778853RwFcbEGI7o1p7cxmwTNcbjjdn7c.png

總結

  • Hive 以 SQL 友好的方式在 Hadoop 集群上實現批量離線分析,適用于 ETL、OLAP、報表和特征工程。
  • 通過 Metastore 管理元數據,通過多種文件格式和執行引擎(MapReduce/Tez/Spark)兼顧兼容性與性能。
  • 合理分區、列式存儲和成本模型優化可顯著提升查詢性能。
  • Hive 與 Spark、Flink、Presto 等工具生態配合,為大數據平臺提供靈活多樣的計算選擇。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84674.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84674.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84674.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python爬蟲(52)Scrapy-Redis分布式爬蟲架構實戰:IP代理池深度集成與跨地域數據采集

目錄 一、引言&#xff1a;當爬蟲遭遇"地域封鎖"二、背景解析&#xff1a;分布式爬蟲的兩大技術挑戰1. 傳統Scrapy架構的局限性2. 地域限制的三種典型表現 三、架構設計&#xff1a;Scrapy-Redis 代理池的協同機制1. 分布式架構拓撲圖2. 核心組件協同流程 四、技術實…

HashMap真面目

背景 今天數據采集項目碰到一個性能問題&#xff0c;3000多個采集點&#xff0c;每一個采集點每秒送一個數據&#xff0c;接收到數據之后首先需要內存中做緩存&#xff0c;之后有一系列的業務分析處理&#xff0c;所以&#xff0c;對系統性能要求比較高。 最近幾天發現服務器…

STM32CubeMX-H7-19-ESP8266通信(中)--單片機控制ESP8266實現TCP地址通信

前言 上篇文章我們已經能夠使用串口助手實現esp8266的幾種通信&#xff0c;接下來我們使用單片機控制實現。這篇文章會附帶教程&#xff0c;增加.c和,.h&#xff0c;把串口和定時器放到對應的編號&#xff0c;然后調用初始化就可以使用了。 先講解&#xff0c;然后末尾再放源碼…

歐盟RED網絡安全標準EN 18031-2的要求

歐盟RED網絡安全標準EN 18031-2的要求 歐盟RED網絡安全標準EN 18031-2的要求 ? 適用產品范圍&#xff1a; 能夠處理個人隱私數據的可聯網無線電設備。 不具備聯網能力的三類無線電設備&#xff1a;玩具、兒童護理類設備、可穿戴類設備。 主要測試與評估內容&#xff1a; EN…

一起了解--CAST函數

CAST函數在SQL中用途廣泛&#xff0c;不僅可以轉換為數值類型&#xff0c;還可以在多種場景下用于數據類型轉換。以下是一些常見的用途和示例&#xff1a; 類型轉換 使用CAST函數可以在查詢數據庫時根據需要調整數據格式或類型 CAST(expression AS target_type) expression …

(50)課71:查看指定 query_id 的 SQL 語句的執行各個階段的耗時情況 show profile for query query_id;

&#xff08;137&#xff09;查看指定 query_id 的 SQL 語句的執行各個階段的耗時情況 show profile for query query_id &#xff1a; &#xff08;138&#xff09; 謝謝

AWS中國云的定時任務(AWS EventBridge+AWS Lambda)

問題 最近有一個每天在凌程定時同步數據給第三方系統的需求。需要使用AWS EventBridge和AWS Lambda結合的方式來同步數據給第三方系統。 思路 使用Python的ORM框架(例如&#xff1a;SQLAlchemy)查詢到需要同步的數據&#xff0c;然后&#xff0c;使用http客戶端&#xff08;…

開源PSS解析器

本章介紹開源PSS解析工具&#xff1a; 1. PSSTools語法解析器&#xff0c;這個工具僅包含一個語法解析器。 2. gen-pss&#xff0c;實現了語法解析器&#xff0c;和簡單的Test realization&#xff0c;沒有約束求解器。 本文將改造并使用gen-pss來生成C測試用例&#xff0…

《linux2.4 內存管理》:第 2 章 描述物理內存

Linux 適用于多種體系結構&#xff0c;需用體系結構無關方式描述內存。本章介紹影響 VM 行為的內存簇、頁面和標志位結構。 非一致內存訪問&#xff08;NUMA&#xff09;&#xff1a;在 VM 中&#xff0c;大型機器內存分簇&#xff0c;依簇與處理器距離&#xff0c;訪問代價不…

數據湖是什么?數據湖和數據倉庫的區別是什么?

目錄 一、數據湖是什么 &#xff08;一&#xff09;數據湖的定義 &#xff08;二&#xff09;數據湖的特點 二、數據倉庫是什么 &#xff08;一&#xff09;數據倉庫的定義 &#xff08;二&#xff09;數據倉庫的特點 三、數據湖和數據倉庫的區別 &#xff08;一&#…

Smart Form Adobe form

強制更改內表:TNAPR se16-> Smart Form總覽 Smart form 變量格式說明: &symbol& (括號中,小寫字母為變量) &symbol& 屏蔽從第一位開始的N位 &symbol (n)& 只顯示前N位 &symbol (S)& 忽略正負號 &symbol (<)& 符號在…

Linux 內核學習(11) --- Linux 鏈表結構

文章目錄 Linked List 簡介Linked List 操作方法鏈表頭結點初始化創建鏈表節點添加節點到鏈表中從鏈表中刪除節點從鏈表中替換節點移動鏈表中的節點檢查鏈表鏈表遍歷demo 實例 Linked List 簡介 鏈表是一種數據結構&#xff0c;由一系列節點組成&#xff0c;每個節點包含數據部…

一分鐘部署nginx-公網IP訪問內網

前言 服務器內網下有nacos cluster&#xff08;3個節點&#xff09;&#xff0c;開放到公網并指定公司網絡訪問需要配置三次IP白名單&#xff0c;因此需要簡化流程&#xff0c;通過nginx反向代理只配置1次IP白名單。 現在通過docker容器模擬環境&#xff0c;準備1臺云服務器。…

C 語言分支與循環

目錄 一. 分支結構&#xff1a;if 語句與 switch 語句 1. if 語句 2. switch 語句 二、關系操作符、條件操作符與邏輯操作符 1. 關系操作符 2. 條件操作符 3. 邏輯操作符 三、循環結構&#xff1a;while 循環、for 循環與 do - while 循環 1. while 循環 2. for 循…

【一文看懂Spring Boot2.x升級Spring Boot3.x】springboot2.x升級springboot3.x

springboot2.x升級springboot3.x 背景升級jdk版本為17以上springboot版本修改javax包更新mybatis-plus升級swagger升級springdocspringdoc配置背景 當前項目是springboot2.5.9版本的springboot+mybatis-plus項目,需要升級到springboot3.5.0項目。 升級jdk版本為17以上 Spri…

陽臺光伏防逆流電表革新者:安科瑞ADL200N-CT/D16-WF

——為家庭能源管理提供高精度、智能化解決方案 一、陽臺光伏爆發的背景 在全球能源轉型與碳中和目標的驅動下&#xff0c;陽臺光伏正以革命性姿態重塑家庭能源消費模式。從歐洲的“微型發電站”到中國的“萬億藍海”&#xff0c;這一創新技術不僅撬動了能源市場的結構性變革…

美團完整面經

面試崗位 面試的崗位 - 2025春季校招 【轉正實習】軟件服務工程師-后端方向&#xff08;成都 - 軟硬件服務-SaaS事業部&#xff09; 一面&#xff08;業務初試 - 30min&#xff09; 問題 自我介紹 Java基礎 HashMap底層用的數據結構是什么&#xff1f;是線程安全的嗎&…

pysnmp 操作流程和模塊交互關系的可視化總結

1. SNMP GET 操作序列圖 #mermaid-svg-KALvv8WkHJTsNCeu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-KALvv8WkHJTsNCeu .error-icon{fill:#552222;}#mermaid-svg-KALvv8WkHJTsNCeu .error-text{fill:#552222;str…

關于 /proc/net/tcp 與 /proc/$pid/net/tcp 的關系分析

關于 /proc/net/tcp 與 /proc/$pid/net/tcp 的關系分析 1. 基礎概念 在 Linux 系統中&#xff0c;每個進程必定歸屬于一個且僅一個網絡命名空間&#xff08;Network Namespace&#xff09;。這是 Linux 命名空間隔離機制的核心特性之一。 /proc/net/tcp 顯示當前網絡命名空間…

微信小程序 - 保存手機號等信息到通訊錄

主要使用小程序 wx.addPhoneContact 這個api 一、界面 <view class"tab-item" bindtap"addToPhoneContacts">保存</view> 二、js 邏輯文件中 addToPhoneContacts() {wx.addPhoneContact({firstName: this.data.firstName, // 姓名mobilePh…