Hive MetaStore的實現和優化

在大數據領域,數據管理與存儲至關重要,Hive MetaStore(HMS)作為 Hive 數據倉庫的核心組件,承擔著元數據管理的關鍵職責。隨著數據規模不斷膨脹,其性能與穩定性面臨挑戰。本文將深入剖析 HMS 的實現機制,結合 Hive Client、MetaCat 等相關內容展開探討,分析各項操作流程,同時針對 HMS 及 MetaCat 提出優化方案,并闡述與 Spark 的關聯等內容,助力讀者全面掌握 HMS 技術要點。

HMS

相關類圖如下:

圖片

上圖顏色分類

  • 綠色部分是 hive 的

  • 橙色部分是 thrift 框架自動生成的代碼

  • 白色部分是 JDK 的

右邊是 hive meta-store client,兼容了這個客戶端協議的框架,如 spark,會通過 hive meta-store 協議連接過來?
左邊是服務端的實現,主要繼承自ThriftHiveMetastore.Iface,這個類包含了很多操作,CURD庫、表,函數的等等

HMSHandler實現了這個接口,然后調用RawStre去一個具體數據源來獲取信息,或者創建信息?
RowStore的實現類ObjectStore則調用了javax.jdo去連接一個真實的數據庫,完成此操作

jdo 是?ORM?的實現,比 JDBC 更高層一些,這里會有一些表的連接操作,然后會轉為更底層的 SQL?
hive 使用的 ORM 框架為?DataNucleus
幾個包

  • org.apache.thrift.protocol 這個是底層 thrift RPC 相關類,會做序列化操作

  • org.apache.hadoop.hive.metastore.api,這是Iface里面庫、表會引用到這些RPC類,這些類的一些數據結構定義又引用了更下沉的thrift類

  • org.apache.hadoop.hive.metastore.model,將數據中的數據讀取封裝成對象,再將這個對象轉為thrift RPC中的對象

另外 HMS 也有直接使用SQL 鏈接數據庫
ObjectStore引用了MetaStoreDirectSql,這個類中就包含了很多 sql 語句,不通過 ORM 框架,直接訪問
可能是 hive 層做的一些優化

圖片

Hive Client

自定義hiveserver設計
相關類圖

圖片

上圖顏色分類

  • 藍色部分是 自動生成的代碼

  • 深灰色是 client實現

  • 淺灰色是 服務端邏輯

  • 綠色部分是 service 層邏輯

服務端和客戶端 都實現了 Iface 邏輯,也就是 thrift RPC 協議
服務端有不同的傳輸實現類,binary 和 http
業務邏輯調用綠色部分,再委托給 SessionManager獲取一個session
然后執行具體的 sql 任務

MetaCat-相關操作

架構如如下:

大致分類

  • metacat-controller,CURD 元數據的操作

  • partition-controller,分區操作,mysql 不支持這樣的操作

  • tag-controller,可以給表打標簽

  • 其他,如創建 meta-cat試圖等,mysql不支持

查詢 catalog

圖片

結果

圖片

查詢 數據庫

圖片

結果

圖片

查詢表

圖片

結果

圖片

mysql 插件的配置信息:

圖片

給 tomcat 增加幾個 -D 參數

  • -Dmetacat.usermetadata.config.location=/usermetadata.properties的具體路徑

  • -Dmetacat.plugin.config.location=catalog的具體路徑

?HMS 優化

相關類如下:

圖片

顏色分類

  • 灰色部分,HMS相關,其中深灰色是自動生成的代碼

  • 紅色部分,web controller 相關的代碼

  • 綠色部分,service 相關邏輯

  • 藍色部分,操作 HMS 相關的類

  • 黃色部分,外部依賴

Iface 是最核心類,metacat 繼承了這個類,相當于是實現了 HMS 的server端RPC協議
其中一般操作是直接調用了 controller 的類,所以 RPC 和 http 的邏輯實際是統一的
有一些特殊的 controller,如 Tag、metadata、Search,這些會調用外部類
如搜索會直接調用 ES,tag 和 metadata 會調用 MySQL,所以需要一個外部的 ES,MySQL 來支持這些功能

藍色部分是操作 HMS 相關的類,分為表、庫、partition 三個類
這里有兩種情況

  • 淺色部分的實現類,直接調用了 Hive metastore client 來實現的

  • 深藍色部分,繞過了Hice Client,直接鏈接了底層的數據庫,通過SQL 來交互的

所以 metacat 對HMS 的優化,可以理解為

  • 將ORM操作,轉為了直接的 JDBC操作

  • 將ORM生成的多表關聯,改為了很多單表查詢,再加載到內存中做管理,減輕了 數據庫端的計算壓力

  • 本質上相當于對 SQL 做優化

Spark和HMS

相關類圖如下

圖片

灰色的是 spark v1 體系的類
黃色部分是 外部catalog 相關類
v1 中包含了兩個 catalog

  • InMemoryCatalog

  • HiveExternalCatalog

HiveExternalCatalog 調用了 IMetaStoreClient 實現類
也就是通過 hive MS client 向服務端發起了 RPC 請求實現 catalog 查找的

這里使用了多版本機制

圖片

MetaCat 一些優化-對HMS做的優化SQL

這里不通過 HMS,而是通過 JDBC,直接連底層的數據源
DirectSqlDatabase 的主要 SQL 如下:

圖片

DirectSqlGetPartition 的主要 SQL 如下:

圖片

DirectSqlSavePartition 的主要 SQL 如下:

圖片

DirectSqlTable 的主要 SQL 如下:

圖片

ThriftHiveMetastore 相關函數

ThriftHiveMetastore.Iface 的所有函數

圖片

圖片

圖片

org.apache.hadoop.hive.metastore.api 包下的所有類

圖片

圖片

圖片

圖片

圖片

org.apache.hadoop.hive.metastore.api 包下的類

圖片

參考

  • Metacat: Making Big Data Discoverable and Meaningful at Netflix

  • Netflix Metacat: Origin, Architecture, Features & More

  • Data Catalog and crawlers in AWS Glue

相關文章

  • Hive論文

往期推薦

  • Data Ingestion: Architectural Patterns

  • Data engineering at Meta

  • The Life of a Read/Write Query for Apache Iceberg Tables

  • Compaction in Apache Iceberg

  • Spark原理-解析過程和Catalog

  • Janino簡單使用

  • Oracle的CDC工具OpenLogReplicator編譯

  • OpenLogReplicator的一些改動

  • Spark-Streaming 原理

  • Parquet?for?Spark

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

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

相關文章

一文讀懂動態規劃:多種經典問題和思路

一、動態規劃算法的思想與核心概念框架 1. 動態規劃的基本思想 動態規劃(Dynamic Programming, DP)是一種通過將復雜問題分解為重疊子問題,并利用子問題的解來高效解決原問題的方法。其核心思想是避免重復計算,通過存儲中間結果&a…

阿幸課堂隨機點名

代碼功能 這個是一個HTML網頁端,簡單來說就是可以雙擊之后運行進行點名。 當然,不局限于課堂點名 代碼功能 Excel 導入增強: 增加了列選擇器,可以指定從哪一列讀取學生姓名 增加了起始行選擇器,可以跳過標題行或其…

LeetCode 560: 和為K的子數組

題目描述給定一個整數數組 nums 和一個整數 k,請統計并返回該數組中和為 k 的連續子數組的個數。示例 1:輸入:nums [1,1,1], k 2 輸出:2示例 2:輸入:nums [1,2,3], k 3 輸出:2提示&#xff…

微軟官方C++構建工具:歷史演變、核心組件與現代實踐指南

引言:C構建工具的戰略意義 在Windows生態系統中,??微軟C構建工具??(Microsoft C Build Tools)構成了數百萬開發者和應用程序的技術基石。從早期的MS-DOS命令行工具到如今支持??跨平臺開發??的現代化工具鏈,微…

探索Cocos_CoilTheRope:一款創新的游戲引擎擴展項目

探索Cocos_CoilTheRope:一款創新的游戲引擎擴展項目 去發現同類優質開源項目:https://gitcode.com/ 是一個基于Cocos2d-x游戲引擎的擴展庫,旨在為開發者提供一種簡便的方法來實現繩子纏繞和物理交互效果。該項目由DreamLXW開發并維護,為游戲…

爬蟲-正則表達式

在線正則表達式測試OSCHINA.NET在線工具,ostools為開發設計人員提供在線工具,提供jsbin在線 CSS、JS 調試,在線 Java API文檔,在線 PHP API文檔,在線 Node.js API文檔,Less CSS編譯器,MarkDown編譯器等其他在線工具https://tool.oschina.net/…

【BTC】數據結構

目錄 那比特幣區塊鏈的組織形式到底是以鏈表的形式,還是樹的形式呢? 區塊頭和區塊體與默克爾樹的關系 默克爾證明詳解 區塊鏈和鏈表最大的區別就是區塊鏈用哈希指針代替了普通指針。 鏈表的指針就是指向一個結構體在內存中的地址,而哈希指…

飛算 JavaAI:讓 Java 開發效率飆升的智能助手,日常開發全場景應用指南

飛算 JavaAI:讓 Java 開發效率飆升的智能助手 ,日常開發全場景應用指南 在 Java 開發的日常工作中,開發者常常面臨各類重復性勞動與邏輯復雜度挑戰。飛算 JavaAI 作為專注于 Java 領域的智能開發助手,能夠覆蓋從代碼生成到項目維護…

8.2 文檔預處理模塊(二)

一、從0開始:簡易RAG實現 在構建更復雜的 RAG 架構之前,我們先從最基礎的版本入手。整個流程可以分為以下幾個關鍵步驟: 1.數據導入:加載并預處理原始文本數據,為后續處理做好準備。 2.文本分塊:將長文本…

【系統與工具】Linux——Linux簡介、安裝、簡單使用

計算機概論與Linux簡介 計算機概論Linux介紹與版本 Linux的規劃與安裝 Linux與硬件平臺密切相關規劃硬件與Linux安裝 主機規劃與磁盤分區安裝CentOS、多重引導 簡單使用 幫助手冊文本編輯器關機 0. Linux介紹與版本 操作系統(Linux):高效…

從視頻數據到數字孿生:如何構建虛擬與現實的橋梁?

概述 視頻數據與三維場景融合渲染技術通過將動態視頻與靜態三維模型結合,利用GPU加速、WebGL渲染、數字孿生等技術,實現虛擬與現實的交互式融合。該技術廣泛應用于智慧城市、工業監控、虛擬現實、游戲特效等領域,能夠提升場景的直觀性和用戶沉…

【筆記】開源 AI Agent 項目 V1 版本 [新版] 部署 日志

kortix-ai/suna at v1 一、最新版本號 V1 二、部署截圖 本地開發環境仍然依賴于 Poetry 環境&#xff1a; &#xff08;Python>3.11,<3.13&#xff09; 創建本地 Poetry 虛擬環境 Python 多版本環境治理理念驅動的系統架構設計&#xff1a;三維治理、四級隔離、五項自…

NumPy-梯度與導數計算詳解

NumPy-梯度與導數計算詳解一、梯度與導數的基本概念1. 導數的定義2. 梯度的定義二、NumPy中的梯度計算函數&#xff1a;np.gradient()1. 函數語法2. 一維數組的梯度計算3. 多維數組的梯度計算三、基于梯度的導數近似方法1. 前向差分2. 中心差分四、實際應用場景1. 函數優化2. 數…

Redis架構安全

先學習&#xff1a;Redis架構簡介-CSDN博客 Redis壓測 Redis一般應用于高并發的場景&#xff0c;所以一定要對Redis的性能做壓測。 Redis提供了壓測腳本redis-benchmark&#xff0c;可以對Redis進行快速的基準測試。 # 20個線程&#xff0c;100W個請求&#xff0c;測試redi…

自動化Trae Apollo參數解釋的批量獲取

自動化Trae Apollo參數解釋的批量獲取一、背景介紹二、設計思路三、操作步驟1. 環境準備2. 獲取界面坐標3. 定位關鍵元素4. 執行自動化查詢5. 獲取結果四、完整代碼五、擴展應用一、背景介紹 在自動駕駛開發中&#xff0c;百度Apollo平臺提供了大量參數用于調整系統行為。Trae…

數學模型:十大距離

十大距離 文章目錄十大距離定義1. 歐氏距離&#xff08;Euclidean Distance&#xff09;2. 曼哈頓距離&#xff08;Manhattan Distance&#xff09;3. 切比雪夫距離&#xff08;Chebyshev Distance&#xff09;4. 閔可夫斯基距離&#xff08;Minkowski Distance&#xff09;5. …

流水線(Jenkins)打包拉取依賴的時候提示無法拉取,需要登錄私倉的解決辦法

在日常工作中&#xff0c;遇到了Jenkins拉取部門內部組件庫失敗的情況&#xff0c;原因是組件庫后面放到了阿里云私倉&#xff0c;并且是沒有公開的&#xff0c;所以就會有如下提示的&#xff0c;一開始我實在.npmrc文件寫死阿里云提供的接入token&#xff0c;后面發現可能是因…

操作系統王道考研習題

1.1.4本節習題精選 一、單項選擇題 01&#xff0e;操作系統是對(&#xff09;進行管理的軟件。 A.軟件 B.硬件 C.計算機資源 D.應用程序 01.c 操作系統管理計算機的硬件和軟件資源&#xff0c;這些資源統稱為計算機資源。注意&#xff0c;操作系統不僅管理處理機、存儲器等硬件…

C語言extern的用法(非常詳細,通俗易懂)

以往我們都是將所有的代碼寫到一個源文件里面&#xff0c;對于小程序&#xff0c;代碼不過幾百行&#xff0c;這或許無可厚非&#xff0c;但當程序膨脹代碼到幾千行甚至上萬行后&#xff0c;就應該考慮將代碼分散到多個文件中&#xff0c;否則代碼的閱讀和維護將成為一件痛苦的…

Git【開源分布式版本控制工具】安裝-配置-常用指令-Git遠程倉庫-IDEA使用Git

參考博客&#xff1a;Git&#xff08;分布式版本控制工具&#xff09;_為什么嗶哩嗶哩有些視頻沒有字幕-CSDN博客 Git就是一個類似于百度云盤的倉庫&#xff1b;重點是要掌握使用idea操作Git&#xff0c;企業用的最多&#xff0c;一般不會去使用命令 Git通過不斷階段保存文件…