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客戶端連接HiveServer2服務讀取數據。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插件。
支持的版本
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
3.1.3
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
3.1.1-cdh7.1.1
使用限制
Hive數據源支持使用Serverless資源組(推薦)和獨享數據集成資源組。
目前僅支持讀取TextFile、ORCFile和ParquetFile三種格式的文件。
使用數據集成向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身份認證方式和
SSL認證
認證方式,如果訪問數據源時不需要進行身份認證,則新增數據源時認證選項選擇無認證。在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" }
CDH模式
如果您需使用CDH模式配置Hive數據源,則需注冊CDH集群至DataWorks。
創建數據源
在進行數據同步任務開發時,您需要在DataWorks上創建一個對應的數據源,操作流程請參見創建并管理數據源,詳細的配置參數解釋可在配置界面查看對應參數的文案提示。
下面是對不同認證選項的參數說明:
Kerberos認證
參數 | 參數說明 |
keytab文件 | 在Kerberos環境中注冊服務主體生成的.keytab文件。 |
conf文件 |
|
principal | 身份實體,可以是用戶或服務,具有唯一的名稱和相關的加密密鑰。
|
SSL認證
參數 | 參數說明 |
Truststore證書文件 | 啟用SSL認證生成的Truststore證書文件,例如 |
Truststore密碼 | 啟用SSL認證生成Truststore證書文件時設置的密碼。 |
Keystore證書文件 | 啟用SSL認證生成的Keystore證書文件,例如 |
Keystore密碼 | 啟用SSL認證生成Keystore證書文件時設置的密碼。 |
數據同步任務開發
數據同步任務的配置入口和通用配置流程可參見下文的配置指導。
單表離線同步任務配置指導
操作流程請參見通過向導模式配置離線同步任務、通過腳本模式配置離線同步任務。
腳本模式配置的全量參數和腳本Demo請參見下文的附錄:腳本Demo與參數說明。
整庫離線讀同步配置指導
操作流程請參見數據集成側同步任務配置。
附錄:腳本Demo與參數說明
離線任務腳本配置方式
如果您配置離線任務時使用腳本模式的方式進行配置,您需要按照統一的腳本格式要求,在任務腳本中編寫相應的參數,詳情請參見通過腳本模式配置離線同步任務,以下為您介紹腳本模式下數據源的參數配置詳情。
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"http://限流 } } }
基于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"http://限流 } } }
Reader腳本參數
參數 | 描述 | 是否必選 | 默認值 |
datasource | 數據源名稱,必須與添加的數據源名稱保持一致。 | 是 | 無 |
table | 表名,用于指定需要同步的表。 說明 請注意大小寫。 | 是 | 無 |
readMode | 讀取方式:
說明
| 否 | 無 |
partition | Hive表的分區信息:
| 否 | 無 |
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"http://限流
}
}
}
Writer腳本參數
參數 | 描述 | 是否必選 | 默認值 |
datasource | 數據源名稱,必須與添加的數據源名稱保持一致。 | 是 | 無 |
column | 需要寫出的字段列,例如
| 是 | 無 |
table | 需要寫出的Hive表名。 說明 請注意大小寫。 | 是 | 無 |
partition | Hive表的分區信息:
| 否 | 無 |
writeMode | Hive表數據的寫出模式。數據寫出至HDFS文件后,Hive Writer插件會執行 writeMode用于表示數據的加載行為:
說明 writeMode是高危參數,請您注意數據的寫出目錄和writeMode行為,避免誤刪數據。 加載數據行為需要配合hiveConfig使用,請注意您的配置。 | 是 | 無 |
hiveConfig | 您可以在hiveConfig中配置進一步的Hive擴展參數,包括hiveCommand、jdbcUrl、username和password:
| 是 | 無 |
hdfsUsername | 向Hive表寫數據時,默認會用Hive數據源頁面配置的用戶寫入,若數據源頁面配置匿名登錄,則會默認使用admin賬戶寫入數據,同步任務時如果出現權限問題,需要轉腳本模式配置hdfsUsername。 | 否 | 無 |