Skip to content

Hive Reader ​

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

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

示例 ​

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

sql
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());

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

json
{
  "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/[email protected]",
            "table": [
              "hive_reader"
            ]
          },
          "where": "logdate='20211013'",
          "haveKerberos": true,
          "kerberosKeytabFilePath": "/etc/security/keytabs/hive.headless.keytab",
          "kerberosPrincipal": "[email protected]"
        }
      },
      "writer": {
        "name": "streamwriter",
        "parameter": {
          "print": true
        }
      }
    }
  }
}

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

执行采集命令 ​

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

bash
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 来获取数据,当配置了这一项之后, table,column 配置项无效
haveKerberos否string无是否启用 Kerberos 认证,如果启用,则需要同时配置下面两项
kerberosKeytabFilePath否string无Kerberos 认证的凭证文件路径, 比如 /your/path/addax.service.keytab
kerberosPrincipal否string无Kerberos 认证的凭证主体, 比如 addax/[email protected]

jdbcUrl ​

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

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

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

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

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 数据类型
Longint, tinyint, smallint, mediumint, int, bigint
Doublefloat, double, decimal
Stringvarchar, char, string
Datedate, timestamp
Booleanboolean
Bytesbinary

相关限制 ​

经过测试,HiveReader 目前支持的 Hive 版本为 2.1.1 及以上版本并支持 4.0.0 版本。