介绍
Hbase Connector 提供了对 Hbase 集群的读写支持。Oceanus 已经提供了内置的flink-connector-hbase Connector 组件。
使用范围
仅适用于 hbase-1.4.x。
示例
用作数据源(Source)
|
|
|
|
用作数据目的(Sink)
|
|
|
|
|
|
WITH 参数
| 参数 | 说明 | 是否必填 | 备注 |
|---|---|---|---|
| connector | 表类型 | 是 | 固定值为 hbase-1.4 |
| table-name | HBase 表名 | 是 | - |
| zookeeper.quorum | HBase 的 zookeeper 地址 | 是 | - |
| zookeeper.znode.parent | HBase 在 zookeeper 中的根目录 | 否 | - |
| null-string-literal | HBase 字段类型为字符串时,如果 Flink 字段数据为 null,则将该字段赋值为 null-string-literal,并写入 Hbase | 否 | 默认为 null |
| sink.buffer-flush.max-size | 写入 HBase 前,内存中缓存的数据量(字节)大小。调大该值有利于提高 HBase 写入性能,但会增加写入延迟和内存使用。仅作为 Sink 时使用 | 否 | 默认值为2MB,支持字节单位 B、KB、MB 和 GB,不区分大小写。设置为0表示不进行缓存 |
| sink.buffer-flush.max-rows | 写入 HBase 前,内存中缓存的数据条数。调大该值有利于提高 HBase 写入性能,但会增加写入延迟和内存使用。仅作为 Sink 时使用 | 否 | 默认值为1000,设置为0表示不进行缓存 |
| sink.buffer-flush.interval | 将缓存数据周期性写入到 HBase 的间隔,可以控制写入 HBase 的延迟。仅作为 Sink 时使用。 | 否 | 默认值为1秒,支持时间单位 ms、s、min、h 和 d。设置为0表示关闭定期写入 |
类型映射
HBase 将所有的数据存为字节数组。读写操作时需要将数据进行序列化和反序列化。Flink 与 HBase 的数据转换关系如下:
| Flink SQL 类型 | Hbase 转换 |
|---|---|
| Flink SQL 类型 | Hbase 转换 |
| CHAR / VARCHAR / STRING | byte[] toBytes(String s) String toString(byte[] b) |
| BOOLEAN | byte[] toBytes(boolean b) boolean toBoolean(byte[] b) |
| BINARY / VARBINARY | byte[] |
| DECIMAL | byte[] toBytes(BigDecimal v) BigDecimal toBigDecimal(byte[] b) |
| TINYINT | new byte[] { val } bytes[0] |
| SMALLINT | byte[] toBytes(short val) short toShort(byte[] bytes) |
| INT | byte[] toBytes(int val) int toInt(byte[] bytes) |
| BIGINT | byte[] toBytes(long val) long toLong(byte[] bytes) |
| FLOAT | byte[] toBytes(float val) float toFloat(byte[] bytes) |
| DOUBLE | byte[] toBytes(double val) double toDouble(byte[] bytes) |
| DATE | 将日期转换成自1970.01.01以来的天数,用 int 表示,并通过 byte[] toBytes(int val) 转换成字节数组 |
| TIME | 将时间转换成自00:00:00以来的毫秒数,用 int 表示,并通过 byte[] toBytes(int val) 转换成字节数组 |
| TIMESTAMP | 将时间戳转换成自1970-01-01 00:00:00以来的毫秒数,用 long 表示,并通过 byte[] toBytes(long val) 转换成字节数组 |
| ARRAY | 不支持 |
| MAP / MULTISET | 不支持 |
| ROW | 不支持 |
注意事项
Hbase connector 一般会使用 DDL 语句中定义的主键,以 upsert 模式工作,与外部系统交换变更日志信息。因此,必须在 HBase 的 rowkey 字段上定义主键(必须声明 rowkey 字段)。如果未声明 PRIMARY KEY 子句,则 HBase 连接器默认将 rowkey 作为主键。
1560

被折叠的 条评论
为什么被折叠?



