背景信息
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资源组(推荐)和独享数据集成资源组。
目前仅支持读取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"
}
创建数据源
在进行数据同步任务开发时,您需要在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。 | 否 | 无 |