全部产品
Search
文档中心

大数据开发治理平台 DataWorks:Hive数据源

更新时间:Oct 24, 2023

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客户端连接HiveServier2服务读取数据。Hive Reader支持通过where条件过滤数据,并支持直接通过SQL读取数据。

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插件。

支持的版本

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
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

使用限制

  • Hive数据源仅支持使用独享数据集成资源组
  • 目前仅支持读取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身份认证方式,如果访问数据源时不需要进行身份认证,则新增数据源时特殊认证方式选择
  • 在DataWorks使用Kerberos认证身份访问Hive数据源时,如果HiveServer2与metastore均开启了kerberos认证,但是两者认证的principal存在不一致时,需要在扩展参数配置项做如下配置:
     {
    "hive.metastore.kerberos.principal": "your metastore principal"
    }

使用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"
    }

支持的字段类型

离线读

类型分类Hive数据类型
字符串类CHAR、VARCHAR、STRING
整数类TINYINT、SMALLINT、INT、INTEGER、BIGINT
浮点类FLOAT、DOUBLE、DECIMAL
日期时间类TIMESTAMP、DATE
布尔型BOOLEAN

数据同步任务开发

Hive数据同步任务的配置入口和通用配置流程指导可参见下文的配置指导,详细的配置参数解释可在配置界面查看对应参数的文案提示。

创建数据源

在进行数据同步任务开发时,您需要在DataWorks上创建一个对应的数据源,操作流程请参见创建与管理数据源

单表离线同步任务配置指导

整库离线读同步配置指导

操作流程请参见数据集成侧同步任务配置

附录:脚本Demo与参数说明

附录:离线任务脚本配置方式

如果您配置离线任务时使用脚本模式的方式进行配置,您需要在任务脚本中按照脚本的统一格式要求编写脚本中的reader参数和writer参数,脚本模式的统一要求请参见通过脚本模式配置离线同步任务,以下为您介绍脚本模式下的数据源的Reader参数和Writer参数的指导详情。

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读取方式:
  • 基于HDFS文件方式读取数据,配置为"readMode":"hdfs"
  • 基于Hive JDBC方式读取数据,配置为"readMode":"jdbc"
说明
  • 基于Hive JDBC方式读取数据时,支持使用Where条件做数据过滤,但是此场景下,Hive引擎底层可能会生成MapReduce任务,效率较慢。
  • 基于HDFS文件方式读取数据时,不支持使用Where条件做数据过滤,此场景下读取数据时会直接访问Hive表底层的数据文件进行读取,读取效率相对更高。
  • 基于HDFS文件方式不支持读取视图(VIEW)表。
partitionHive表的分区信息:
  • 如果您基于Hive JDBC读取数据,无需配置该参数。
  • 如果您读取的Hive表是分区表,您需要配置partition信息。同步任务会读取partition对应的分区数据。

    Hive Reader支持使用星号(*)作为通配符,格式为pt1=a,pt2=b,...

  • 如果您的Hive表是非分区表,则无需配置partition
column需要读取的字段列,例如"column": ["id", "name"]
  • 支持列裁剪:即可以导出部分列。
  • 支持列换序,即可以不根据表Schema信息顺序导出列。
  • 支持配置分区列。
  • 支持配置常量。
  • 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需要写出的字段列,例如"column": ["id", "name"]
  • 支持列裁剪:即可以导出部分列。
  • column必须显示指定同步的列集合,不允许为空。
  • 不支持列换序。
table需要写出的Hive表名。
说明 请注意大小写。
partitionHive表的分区信息:
  • 如果您写出的Hive表是分区表,您需要配置partition信息。同步任务会写出partition对应的分区数据。
  • 如果您的Hive表是非分区表,则无需配置partition
writeModeHive表数据的写出模式。数据写出至HDFS文件后,Hive Writer插件会执行LOAD DATA INPATH (overwrite) INTO TABLE,加载数据至Hive表中。
writeMode用于表示数据的加载行为:
  • 如果writeModetruncate,表示先清空数据再加载。
  • 如果writeModeappend,表示保留原有数据。
  • 如果writeMode为其它,则表示数据写出至HDFS文件,无需再加载数据至Hive表。
说明 writeMode是高危参数,请您注意数据的写出目录和writeMode行为,避免误删数据。

加载数据行为需要配合hiveConfig使用,请注意您的配置。

hiveConfig您可以在hiveConfig中配置进一步的Hive扩展参数,包括hiveCommandjdbcUrlusernamepassword
  • hiveCommand:表示Hive客户端工具的全路径,执行hive -e后,会执行writeMode相关联的LOAD DATA INPATH数据加载操作。

    Hive相关的访问信息由hiveCommand对应的客户端保证。

  • jdbcUrlusernamepassword表示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