背景資訊
Hive是基於Hadoop的資料倉儲工具,用於解決海量結構化日誌的資料統計。Hive可以將結構化的資料檔案映射為一張表,並提供SQL查詢功能。Hive的本質是一個SQL解析引擎,其底層通過MapReduce實現資料分析,使用HDFS儲存處理的資料,將HQL轉化為MapReduce程式並在YARN上運行。
Hive Reader外掛程式通過訪問HiveMetastore服務,擷取您配置的資料表的中繼資料資訊。您可以基於HDFS檔案和Hive JDBC兩種方式讀取資料:
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
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資源群組(推薦)和獨享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身份認證方式和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"
}
建立資料來源
在進行資料同步任務開發時,您需要在DataWorks上建立一個對應的資料來源,操作流程請參見建立並管理資料來源,詳細的配置參數解釋可在配置介面查看對應參數的文案提示。
下面是對不同認證選項的參數說明:
Kerberos認證
參數 | 參數說明 |
keytab檔案 | 在Kerberos環境中註冊服務主體產生的.keytab檔案。 |
conf檔案 | conf 檔案指的是Kerberos的設定檔,主要用於定義Kerberos用戶端和伺服器的各種設定。主要設定檔:
|
principal | 身份實體,可以是使用者或服務,具有唯一的名稱和相關的加密金鑰。 |
SSL認證
參數 | 參數說明 |
Truststore認證檔案 | 啟用SSL認證產生的Truststore認證檔案,例如truststore.jks 檔案。 |
Truststore密碼 | 啟用SSL認證產生Truststore認證檔案時設定的密碼。 |
Keystore認證檔案 | 啟用SSL認證產生的Keystore認證檔案,例如keystore.jks 檔案。 |
Keystore密碼 | 啟用SSL認證產生Keystore認證檔案時設定的密碼。 |
資料同步任務開發
資料同步任務的配置入口和通用配置流程可參見下文的配置指導。
附錄:指令碼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"//限流
}
}
}
基於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 | 讀取方式:
說明 基於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"] 。 | 是 | 無 |
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"] 。 | 是 | 無 |
table | 需要寫出的Hive表名。 | 是 | 無 |
partition | Hive表的分區資訊: | 否 | 無 |
writeMode | Hive表資料的寫出模式。資料寫出至HDFS檔案後,Hive Writer外掛程式會執行LOAD DATA INPATH (overwrite) INTO TABLE ,載入資料至Hive表中。 writeMode用於表示資料的載入行為: 如果writeMode為truncate,表示先清空資料再載入。 如果writeMode為append,表示保留原有資料。 如果writeMode為其它,則表示資料寫出至HDFS檔案,無需再載入資料至Hive表。
說明 writeMode是高危參數,請您注意資料的寫出目錄和writeMode行為,避免誤刪資料。 載入資料行為需要配合hiveConfig使用,請注意您的配置。 | 是 | 無 |
hiveConfig | 您可以在hiveConfig中配置進一步的Hive擴充參數,包括hiveCommand、jdbcUrl、username和password: hiveCommand:表示Hive用戶端工具的全路徑,執行hive -e 後,會執行writeMode相關聯的LOAD DATA INPATH 資料載入操作。 Hive相關的訪問資訊由hiveCommand對應的用戶端保證。 jdbcUrl、username和password表示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。 | 否 | 無 |