跳转至

Hive Reader

Hive Reader 插件实现了从 Apache Hive 数据库读取数据的能力

新增该插件的主要目的是解决使用 RDBMS Reader 插件读取 Hive 数据库时不能解决 Kerberos 认证的问题, 如果你的 Hive 数据库没有启用 Kerberos 认证,那么直接使用 RDBMS Reader 也可以。 如果启用了 Kerberos 认证,则可以使用该插件。

示例

我们在 Hive 的 test 库上创建如下表,并插入一条记录

create table default.hive_reader
(
    col1 int,
    col2 string,
    col3 timestamp
)
stored as orc;


insert into hive_reader values(1, 'hello', current_timestamp()), (2, 'world', current_timestamp());

下面的配置是读取该表到终端的作业:

{
  "job": {
    "setting": {
      "speed": {
        "byte": -1,
        "channel": 1
      },
      "errorLimit": {
        "record": 0,
        "percentage": 0
      }
    },
    "content": {
      "reader": {
        "name": "hivereader",
        "parameter": {
          "column": [
            "*"
          ],
          "username": "hive",
          "password": "",
          "connection": {
            "jdbcUrl": "jdbc:hive2://localhost:10000/default;principal=hive/_HOST@EXAMPLE.COM",
            "table": [
              "hive_reader"
            ]
          },
          "where": "logdate='20211013'",
          "haveKerberos": true,
          "kerberosKeytabFilePath": "/etc/security/keytabs/hive.headless.keytab",
          "kerberosPrincipal": "hive@EXAMPLE.COM"
        }
      },
      "writer": {
        "name": "streamwriter",
        "parameter": {
          "print": true
        }
      }
    }
  }
}

将上述配置文件保存为 job/hive2stream.json

执行采集命令

执行以下命令进行数据采集

bin/addax.sh job/hive2stream.json

参数说明

配置项 是否必须 类型 默认值 描述
jdbcUrl list 对端数据库的 JDBC 连接信息
driver string 自定义驱动类名,解决兼容性问题,详见下面描述
username string 数据源的用户名
password string 数据源指定用户名的密码,若无密码,可不指定
table list 所选取的需要同步的表名,使用 JSON 数据格式
column list<map> 所配置的表中需要同步的列名集合,详细描述见 rdbmreader
splitPk string 使用 splitPk 代表的字段进行数据分片,详细描述见 rdbmreader
where string 针对表的筛选条件
querySql list 使用 SQL 来获取数据,当配置了这一项之后, tablecolumn 配置项无效
haveKerberos string 是否启用 Kerberos 认证,如果启用,则需要同时配置下面两项
kerberosKeytabFilePath string Kerberos 认证的凭证文件路径, 比如 /your/path/addax.service.keytab
kerberosPrincipal string Kerberos 认证的凭证主体, 比如 addax/node1@EXAMPLE.COM

jdbcUrl

连接 Hive 的 JDBC URL 有多种写法,一种是直接指定 HiveServer/HiveServer2 服务的主机名和端口即可,比如: jdbc:hive2://node1:10000/default

如果你有多个 HiveServer/HiveServer2 服务,并采取用了服务发现,则可以通过指定 zookeeper 的方式来获得故障转移功能,类似如下:

jdbc:hive2://node1:2181,node2:2181,node3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2

如果你的 Hive 启用了 Kerberos 认证,还需要在 URL 后指定 principal 参数,一般为 principal=hive/_HOST@EXAMPLE.COM,其中 EXAMPLE.COMrealm 值。

driver

当前 Addax 采用的 Hive JDBC 驱动为 3.1.0 以上版本,驱动类名使用的 org.apache.hive.jdbc.HiveDriver, 如果当前的 Hive JDBC 驱动不兼容 Hive 数据库, 则可以通过以下步骤替换驱动。

替换插件内置的驱动

rm -f plugin/reader/hivereader/libs/hive-jdbc-*.jar

拷贝兼容驱动到插件目录

cp hive-jdbc-<version>.jar plugin/reader/hivereader/libs/

指定驱动类名称

在你的 json 文件类,配置 "driver": "<your jdbc class name>"

类型转换

目前 HiveReader 支持大部分 Hive 类型,但也存在部分个别类型没有支持的情况,请注意检查你的类型。

下面列出 HiveReader 针对 Hive 类型转换列表:

Addax 内部类型 Hive 数据类型
Long int, tinyint, smallint, mediumint, int, bigint
Double float, double, decimal
String varchar, char, string
Date date, timestamp
Boolean boolean
Bytes binary