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 来获取数据,当配置了这一项之后, table ,column 配置项无效 |
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.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 数据类型 |
---|---|
Long | int, tinyint, smallint, mediumint, int, bigint |
Double | float, double, decimal |
String | varchar, char, string |
Date | date, timestamp |
Boolean | boolean |
Bytes | binary |