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插件。
支持的版本
使用限制
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数据源支持的离线读字段类型如下:
类型分类 | Hive数据类型 |
类型分类 | 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"//限流 } } }
基于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 | 读取方式:
| 否 | 无 |
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"//限流
}
}
}
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。 | 否 | 无 |
enableColumnExchange | 参数配置为True时,则开启列换序。 仅支持Text格式。 | 否 | 无 |
nullFormat | 数据集成提供nullFormat定义哪些字符串可以表示为null。 例如:配置 字符串的null(n、u、l、l四个字符)和实际的null不同 | 否 | 无 |
- 本页导读 (1)
- 背景信息
- 支持的版本
- 使用限制
- 支持的字段类型
- 数据同步前准备
- 阿里云实例模式
- 连接串模式
- CDH模式
- 创建数据源
- Kerberos认证
- SSL认证
- 数据同步任务开发
- 单表离线同步任务配置指导
- 整库离线读同步配置指导
- 附录:脚本Demo与参数说明
- 离线任务脚本配置方式
- Reader脚本Demo
- Reader脚本参数
- Writer脚本Demo
- Writer脚本参数