Hive Writer插件实现了从Hive写出数据至HDFS的功能,本文为您介绍Hive Writer的工作原理、参数和示例。
背景信息
Hive是基于Hadoop的数据仓库工具,用于解决海量结构化日志的数据统计。Hive可以将结构化的数据文件映射为一张表,并提供SQL查询功能。
Hive的本质是转化HQL或SQL语句为MapReduce程序:
- Hive处理的数据存储在HDFS中。
- Hive分析数据底层的实现是MapReduce。
- Hive的执行程序运行在Yarn上。
实现原理
Hive Writer插件通过访问Hive Metastore服务,解析出您配置的数据表的HDFS文件存储路径、文件格式和分隔符等信息。通过读取HDFS文件的方式,从Hive写出数据至HDFS。再通过Hive JDBC客户端执行LOAD DATA SQL语句,加载HDFS文件中的数据至Hive表。
Hive Writer底层的逻辑和HDFS Writer插件一致,您可以在Hive Writer插件参数中配置HDFS Writer相关的参数,配置的参数会透传给HDFS Writer插件。
参数说明
参数 | 描述 | 是否必选 | 默认值 |
---|---|---|---|
datasource | 数据源名称,必须与添加的数据源名称保持一致。 | 是 | 无 |
column | 需要写出的字段列,例如"column": ["id", "name"] 。
|
是 | 无 |
table | 需要写出的Hive表名。
说明 请注意大小写。
|
是 | 无 |
partition | Hive表的分区信息:
|
否 | 无 |
writeMode | Hive表数据的写出模式。数据写出至HDFS文件后,Hive Writer插件会执行LOAD DATA INPATH (overwrite) INTO TABLE ,加载数据至Hive表中。
writeMode用于表示数据的加载行为:
说明 writeMode是高危参数,请您注意数据的写出目录和writeMode行为,避免误删数据。
加载数据行为需要配合hiveConfig使用,请注意您的配置。 |
是 | 无 |
hiveConfig | 您可以在hiveConfig中配置进一步的Hive扩展参数,包括hiveCommand、jdbcUrl、username和password:
|
是 | 无 |
hdfsUsername | 向Hive表写数据时,默认会用Hive数据源页面配置的用户写入,若数据源页面配置匿名登录,则会默认使用admin账户写入数据,同步任务时如果出现权限问题,需要转脚本默认配置hdfsUsername。 | 否 | 无 |
向导开发介绍
在数据开发页面,双击打开新建的数据同步节点,即可在右侧的编辑页面配置任务。详情请参见通过向导模式配置离线同步任务。
您需要在数据同步任务的编辑页面进行以下配置:
- 选择数据源。
配置同步任务的数据来源和数据去向。
参数 描述 数据源 即上述参数说明中的datasource,通常选择您配置的数据源名称。 表 即上述参数说明中的table。 分区信息 您需要指定到最后一级分区,且仅支持写入单个分区。 写入模式 即上述参数说明中的writeMode。 parquet schema parquet类型存储文件的模式。示例配置如下:
仅当Hive表底层存储文件为parquet类型时,需要配置该参数。message tmp{ REQUIRED BINARY id; REQUIRED BINARY name; REQUIRED BINARY cyctime1; }
- 字段映射,即上述参数说明中的column。左侧的源头表字段和右侧的目标表字段为一一对应的关系。
参数 描述 同名映射 单击同名映射,可以根据名称建立相应的映射关系,请注意匹配数据类型。 同行映射 单击同行映射,可以在同行建立相应的映射关系,请注意匹配数据类型。 取消映射 单击取消映射,可以取消建立的映射关系。 自动排版 可以根据相应的规律自动排版。 - 通道控制。
参数 描述 任务期望最大并发数 数据同步任务内,可以从源并行读取或并行写入数据存储端的最大线程数。向导模式通过界面化配置并发数,指定任务所使用的并行度。 同步速率 设置同步速率可以保护读取端数据库,以避免抽取速度过大,给源库造成太大的压力。同步速率建议限流,结合源库的配置,请合理配置抽取速率。 错误记录数 错误记录数,表示脏数据的最大容忍条数。
脚本开发介绍
配置一个从Hive写出数据的JSON示例,使用脚本模式开发的详情请参见通过脚本模式配置离线同步任务。
{
"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"//限流
}
}
}