對接HiveMetaStore,擁抱開源大數據

来源:https://www.cnblogs.com/huaweiyun/p/18155276
-Advertisement-
Play Games

本文分享自華為雲社區《對接HiveMetaStore,擁抱開源大數據》,作者:睡覺是大事。 1. 前言 適用版本:9.1.0及以上 在大數據融合分析時代,面對海量的數據以及各種複雜的查詢,性能是我們使用一款數據處理引擎最重要的考量。而GaussDB(DWS)服務有著強大的計算引擎,其計算性能優於MR ...


本文分享自華為雲社區《對接HiveMetaStore,擁抱開源大數據》,作者:睡覺是大事。

1. 前言

  • 適用版本:9.1.0及以上

在大數據融合分析時代,面對海量的數據以及各種複雜的查詢,性能是我們使用一款數據處理引擎最重要的考量。而GaussDB(DWS)服務有著強大的計算引擎,其計算性能優於MRS服務中的hive或者spark這類計算引擎,且可以以更低的成本滿足業務高彈性和敏捷性需求。通過與MRS聯動,無需搬遷數據,利用DWS的高性能計算引擎處理和分析數據湖中的海量數據以及各種複雜的查詢業務、分析業務越來越成為主流的解決方案。

我們可以通過創建external schema的方式來對接HiveMetaStore元數據服務,從而實現GaussDB(DWS)直接查詢hive/spark表或者插入數據到hive/spark表。無需創建讀外表或者寫外表,也無需擔心hive/spark表的定義發生變化時GaussDB(DWS)沒有及時更新表定義。

本文章主要描述了GaussDB(DWS)與hivememtastore對接配置與指導。

2. 原理淺析

2.1 什麼是HiveMetaStore

HiveMeatStore是Apache Hive的一個關鍵組件,它是一個元數據存儲庫,用於管理hive/spark表的元數據信息。HiveMeatStore存儲了Hive表的結構信息,包括表名、列名、數據類型、分區信息等。它還存儲了表的位置信息,即表數據存儲何處。HiveMeatStore的主要作用是提供元數據服務,使得Hive/Spark可以對數據進行查詢和分析。它還提供了一些API,可以讓開發人員通過編程方式訪問表的元數據。總之,HiveMeatStore是Hive的一個重要組件,它提供了元數據管理和查詢服務。

external schema即外部模式,GaussDB(DWS)通過創建extrenal schema來對接HiveMeatStore服務,每次查詢主動獲取hive/spark表對象的元數據。無需GaussDB(DWS)內核通過create foreign table獲取hive/spark表的元數據。

2.2 external schema與schema的區別

1 external schema主要用於與HiveMeatStore建立連接,獲取表對象元數據,在創建external schema時需要指定連接的所需要的各個屬性值。

2 普通schema在創建後會將schema的信息記錄在pg_namespace中,external schema創建後和普通schema一樣也會記錄在pg_namespace,可以通過pg_namespace中的nsptype欄位區分是external schema還是普通schmea。

圖片說明

除了存儲在pg_namespace中的相關信息外,external schema連接相關的配置信息都會記錄在pg_external_namespace中。

圖片說明

3 external schema下不支持創建表對象。對象的創建是在hive或者spark中創建的,external schema僅用於執行DML操作。

2.3 原理說明

GaussDB(DWS)對接HiveMetaStore流程如下圖所示

1.創建Server,external schema,sql query查詢。

用戶在使用本特性前,將需要創建Server,創建Server過程與已有Server創建過程相同

對於創建OBS server有兩種方式,一種是通過永久AK、SK的方式創建。(此種方式前提是可以獲取永久AK、SK,但是此種方式不安全,AK/SK直接暴露在配置文件中,並且創建服務的時候需要明文輸入AK、SK,不建議採用此種方式創建服務)

另一種雲上DWS綁定ECS委托方式訪問OBS,通過管控面創建OBS server。委托通過管控面創建server可參考創建外表時如何創建OBS server。https://support.huaweicloud.com/mgtg-dws/dws_01_1602.html

創建external schema:

external schema創建語法為

CREATE External Schema ex 
WITH SOURCE hive
DATABASE 'default'
SERVER hdfs_server
METAADDRESS '10.254.159.121:9010'
CONFIGURATION '/home/fengshuo/conf2';

其中SOURCE欄位指定了外部元數據存儲引擎的類型,DATABASE為Hive中對應的資料庫名,SERVER為步驟1中創建的server,METAADDRESS為Hive提供的地址埠信息,CONFIGURATION為Hive、Kerberos相關配置文件路徑。

external schema的目標是對接外部元數據(Foreign Meta),使得DWS能主動感知外部元數據的變化,如下圖所示。

GaussDB(DWS) 通過external schema 對接HiveMetaStore,映射到對應的外表元數據,再通過外表訪問 Hadoop。

SQL查詢:select查詢形式為 select * from ex.tbl,其中tbl為外源表名,ex為已創建的external schema。

2.語法解析:語法解析層主要針對進行解析,主要負責以下內容:

當讀取到ex.tbl表以後,連接HMS進行元數據查詢

3.元數據查詢:從HMS中查詢元數據信息,該步驟在步驟1中完成。

從HMS中讀取數據,主要包括列信息,分區信息、分區鍵信息、分隔符信息等。

4.數據查詢(針對select):從DFS存儲中獲取統計信息文件個數和文件大小,為plan生成提供依據。

5.查詢重寫、查詢優化、查詢執行

6.查詢下發:將元數據隨plan下發給DN,DN收到plan以後,會將元數據進行解碼後插入到SysCache中。

7.查詢執行:DN訪問obs對應文件,執行查詢。

3. 與hivememtastore對接流程

3.1 準備環境

已創建 DWS 3.0集群和MRS分析集群,需確保MRS和DWS集群在同一個區域、可用區、同一VPC子網內,確保集群網路互通;

已獲取AK和SK。

3.2 在hive端創建需要對接的表

1、在/opt/client路徑下,導入環境變數。
  source bigdata_env

2、登錄Hive客戶端。

3、依次執行以下SQL語句創建demo資料庫及目標表表product_info。
CREATE DATABASE demo;
use demo;
DROP TABLE product_info;
 
CREATE TABLE product_info 
(    
    product_price                int            ,
    product_id                   char(30)       ,
    product_time                 date           ,
    product_level                char(10)       ,
    product_name                 varchar(200)   ,
    product_type1                varchar(20)    ,
    product_type2                char(10)       ,
    product_monthly_sales_cnt    int            ,
    product_comment_time         date           ,
    product_comment_num          int        ,
    product_comment_content      varchar(200)                   
) 
row format delimited fields terminated by ',' 
stored as orc;
4、通過insert導入數據到hive表

3.3 創建外部伺服器

使用Data Studio連接已創建好的DWS集群。

MRS端有兩種支持格式,hdfs和obs。hive對接這兩種場景的創建外部伺服器的方式也有所不同

執行以下語句,創建OBS外部伺服器。

CREATE SERVER obs_servevr FOREIGN DATA WRAPPER DFS_FDW 
OPTIONS 
(
address 'obs.xxx.com:5443',   //OBS的訪問地址。
encrypt 'on',
access_key '{AK值}',
secret_access_key '{SK值}',
 type 'obs'
);
執行以下語句,創建HDFS外部伺服器。
CREATE SERVER hdfs_server FOREIGN DATA WRAPPER HDFS_FDW OPTIONS (
      TYPE 'hdfs',
      ADDRESS '{主節點},{備節點}',
      HDFSCFGPATH '{hdfs配置文件地址}');

認證用的AK和SK硬編碼到代碼中或者明文存儲都有很大的安全風險,建議在配置文件或者環境變數中密文存放,使用時解密,確保全全。另外,dws內部會對sk做加密處理,因此不用擔心sk在傳輸過程中泄漏。

查看外部伺服器(obs為例)。
SELECT * FROM pg_foreign_server WHERE srvname='obs_server';

返回結果如下所示,表示已經創建成功:

                     srvname                      | srvowner | srvfdw | srvtype | srvversion | srvacl |                                                     srvoptions
--------------------------------------------------+----------+--------+---------+------------+--------+---------------------------------------------------------------------------------------------------------------------
 obs_server |    16476 |  14337 |         |            |        | {address=obs.xxx.com:5443,type=obs,encrypt=on,access_key=***,secret_access_key=***}
(1 row)

3.4 創建EXTERNAL SCHEMA

獲取Hive的metastore服務內網IP和埠以及要訪問的Hive端資料庫名稱。

登錄MRS管理控制台。

選擇“集群列表 > 現有集群”,單擊要查看的集群名稱,進入集群基本信息頁面。

單擊運維管理處的“前往manager”,並輸入用戶名和密碼登錄FI管理頁面。

依次單擊“集群”、“Hive”、“配置”、“全部配置”、“MetaStore”、“埠”,記錄參數hive.metastore.port對應的值。

依次單擊“集群”、“Hive”、“實例”,記錄MetaStore對應主機名稱包含master1的管理IP。

創建EXTERNAL SCHEMA

//Hive對接OBS場景:SERVER名字填寫2創建的外部伺服器名稱,DATABASE填寫Hive端創建的資料庫,METAADDRESS填寫1中記錄的hive端metastore服務的地址和埠,CONFIGURATION為MRS數據源預設的配置路徑,不需更改。
DROP SCHEMA IF EXISTS ex1;
 
CREATE EXTERNAL SCHEMA ex1
    WITH SOURCE hive
         DATABASE 'demo'
         SERVER obs_server
         METAADDRESS '***.***.***.***:***'
         CONFIGURATION '/MRS/gaussdb/mrs_server'
 
//Hive對接HDFS場景:SERVER名字填寫創建MRS數據源連接創建的數據源名稱mrs_server,METAADDRESS填寫1中記錄的hive端metastore服務的地址和埠,CONFIGURATION為MRS數據源預設的配置路徑,不需更改。
DROP SCHEMA IF EXISTS ex1;
 
CREATE EXTERNAL SCHEMA ex1
    WITH SOURCE hive
         DATABASE 'demo'
         SERVER mrs_server
         METAADDRESS '***.***.***.***:***'
         CONFIGURATION '/MRS/gaussdb/mrs_server'

查看創建的EXTERNAL SCHEMA

SELECT * FROM pg_namespace WHERE nspname='ex1';
SELECT * FROM pg_external_namespace WHERE nspid = (SELECT oid FROM pg_namespace WHERE nspname = 'ex1');
                     nspid                     | srvname | source | address | database | confpath |                                                     ensoptions   | catalog
--------------------------------------------------+----------+--------+---------+------------+--------+---------------------------------------------------------------------------------------------------------------------
                  16393                        |    obs_server |  hive | ***.***.***.***:***        |  demo          | ***       |                         |
(1 row)

3.5 執行數據導入hive表

創建本地數據源表,表結構與hive一致
DROP TABLE IF EXISTS product_info_export;
CREATE TABLE product_info_export
(
    product_price                integer        ,
    product_id                   char(30)       ,
    product_time                 date           ,
    product_level                char(10)       ,
    product_name                 varchar(200)   ,
    product_type1                varchar(20)    ,
    product_type2                char(10)       ,
    product_monthly_sales_cnt    integer        ,
    product_comment_time         date           ,
    product_comment_num          integer        ,
    product_comment_content      varchar(200)                   
) ;

導入數據

從本地源表導入Hive表。

INSERT INTO ex1.product_info SELECT * FROM product_info_export;

3.6 執行數據從hive導入dws表

導入數據

從本地源表導入Hive表。

INSERT INTO product_info_orc_export SELECT * FROM ex1.product_info;

4 總結

本文主要對GaussDB(DWS)對接hiveMetaStore的原理和方式做了闡述。

 

點擊關註,第一時間瞭解華為雲新鮮技術~

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 如果有一個台外部的機器waibu-host, 位於阿裡雲, 騰訊雲, 亞馬遜, azure雲等等; 假設你想從這個waibu-host上訪問公司任意服務,下載代碼, 訪問http服務,等等, 或者你機器上的服務, 不需要額外工具, 只要ssh 反向就可以實現; 借個圖, 如下: 舉個例子, 如果你想 ...
  • 本文分享自天翼雲開發者社區《linux shell 腳本調試技巧》,作者:g****n 1.bash -x 加腳本 這是最常用的調試手段,終端會列印出,腳本執行過程中的每一個命令。 a. 查看腳本流程有無錯誤 b.查看變數值有無錯誤 c.查看退出位置是否符合預期 例如腳本 small_test.sh ...
  • 雙向鏈表 雙向鏈表的原理與應用 如果想要提高單向鏈表或者單向迴圈鏈表的訪問速度,則可以在鏈表中的結點中再添加一個指針域,讓新添加的指針域指向當前結點的直接前驅的地址,也就意味著一個結點中有兩個指針域(prev + next),也被稱為雙向鏈表(Double Linked List)。 單向迴圈鏈表實 ...
  • 單向迴圈鏈表(其一) 單向迴圈鏈表的原理與應用: 單向迴圈的鏈表的使用規則和普通的單向鏈表沒有較大的區別,需要註意:*單向迴圈鏈表的尾結點的指針域中必須指向鏈表的首結點的地址*,由於帶頭結點的單向迴圈鏈表更加容易進行管理,如下圖所示: 上圖所示的就是一個典型的單向迴圈鏈表的結構,可以發現單向迴圈鏈表 ...
  • Lab2: system calls 預備知識 執行一次系統調用的流程: USER MODE step1:系統調用聲明 user/user.h:系統調用函數(如 int fork(void)) step2:ecall 進入內核態 user/usys.S(該文件由 user/usys.pl 生成,後續 ...
  • 18.鏈表只能一個接著一個遍歷,不允許通過隨機訪問 7.鏈表的地址是連續的,通過內部的指針來進行訪問 //假設該鏈表只給出了頭指針 head。在不改變鏈表的前提下,請設計一個儘可能高效的演算法, //查找鏈表中倒數第k(k為正整數)個位置上的結點。若查找成功,演算法輸出該結點的 data值,並返回 1; ...
  • 轉載自天地風雷水火山澤 目的 因為我們的數倉數據源是Kafka,離線數倉需要用Flume採集Kafka中的數據到HDFS中。 在實際項目中,我們不可能一直在Xshell中啟動Flume任務,一是因為項目的Flume任務很多,二是一旦Xshell頁面關閉Flume任務就會停止,這樣非常不方便,因此必須 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...