全部產品
Search
文件中心

DataWorks:Hive資料來源

更新時間:Jul 04, 2024

Hive資料來源為您提供讀取和寫入Hive雙向通道的功能,本文為您介紹DataWorks的Hive資料同步的能力支援情況。

背景資訊

Hive是基於Hadoop的資料倉儲工具,用於解決海量結構化日誌的資料統計。Hive可以將結構化的資料檔案映射為一張表,並提供SQL查詢功能。Hive的本質是一個SQL解析引擎,其底層通過MapReduce實現資料分析,使用HDFS儲存處理的資料,將HQL轉化為MapReduce程式並在Yarn上運行。

Hive Reader外掛程式通過訪問HiveMetastore服務,擷取您配置的資料表的中繼資料資訊。您可以基於HDFS檔案和Hive JDBC兩種方式讀取資料:

  • 基於HDFS檔案讀取資料

    Hive Reader外掛程式通過訪問HiveMetastore服務,解析出您配置的資料表的HDFS檔案儲存體路徑、檔案格式、分隔字元等資訊後,再通過讀取HDFS檔案的方式讀取Hive中的表資料。

  • 基於Hive JDBC讀取資料

    Hive Reader外掛程式通過Hive JDBC用戶端串連HiveServier2服務讀取資料。Hive Reader支援通過where條件過濾資料,並支援直接通過SQL讀取資料。

Hive Writer外掛程式通過訪問Hive Metastore服務,解析出您配置的資料表的HDFS檔案儲存體路徑、檔案格式和分隔字元等資訊。通過寫HDFS檔案的方式,將資料寫入到HDFS中,再通過Hive JDBC用戶端執行LOAD DATA SQL語句,載入HDFS檔案中的資料至Hive表。

Hive Writer底層的邏輯和HDFS Writer外掛程式一致,您可以在Hive Writer外掛程式參數中配置HDFS Writer相關的參數,配置的參數會透傳給HDFS Writer外掛程式。

支援的版本

Hive外掛程式支援的版本

0.8.0
0.8.1
0.9.0
0.10.0
0.11.0
0.12.0
0.13.0
0.13.1
0.14.0
1.0.0
1.0.1
1.1.0
1.1.1
1.2.0
1.2.1
1.2.2
2.0.0
2.0.1
2.1.0
2.1.1
2.2.0
2.3.0
2.3.1
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
3.0.0
3.1.0
3.1.1
3.1.2
0.8.1-cdh4.0.0
0.8.1-cdh4.0.1
0.9.0-cdh4.1.0
0.9.0-cdh4.1.1
0.9.0-cdh4.1.2
0.9.0-cdh4.1.3
0.9.0-cdh4.1.4
0.9.0-cdh4.1.5
0.10.0-cdh4.2.0
0.10.0-cdh4.2.1
0.10.0-cdh4.2.2
0.10.0-cdh4.3.0
0.10.0-cdh4.3.1
0.10.0-cdh4.3.2
0.10.0-cdh4.4.0
0.10.0-cdh4.5.0
0.10.0-cdh4.5.0.1
0.10.0-cdh4.5.0.2
0.10.0-cdh4.6.0
0.10.0-cdh4.7.0
0.10.0-cdh4.7.1
0.12.0-cdh5.0.0
0.12.0-cdh5.0.1
0.12.0-cdh5.0.2
0.12.0-cdh5.0.3
0.12.0-cdh5.0.4
0.12.0-cdh5.0.5
0.12.0-cdh5.0.6
0.12.0-cdh5.1.0
0.12.0-cdh5.1.2
0.12.0-cdh5.1.3
0.12.0-cdh5.1.4
0.12.0-cdh5.1.5
0.13.1-cdh5.2.0
0.13.1-cdh5.2.1
0.13.1-cdh5.2.2
0.13.1-cdh5.2.3
0.13.1-cdh5.2.4
0.13.1-cdh5.2.5
0.13.1-cdh5.2.6
0.13.1-cdh5.3.0
0.13.1-cdh5.3.1
0.13.1-cdh5.3.2
0.13.1-cdh5.3.3
0.13.1-cdh5.3.4
0.13.1-cdh5.3.5
0.13.1-cdh5.3.6
0.13.1-cdh5.3.8
0.13.1-cdh5.3.9
0.13.1-cdh5.3.10
1.1.0-cdh5.3.6
1.1.0-cdh5.4.0
1.1.0-cdh5.4.1
1.1.0-cdh5.4.2
1.1.0-cdh5.4.3
1.1.0-cdh5.4.4
1.1.0-cdh5.4.5
1.1.0-cdh5.4.7
1.1.0-cdh5.4.8
1.1.0-cdh5.4.9
1.1.0-cdh5.4.10
1.1.0-cdh5.4.11
1.1.0-cdh5.5.0
1.1.0-cdh5.5.1
1.1.0-cdh5.5.2
1.1.0-cdh5.5.4
1.1.0-cdh5.5.5
1.1.0-cdh5.5.6
1.1.0-cdh5.6.0
1.1.0-cdh5.6.1
1.1.0-cdh5.7.0
1.1.0-cdh5.7.1
1.1.0-cdh5.7.2
1.1.0-cdh5.7.3
1.1.0-cdh5.7.4
1.1.0-cdh5.7.5
1.1.0-cdh5.7.6
1.1.0-cdh5.8.0
1.1.0-cdh5.8.2
1.1.0-cdh5.8.3
1.1.0-cdh5.8.4
1.1.0-cdh5.8.5
1.1.0-cdh5.9.0
1.1.0-cdh5.9.1
1.1.0-cdh5.9.2
1.1.0-cdh5.9.3
1.1.0-cdh5.10.0
1.1.0-cdh5.10.1
1.1.0-cdh5.10.2
1.1.0-cdh5.11.0
1.1.0-cdh5.11.1
1.1.0-cdh5.11.2
1.1.0-cdh5.12.0
1.1.0-cdh5.12.1
1.1.0-cdh5.12.2
1.1.0-cdh5.13.0
1.1.0-cdh5.13.1
1.1.0-cdh5.13.2
1.1.0-cdh5.13.3
1.1.0-cdh5.14.0
1.1.0-cdh5.14.2
1.1.0-cdh5.14.4
1.1.0-cdh5.15.0
1.1.0-cdh5.16.0
1.1.0-cdh5.16.2
1.1.0-cdh5.16.99
2.1.1-cdh6.1.1
2.1.1-cdh6.2.0
2.1.1-cdh6.2.1
2.1.1-cdh6.3.0
2.1.1-cdh6.3.1
2.1.1-cdh6.3.2
2.1.1-cdh6.3.3

使用限制

  • Hive資料來源僅支援使用獨享Data Integration資源群組

  • 目前僅支援讀取TextFile、ORCFile和ParquetFile三種格式的檔案。

  • 使用Data Integration向Hive叢集進行離線同步的過程中,會在服務端側產生臨時檔案,在同步任務執行完成時,會自動刪除。您需要留意服務端HDFS目錄檔案數限制,避免非預期的檔案數達到上限導致HDFS檔案系統不可用,DataWorks平台無法保障檔案數在HDFS目錄允許範圍內。

    說明

    服務端可以通過修改dfs.namenode.fs-limits.max-directory-items參數,定義單個目錄下不含遞迴的最大目錄數或者檔案數,預設值1048576,取值範圍1~6400000。可以將HDFS的參數dfs.namenode.fs-limits.max-directory-items調大或者清理不需要的檔案以規避此問題。

  • 訪問Hive資料來源時目前僅支援使用Kerberos身份認證方式,如果訪問資料來源時不需要進行身份認證,則新增資料來源時特殊認證方式選擇

  • 在DataWorks使用Kerberos認證身份訪問Hive資料來源時,如果HiveServer2與metastore均開啟了kerberos認證,但是兩者認證的principal存在不一致時,需要在擴充參數配置項做如下配置:

     {
    "hive.metastore.kerberos.principal": "your metastore principal"
    }

支援的欄位類型

離線讀

類型分類

Hive資料類型

字串類

CHAR、VARCHAR、STRING

整數類

TINYINT、SMALLINT、INT、INTEGER、BIGINT

浮點類

FLOAT、DOUBLE、DECIMAL

日期時間類

TIMESTAMP、DATE

布爾型

BOOLEAN

資料同步前準備

不同的資料來源配置模式,準備工作不同,具體如下:

阿里雲執行個體模式

如果您要同步此執行個體下的OSS表,請選擇對應的訪問身份,支援阿里雲主帳號阿里雲子帳號RAM角色三種訪問身份。請確保選擇的OSS訪問身份有對應的OSS許可權,否則資料同步會因為讀寫權限不足失敗。

重要

測試連通性不會校正資料讀寫權限。

串連串模式

使用DLF的配置

如果您的Hive資料來源中繼資料管理方式使用的是DLF方式,您需要在配置Hive資料來源時擴充參數一欄中增加如下內容:

{"dlf.catalog.id" : "my_catalog_xxxx"}

其中my_catalog_xxxx是您在EMR的Hive配置參數dlf.catalog.id裡對應的名稱。

高可用HA配置

若您要同步的EMR Hive叢集開啟了高可用,您需要在配置Hive資料來源時擴充參數一欄,配置HA的相關資訊,格式如下。您可以在EMR控制台叢集服務頁面,擷取相關配置值。

{
//HA的相關配置樣本如下。
"dfs.nameservices":"testDfs",
"dfs.ha.namenodes.testDfs":"namenode1,namenode2",
"dfs.namenode.rpc-address.testDfs.namenode1": "",
"dfs.namenode.rpc-address.testDfs.namenode2": "",
"dfs.client.failover.proxy.provider.testDfs":"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
//(可選)底層儲存為OSS時,需在擴充參數中配置以下串連OSS服務所需的參數。
"fs.oss.accessKeyId":"<yourAccessKeyId>",
"fs.oss.accessKeySecret":"<yourAccessKeySecret>",
"fs.oss.endpoint":"oss-cn-<yourRegion>-internal.aliyuncs.com"
}

OSS外表配置

當底層儲存為OSS時,請注意以下問題:

  • defaultFS的配置請以oss://為首碼。例如,oss://bucketName

  • 若您要同步的表為OSS外表,您需要在配置Hive資料來源時擴充參數一欄配置OSS相關資訊。

    {
        "fs.oss.accessKeyId":"<yourAccessKeyId>",
        "fs.oss.accessKeySecret":"<yourAccessKeySecret>",
        "fs.oss.endpoint":"oss-cn-<yourRegion>-internal.aliyuncs.com"
    }
  • 若您要同步的表為OSS-HDFS外表,您需要在配置Hive資料來源時擴充參數一欄配置OSS-HDFS的相關資訊。

    {
        "fs.oss.accessKeyId":"<yourAccessKeyId>",
        "fs.oss.accessKeySecret":"<yourAccessKeySecret>",
        "fs.oss.endpoint":"cn-<yourRegion>.oss-dls.aliyuncs.com"
    }

資料同步任務開發

Hive資料同步任務的配置入口和通用配置流程指導可參見下文的配置指導,詳細的配置參數解釋可在配置介面查看對應參數的文案提示。

建立資料來源

在進行資料同步任務開發時,您需要在DataWorks上建立一個對應的資料來源,操作流程請參見建立並管理資料來源

單表離線同步任務配置指導

整庫離線讀同步配置指導

操作流程請參見Data Integration側同步任務配置

附錄:指令碼Demo與參數說明

附錄:離線任務指令碼配置方式

如果您配置離線任務時使用指令碼模式的方式進行配置,您需要在任務指令碼中按照指令碼的統一格式要求編寫指令碼中的reader參數和writer參數,指令碼模式的統一要求請參見通過指令碼模式配置離線同步任務,以下為您介紹指令碼模式下的資料來源的Reader參數和Writer參數的指導詳情。

Reader指令碼Demo

您可以基於HDFS檔案和Hive JDBC讀取資料:

  • 基於HDFS檔案讀取資料

    {
        "type": "job",
        "steps": [
            {
                "stepType": "hive",
                "parameter": {
                    "partition": "pt1=a,pt2=b,pt3=c", //分區資訊
                    "datasource": "hive_not_ha_****", //資料來源名稱
                    "column": [ //需要讀取的欄位列
                        "id",
                        "pt2",
                        "pt1"
                    ],
                    "readMode": "hdfs", //讀取方式
                    "table": "part_table_1",
                    "hdfsUsername" : "hdfs",
                    "hivePartitionColumn": [
                        {
                          "type": "string",
                          "value": "分區名1"
                        },
                        {
                          "type": "string",
                          "value": "分區名2"
                         }
                   ]
                },
                "name": "Reader",
                "category": "reader"
            },
            {
                "stepType": "hive",
                "parameter": {
                },
                "name": "Writer",
                "category": "writer"
            }
        ],
        "version": "2.0",
        "order": {
            "hops": [
                {
                    "from": "Reader",
                    "to": "Writer"
                }
            ]
        },
        "setting": {
            "errorLimit": {
                "record": "" //錯誤記錄數
            },
            "speed": {
                "concurrent": 2, //作業並發數
                "throttle": true,//當throttle值為false時,mbps參數不生效,表示不限流;當throttle值為true時,表示限流。
                "mbps":"12"//限流
            }
        }
    }
  • 基於Hive JDBC讀取資料

    {
        "type": "job",
        "steps": [
            {
                "stepType": "hive",
                "parameter": {
                    "querySql": "select id,name,age from part_table_1 where pt2='B'",
                    "datasource": "hive_not_ha_****",  //資料來源名稱
                    "column": [ //需要讀取的欄位列
                        "id",
                        "name",
                        "age"
                    ],
                    "where": "",
                    "table": "part_table_1",
                    "readMode": "jdbc" //讀取方式
                },
                "name": "Reader",
                "category": "reader"
            },
            {
                "stepType": "hive",
                "parameter": {
                },
                "name": "Writer",
                "category": "writer"
            }
        ],
        "version": "2.0",
        "order": {
            "hops": [
                {
                    "from": "Reader",
                    "to": "Writer"
                }
            ]
        },
        "setting": {
            "errorLimit": {
                "record": ""
            },
            "speed": {
                "concurrent": 2,  //作業並發數
                "throttle": true,//當throttle值為false時,mbps參數不生效,表示不限流;當throttle值為true時,表示限流。
                "mbps":"12"//限流            
                
            }
        }
    }

Reader指令碼參數

參數

描述

是否必選

預設值

datasource

資料來源名稱,必須與添加的資料來源名稱保持一致。

table

表名,用於指定需要同步的表。

說明

請注意大小寫。

readMode

讀取方式:

  • 基於HDFS檔案方式讀取資料,配置為"readMode":"hdfs"

  • 基於Hive JDBC方式讀取資料,配置為"readMode":"jdbc"

說明
  • 基於Hive JDBC方式讀取資料時,支援使用Where條件做資料過濾,但是此情境下,Hive引擎底層可能會產生MapReduce任務,效率較慢。

  • 基於HDFS檔案方式讀取資料時,不支援使用Where條件做資料過濾,此情境下讀取資料時會直接存取Hive表底層的資料檔案進行讀取,讀取效率相對更高。

  • 基於HDFS檔案方式不支援閱讀檢視(VIEW)表。

partition

Hive表的分區資訊:

  • 如果您基於Hive JDBC讀取資料,無需配置該參數。

  • 如果您讀取的Hive表是分區表,您需要配置partition資訊。同步任務會讀取partition對應的分區資料。

    Hive Reader單級分區支援使用星號(*)作為萬用字元,多級分區不支援萬用字元。

  • 如果您的Hive表是非分區表,則無需配置partition

column

需要讀取的欄位列,例如"column": ["id", "name"]

  • 支援列裁剪:即可以匯出部分列。

  • 支援列換序,即可以不根據表Schema資訊順序匯出列。

  • 支援配置分區列。

  • 支援配置常量。

  • column必須顯示指定同步的列集合,不允許為空白。

querySql

當您基於Hive JDBC方式讀取資料時,可以直接配置querySql讀取資料。

where

當您基於Hive JDBC方式讀取資料時,可以通過設定where條件過濾資料。

hdfsUsername

基於HDFS方式讀取資料,預設會用Hive資料來源頁面配置的使用者讀取,若資料來源頁面配置匿名登入,則會預設使用admin賬戶讀取資料,同步任務時如果出現許可權問題,需要轉指令碼預設配置hdfsUsername

hivePartitionColumn

若期望把分區欄位的值,同步到下遊,可以轉指令碼模式配置hivePartitionColumn參數。

Writer指令碼Demo

{
    "type": "job",
    "steps": [
        {
            "stepType": "hive",
            "parameter": {
            },
            "name": "Reader",
            "category": "reader"
        },
        {
            "stepType": "hive",
            "parameter": {
                "partition": "year=a,month=b,day=c", // 分區配置
                "datasource": "hive_ha_shanghai", // 資料來源
                "table": "partitiontable2", // 目標表
                "column": [ // 列配置
                    "id",
                    "name",
                    "age"
                ],
                "writeMode": "append" ,// 寫入模式
                "hdfsUsername" : "hdfs"
            },
            "name": "Writer",
            "category": "writer"
        }
    ],
    "version": "2.0",
    "order": {
        "hops": [
            {
                "from": "Reader",
                "to": "Writer"
            }
        ]
    },
    "setting": {
        "errorLimit": {
            "record": ""
        },
        "speed": {
            "throttle":true,//當throttle值為false時,mbps參數不生效,表示不限流;當throttle值為true時,表示限流。
            "concurrent":2, //作業並發數。
            "mbps":"12"//限流
        }
    }
}

Writer指令碼參數

參數

描述

是否必選

預設值

datasource

資料來源名稱,必須與添加的資料來源名稱保持一致。

column

需要寫出的欄位列,例如"column": ["id", "name"]

  • 支援列裁剪:即可以匯出部分列。

  • column必須顯示指定同步的列集合,不允許為空白。

  • 不支援列換序。

table

需要寫出的Hive表名。

說明

請注意大小寫。

partition

Hive表的分區資訊:

  • 如果您寫出的Hive表是分區表,您需要配置partition資訊。同步任務會寫出partition對應的分區資料。

  • 如果您的Hive表是非分區表,則無需配置partition

writeMode

Hive表資料的寫出模式。資料寫出至HDFS檔案後,Hive Writer外掛程式會執行LOAD DATA INPATH (overwrite) INTO TABLE,載入資料至Hive表中。

writeMode用於表示資料的載入行為:

  • 如果writeModetruncate,表示先清空資料再載入。

  • 如果writeModeappend,表示保留原有資料。

  • 如果writeMode為其它,則表示資料寫出至HDFS檔案,無需再載入資料至Hive表。

說明

writeMode是高危參數,請您注意資料的寫出目錄和writeMode行為,避免誤刪資料。

載入資料行為需要配合hiveConfig使用,請注意您的配置。

hiveConfig

您可以在hiveConfig中配置進一步的Hive擴充參數,包括hiveCommandjdbcUrlusernamepassword

  • hiveCommand:表示Hive用戶端工具的全路徑,執行hive -e後,會執行writeMode相關聯的LOAD DATA INPATH資料載入操作。

    Hive相關的訪問資訊由hiveCommand對應的用戶端保證。

  • jdbcUrlusernamepassword表示Hive的JDBC訪問資訊。HiveWriter會通過Hive JDBC驅動訪問Hive後,執行writeMode相關聯的LOAD DATA INPATH資料載入操作。

    "hiveConfig": {
        "hiveCommand": "",
        "jdbcUrl": "",
        "username": "",
        "password": ""
            }
  • Hive Writer外掛程式底層通過HDFS用戶端,寫入資料至HDFS檔案。您也可以通過hiveConfig配置HDFS用戶端的進階參數。

hdfsUsername

向Hive表寫資料時,預設會用Hive資料來源頁面配置的使用者寫入,若資料來源頁面配置匿名登入,則會預設使用admin賬戶寫入資料,同步任務時如果出現許可權問題,需要轉指令碼預設配置hdfsUsername