You need to enable JavaScript to run this app.
导航

配置 Hive 数据源

最近更新时间2024.05.07 10:14:11

首次发布时间2022.09.15 17:46:56

Hive 常用于存储结构化数据,其底层使用 HDFS 存储数据。全域数据集成(DataSail)提供了基于 HDFS 文件和基于 JDBC 两种方式的数据同步功能:

  • 基于 HDFS 文件的数据同步(支持 Hive 读&写):Hive reader 通过 HMS(Hive Metastore Service)获取到指定 Hive 表的底层存储路径,然后直接读写底层 HDFS 文件,最后再将元信息同步至 HMS。
  • 基于 JDBC 的数据同步(仅支持 Hive 读):Hive reader 通过 JDBC 客户端连接 HiveServer2 服务进行数据读取。

1 支持的版本

  • 火山引擎 E-MapReduce(EMR)Hive 数据源。
  • 连接串形式支持 Hive 3.1 版本。

2 使用前提

  1. 子账号新建数据源时,需要有项目的管理员角色,方可以进行新建数据源操作。各角色对应权限说明,详见:管理成员
  2. 访问 EMR-Hive 数据源,需先在项目控制台 > 服务绑定 > 引擎绑定中,绑定相应 EMR-Hadoop 集群。详见创建项目
  3. Hive 数据源配置选择 EMR Hive 接入方式时,您需要填写 EMR 集群信息、数据库相关信息,需提前创建好 EMR Hadoop 集群类型。详见创建集群
  4. EMR Hadoop 集群使用的 VPC 需和独享集成资源组中的 VPC 保持一致:
    • 其 VPC 下的子网和安全组也尽可能保持一致。
    • 若 VPC 不一致时,则需要在 Hadoop 集群的安全组上,在入方向规则处,添加独享集成资源组子网的 IP 网段:
      1. 在 EMR Hadoop 集群详情界面,进入集群所在的安全组,并添加入方向规则。
        图片
      2. 在弹窗中,填写独享集成资源组子网的 IP 网段:
        图片

3 使用限制

  • 离线读:
    • 基于 HDFS 文件的离线读需指定分区字段的分区内容,单次执行仅支持读取单分区;
    • HDFS 的读取方式,仅支持 EMR Hive 的数据源接入方式,且 EMR 集群内 Hive 组件版本需为 3.X;
    • 基于 JDBC 的离线读,通过 SQL 读取数据,您需要配置好有效的 SQL 语句。
  • 离线写:
    • 目前仅支持基于 HDFS 文件的离线写入;
    • 单次执行只能写入单个分区。
  • 实时写:
    虽然数据是近实时写入 Hive,但是由于 Hive 分区可见性限制,数据写入后在 T+1 时间才能在 Hive 中查询到。例如:天级分区 Hive 表,任务启动后第二天可查询;小时级 Hive 表在第二个小时可查询。
    如果您对此功能原理感兴趣,可以参考下述文章:字节跳动基于Flink的MQ-Hive实时数据集成_大数据_字节跳动技术团队_InfoQ精选文章

4 支持的字段类型

Hive reader 和 Writer 会通过 HiveServer2 拿到目标 Hive 表的元信息,从而获取到各个字段的类型,自动完成任务的 Schema 配置,用户只需单击自动添加即可完成 Schema 配置。

类型分类

数据集成 Column 配置类型

整数类

tinyint、smallint、int、bigint

浮点类

float、double、decimal

字符串类

string

时间类

date、timestamp

布尔类

boolean

数组类

array

字典类

map

二进制类型

binary

5 数据同步任务开发

5.1 数据源注册

新建数据源操作详见配置数据源,以下为您介绍不同接入方式的 Hive 数据源配置相关信息:

  1. EMR-Hive 数据源

    注意

    • EMR Hadoop 集群所在的 VPC 需和独享集成资源组中的 VPC 保持一致,确保网络能互相访问。不同 VPC 情况时,详见“2 使用前提”相关说明。
    • DataSail 会用 root 账号来读写 EMR Hive 表数据,因此数据源配置中的用户名和密码信息可忽略不填。

    其中参数名称前带 * 的为必填参数,名称前未带 * 的为可选填参数。

    参数

    说明

    基本配置

    *数据源类型

    Hive

    *接入方式

    EMR Hive

    *数据源名称

    数据源的名称,可自行设置,仅支持中文,英文,数字,“_”,100个字符以内。

    参数配置

    *EMR 集群 ID

    下拉选择已创建成功的 EMR Hadoop 集群名称,若还未创建相关集群,您可前往 EMR-控制台创建。详见创建集群

    *数据库名

    下拉选择集群环境中,已创建的 Hive 数据库名称。

    Hive 版本号

    依据已选择的 EMR Hadoop 集群,自动展现集群中包含的 Hive 版本。

    用户名

    有权限访问数据库的用户名信息。

    密码

    输入用户名对应的密码信息。

    扩展配置

    您可输入 HDFS 配置的可选扩展,例如 Hadoop HA 的配置信息。

  2. 连接串形式 Hive 数据源
    用连接串形式配置 Hive 数据源,其中参数名称前带 * 的为必填参数,名称前未带 * 的为可选填参数。

    参数

    说明

    基本配置

    *数据源类型

    Hive

    *接入方式

    连接串

    *数据源名称

    数据源的名称,可自行设置,仅支持中文,英文,数字,“_”,100个字符以内。

    参数配置

    *认证方式

    访问 Hive 数据源时,支持使用 Kerberos 认证的身份认证方式;若访问时无需认证,则认证方式选择
    其中 Kerberos 认证需要您将 keyTab 文件、conf 文件上传至数据源配置界面及填写 principal 认证相关信息。

    *数据库名

    输入已创建的 Hive 数据库名称。

    用户名

    有权限访问数据库的用户名信息。

    密码

    输入用户名对应的密码信息。

    *Hive 版本号

    支持下拉选择 Hive 3.1.2 的版本。

    *MetaStore URI

    输入 Hive 元数据存储的 MetaStore uri 地址,以 thrift://ip1:port,thrift://ip2:port 的形式,多个地址可用英文“,”分隔。

    *Hive JDBC URL

    输入 Hive JDBC URL 链接串地址信息:

    • 无 kerberos 认证时,需填写:jdbc:hive2://host:port/database
    • 有 kerberos 认证时,需补充填写认证信息: jdbc:hive2://host:port/database;principal= your principal

    *keyTab文件

    认证方式选择 kerberos 认证时,需要将 keyTab 配置文件上传。

    *conf文件

    认证方式选择 kerberos 认证时,需要将 conf 配置文件上传。

    *principal

    认证方式为 Kerberos 认证时,需输入用于认证的 Principal 身份信息。

    defaultFS

    填写 Hadoop HDFS 文件的 namenode 节点地址,以 hdfs:// ip:port 的形式填写。

    扩展配置

    填写必要的 HDFS 或 Hive 配置,默认情况无需额外配置,填写 <configuration></configuration>即可。
    自建的高可用集群您可参考以下扩展属性配置示例:

    <configuration>
        <property>
            <name>dfs.nameservices</name>
            <value>test_name</value>
        </property>
        <property>
            <name>dfs.ha.namenodes.test_name</name>
            <value>namenode1,namenode2</value>
        </property>
        <property>
            <name>dfs.namenode.rpc-address.namenode1</name>
            <value>xxx.xx.x.xx:port</value>
        </property>
        <property>
            <name>dfs.namenode.rpc-address.namenode2</name>
            <value>xxx.xx.x.xx:port</value>
        </property>
        <property>
            <name>dfs.client.failover.proxy.provider.test_name</name>
            <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
    </configuration>
    

    说明

    • 以上配置示例中,nameservices 和 rpc-address 信息,您需根据实际集群信息进行替换。
    • 若是火山引擎 EMR HDFS 高可用集群方式接入时,无需配置额外高可用相关的扩展属性。

5.2 新建离线任务

Hive 数据源测试连通性成功后,进入到数据开发界面,开始新建 Hive 相关通道任务。新建任务方式详见离线数据同步流式数据同步

5.3 可视化配置说明

任务创建成功后,您可根据实际场景,配置 Hive 离线读Hive 离线写等通道任务。

5.3.1 可视化配置 Hive 离线读

数据来源选择 Hive,并完成以下相关参数配置:
其中参数名称前带 * 的为必填参数,名称前未带 * 的为可选填参数。

参数

说明

*数据源类型

下拉选择 Hive 数据源类型。

*数据源名称

已在数据源管理中注册成功的 Hive 数据源,下拉可选。
若还未建立相应数据源,可单击数据源管理按钮,前往创建 Hive 数据源。

*数据表

选择需要采集的数据表名称信息,目前单个任务只支持将单表的数据采集到一个目标表中。

  • 快速建表:若源表还未创建,您可单击快速建表按钮,前往数据地图界面,进行 EMR Hive 表的创建。
  • 修改数据表:若源表字段存在需更新情况时,您可单击修改数据表按钮,对源表字段进行快速修改。

读取方式

Hive 读取方式支持“基于 HDFS”和“基于 JDBC”:

  • 基于 HDFS:需要指定分区字段的分区内容,仅支持单分区内容的读取。
  • 基于 JDBC:通过 SQL 读取数据,可实现字段的 where 过滤。

分区设置

基于 HDFS 方式读取数据时,会根据所选数据库表,获取 Hive 表中分区信息,指定读取的分区。

说明

读取 Hive 表为非分区表时,不需要设置分区。

数据过滤

基于 JDBC 方式读取数据时,支持您将需要同步的数据进行筛选条件设置,只同步符合过滤条件的数据,可直接填写关键词 where 后的过滤 SQL 语句且无需填写结束符号(;),例如:create_time > '${date}',不需要填写 where 关键字。
语句填写完成后,您可单击右侧的校验按钮,进行过滤语句校验。

说明

该过滤语句通常用作增量同步,暂时不支持 limit 关键字过滤,其 SQL 语法需要和选择的数据源类型对应。

5.3.2 可视化配置 Hive 离线写

图片
数据目标类型选择 Hive,并完成以下相关参数配置:
其中参数名称前带 * 的为必填参数,名称前未带 * 的为可选填参数。

参数

说明

*目标类型

下拉选择 Hive 数据源类型。

*数据源名称

已在数据源管理中注册成功的 Hive 数据源,下拉可选。
若还未建立相应数据源,可单击数据源管理按钮,前往创建 Hive 数据源。

*数据表

选择需要写入数据的 Hive 表名称信息,下拉可选。

  • 快速建表:若目标 Hive 表还未创建,您可单击快速建表按钮,前往数据地图界面,依据源端采集的字段信息,进行 EMR Hive 表的创建。
  • 修改数据表:若源端采集的字段存在更新情况时,您可单击修改数据表按钮,及时对目标表字段进行快速修改。

分区设置

分区字段从 Hive 表中自动获取。分区内容可设置具体时间分区粒度,可以用表达式:${date}、${hour} 等参数变量表示。

数据写入方式

下拉选择目标数据写入方式,支持以下两种写入方式:

  • insert overwrite: 先删除原有数据再写入新数据;
  • insert into: 直接写入新数据。

5.3.3 可视化配置 Hive 实时写

图片
流式集成任务实时写入 Hive 数据源,数据目标类型选择 Hive,并完成以下相关参数配置:
其中参数名称前带 * 的为必填参数,名称前未带 * 的为可选填参数。

参数

说明

*目标类型

下拉选择 Hive 数据源类型。

*数据源名称

已在数据源管理中注册成功的 Hive 数据源,下拉可选。
若还未建立相应数据源,可单击数据源管理按钮,前往创建 Hive 数据源。

*数据表

选择需要写入数据的 Hive 表名称信息,下拉可选。

  • 快速建表:若目标 Hive 表还未创建,您可单击快速建表按钮,前往数据地图界面,依据源端采集的字段信息,进行 EMR Hive 表的创建。
  • 修改数据表:若源端采集的字段存在更新情况时,您可单击修改数据表按钮,及时对目标表字段进行快速修改。

分区频率

支持选择天级或小时级的分区频率:

  • 天级:每天产出一次分区
  • 小时级:每小时产出一次分区

说明

数据跟随 Hive 分区生成的时间产出,并非实时写入。

分区设置

分区字段从 Hive 表中自动获取。分区内容可设置具体时间分区粒度,可以用表达式:${date}、${hour} 等参数变量表示。

说明

分区类型中动态分区数目不能过多,会导致消费速率降低,推荐<10。

5.3.4 字段映射

数据来源和目标端配置完成后,需要指定来源和目标端的字段映射关系,根据字段映射关系,数据集成任务将源端字段中的数据,写入到目标端对应字段中。
字段映射支持选择基础模式转换模式配置映射:

说明

基础模式和转换模式不支持互相切换,模式切换后,将清空现有字段映射中所有配置信息,一旦切换无法撤销,需谨慎操作。

  • 转换模式:
    字段映射支持数据转换,您可根据实际业务需求进行配置,将源端采集的数据,事先通过数据转换后,以指定格式输入到目标端数据库中。在转换模式中,你可依次配置:来源节点、数据转换、目标节点信息:

    配置节点

    说明

    来源节点

    配置数据来源 Source 节点信息:

    • 节点名称:自定义输入来源节点名称信息,只允许由数字、字母、下划线、-和.组成;且长度不能超过10。
    • 数据字段:通过自动添加、手动添加等方式添加数据来源字段信息。

    配置完成后,单击确认按钮,完成来源节点配置。

    数据转换

    单击数据转换右侧添加按钮,选择 SQL 转换方式,配置转换信息和规则:

    • 节点名称:自定义输入来源节点名称信息,只允许由数字、字母、下划线、-和.组成;且长度不能超过10。
    • SQL 脚本:输入 SQL 脚本转换规则,目前仅支持添加一个单行转换的 SQL 语句,且不能包括 “;”。

    配置完成后,单击确认按钮,完成数据转换节点配置。

    目标节点

    配置目标节点 Sink 信息:

    • 节点名称:自定义输入来源节点名称信息,只允许由数字、字母、下划线、-和.组成;且长度不能超过10。
    • 数据字段:通过自动添加、手动添加等方式添加数据目标字段信息。

    配置完成后,单击确认按钮,完成目标节点配置。

  • 基础模式:

    您可通过以下三种方式操作字段映射关系:

    • 自动添加:单击自动添加按钮,根据两端数据表信息,可以自动填充来源和目标的字段信息。
    • 手动添加:单击手动添加按钮,可以手动编辑来源和目标的字段信息,可以逐个添加。

      说明

      来源端字段信息支持输入数据库函数和常量配置,单击手动添加按钮,在源表字段中输入需添加的值,并选择函数或常量类型,例如:

      • 函数:支持您输入 now()、current_timestamp()、unix_timestamp() 等 Hive 数据库支持的函数。
      • 常量:您可自定义输入常量值,'123'、'${DATE+1}'、'${hour}' 等,输入值两侧需要加上英文单引号,支持结合时间变量参数使用。
    • 移动\删除字段:您也可以根据需要移动字段映射顺序或删除字段。

5.4 DSL 配置说明

Hive 数据源支持使用脚本模式(DSL)的方式进行配置。
在某些复杂场景下,或当数据源类型暂不支持可视化配置时,您可通过任务脚本的方式,按照统一的 Json 格式,编写 Hive Reader 和 Hive Writer 参数脚本代码,来运行数据集成任务。

5.4.1 进入 DSL 模式

进入 DSL 模式操作流程,可详见 MySQL 数据源-4.4.1 进入DSL 模式

5.4.2 Hive 离线读

根据实际情况替换 Hive 离线读相应参数,Hive 离线读脚本示例如下:

"reader": {
        // [required] datasource type
        "type": "hive",
        // [optional] datasource id, set it if you have registered datasource
        "datasource_id": 65xxx5,
        // [required] user parameter
        "parameter": {
          "partition": "date=20240304/hour=22",
          "columns": [{
                        "upperCaseName": "ID",
                        "name": "id",
                        "type": "int"
                },
                {
                        "upperCaseName": "NAME",
                        "name": "name",
                        "type": "string"
                }
          ],
          "table_name": "mysql2hive_testp",
          "readerMode": "hdfs"        
        }
    }

Reader 参数说明,其中参数名称前带 * 的为必填参数,名称前未带 * 的为可选填参数:

参数名

描述

*type

数据源类型,对于 Hive 类型,填写:hive

*datasource_id

注册的 Hive 数据源 ID。可以在项目控制台 > 数据源管理界面中查找。

*table_name

填写数据源下需要读取的 Hive 表名。

*readerMode

Hive 数据读取方式,支持 hdfs、jdbc 两种模式:

  • 基于 HDFS:需要指定分区字段的分区内容,仅支持单分区内容的读取。
  • 基于 JDBC:通过 SQL 读取数据,可实现字段的 where 过滤。

partition

readerMode 配置为 hdfs 时,需配置 partition 参数,即 Hive 表分区字段信息。

filter

readerMode 配置为 jdbc 时,需配置 filter 参数,即同步数据的筛选条件,同步数据时只会同步符合过滤条件的数据,直接填写关键词 where 后的过滤 SQL 语句。

  • 如将过滤条件指定为:date>=${date} ,表示只同步 date 大于等于 ${date}。
  • 过滤条件可以有效地进行业务增量同步。如果不配置,默认会同步全量数据。

*columns

所配置的表中,需要同步的列名集合,使用 JSON 的数组描述字段信息。

  • 支持列裁剪:列可以挑选部分列进行导出。
  • 支持列换序:列可以不按照表 Schema 信息顺序进行导出。
  • column 必须显示指定同步的列集合,不允许为空。
  • 支持函数、常量形式添加列:
    • 函数:MySQL Reader 支持您输入 now()、current_timestamp()、unix_timestamp() 等 MySQL 数据库支持的函数。
    • 常量:MySQL Reader 支持您自定义输入常量值,如 '123'、'${DATE}'、'${hour}' 等,输入值两侧需要加上英文单引号,支持结合时间变量参数使用。

5.4.3 Hive 离线写

根据实际情况替换 Hive 离线写相应参数,Hive 离线写脚本示例如下:

// writer config
    "writer": {
        // [required] datasource type
        "type": "hive",
        // [optional] datasource id, set it if you have registered datasource
        "datasource_id": 65xxx5,
        // [required] user parameter
         "parameter": {
                "partition": "date=${date},hour=${hour}",
                "table_name": "dts_db_testxxx",
                "columns": [{
                                "upperCaseName": "BOOBLE",
                                "name": "booble",
                                "type": "boolean"
                        },
                        {
                                "upperCaseName": "ISODATE",
                                "name": "isodate",
                                "type": "date"
                        }
                ],
                "partitions": [{
                        "name": "date",
                        "type": "string",
                        "value": "20240122"
                }, {
                        "name": "hour",
                        "type": "string",
                        "value": "16"
                }],
                "writeMode": "overwrite"
        }
    }

Writer 参数说明,其中参数名称前带 * 的为必填参数,名称前未带 * 的为可选填参数:

参数名

描述

*type

数据源类型,对于 Hive 类型,填写:hive

*datasource_id

注册的 Hive 数据源 ID。可以在项目控制台 > 数据源管理界面中查找。

*db_name

填写需要读取的 Hive 数据库名称信息。

*table_name

填写数据源下所属需数据写入的 Hive 表名。

partition

配置 Hive 表的分区信息, 支持表达式形式配置,多个分区之间用英文逗号分隔,如:date=${date},hour=${hour}

*writeMode

填写数据写入 Hive 的方式,支持 overwrite、insert into 两种方式:

  • overwrite: 先删除原有数据再写入新数据;
  • insert into: 直接写入新数据。

*columns

所配置的表中,需要同步的列名集合,使用 JSON 的数组描述字段信息。

5.4.4 Hive 实时写

根据实际情况替换 Hive 实时写相应参数,Hive 实时写脚本示例如下:

// writer config
    "writer": {
        // [required] datasource type
        "type": "hive",
        // [optional] datasource id, set it if you have registered datasource
        "datasource_id": 65xxx5,
        // [required] user parameter
         "parameter": {
                "table_name": "kafka2hive_json_fq_not_delete",
                "enable_event_time": "true",
                "proto": {
                        "descriptor": "CsEBCg9QYk1lc3NhZ2UucHJvdG8SDHRlc3RfbWVzc2FnZSKfAQoJUGJNZXNzYWdlEg4KAmlkGAEgAigDUgJpZBISCgRuYW1lGAIgAigJUgRuYW1lEhgKB2FkZHJlc3MYAyACKAlSB2FkZHJlc3MSHwoLY3JlYXRlX3RpbWUYBCABKANSCmNyZWF0ZVRpbWUSHQoKZXZlbnRfdGltZRgFIAEoA1IJZXZlbnRUaW1lEhQKBXByaWNlGAYgAigBUgVwcmljZQ==",
                        "class_name": "PbMessage"
                },
                "hdfs": {
                        "dump_type": "hdfs.dump_type.pb"
                },
                "partition_infos": "[{\"name\":\"date\",\"type\":\"TIME\"},{\"name\":\"hour\",\"type\":\"TIME\"}]",
                "source_schema": "[{\"name\":\"id\",\"type\":\"bigint\"},{\"name\":\"create_time\",\"type\":\"bigint\"},{\"name\":\"price\",\"type\":\"double\"}]",
                "sink_schema": "[{\"name\":\"id\",\"type\":\"bigint\"},{\"name\":\"create_time\",\"type\":\"bigint\"},{\"name\":\"price\",\"type\":\"float\"}]",
                "event_time_fields": "create_time"
        }
    }

6 高级参数可选配置

6.1 Hive 实时写

参数

描述

默认值

job.writer.null_string_as_null

复杂类型中的 string 类型,默认会将 null 写为空字符串。如果需要配置默认写入 null,可以将此参数配置为 true。

false

job.writer.case_insensitive

默认会将数据全部转换为小写。

true

job.writer.convert_error_column_as_null

将脏数据中无法转换的列自动转换为 null。

false

job.writer.dump.directory_frequency

写入 HDFS 文件夹的频率,支持以下参数:

  • 天级:dump.directory_frequency.day
  • 小时级:dump.directory_frequency.hour

dump.directory_frequency.day

6.2 EMR 集群开启 Proton 服务后的相关参数

若数据源接入方式为 EMR Hive 数据源时,当 EMR 集群开启 Proton 服务,且集群中没有配置 TOS 认证相关的参数配置,则您需在任务中添加以下高级参数:

  • 离线写通道:
    在高级参数中增加 TOS 认证配置

    参数说明:

    高级参数 Key

    高级参数 Value

    job.writer.extra_config

    {"fs.tos.access-key-id":"your access key","fs.tos.secret-access-key":"your secret key"}

  • 实时写通道:
    在高级参数中增加 TOS 认证配置

    参数说明:

    高级参数key

    高级参数value

    job.writer.extra_metastore_properties

    {"fs.tos.access-key-id":"your access key","fs.tos.secret-access-key":"your secret key"}

说明

  1. 如果开启 Proton 服务的 EMR 集群,已经在 HDFS 组件的服务参数 core-site.xml 文件中,配置了 TOS 认证相关的配置参数:fs.tos.access-key-id 和 fs.tos.secret-access-key,则离线写集成作业无需操作,已有的实时写集成作业重启即可,两种任务均不用添加以上高级参数。
    图片
  2. Access key/Secret key 信息,您可以进入火山引擎访问控制台的密钥管理界面获取,即 Access Key ID/ Secret Access Key 信息。