Flink <-->HBase的使用介绍+with参数

介绍

Hbase Connector 提供了对 Hbase 集群的读写支持。Oceanus 已经提供了内置的flink-connector-hbase Connector 组件。

使用范围

仅适用于 hbase-1.4.x。

示例

用作数据源(Source)

CREATE TABLE dim_hbase (

  rowkey STRING,

  cf ROW < school_name STRING >,

  PRIMARY KEY (rowkey) NOT ENFORCED

WITH (

  'connector' 'hbase-1.4',                   -- 固定值为 hbase-1.4

  'table-name' 'dim_hbase',                   -- Hbase 表名

  'zookeeper.quorum' 'ip:port,ip:port,ip:port'  -- Hbase 的 zookeeper 地址

);

 

INSERT INTO  CustomSink SELECT dim_hbase.rowkey, dim_hbase.cf.school_name as school_name FROM dim_hbase;

用作数据目的(Sink)

CREATE TABLE random_source (

  rowkey STRING,

  school_name STRING

  WITH (

  'connector' 'datagen',

  'rows-per-second'='1',            -- 每秒产生的数据条数

  'fields.rowkey.length'='10',      -- 随机字符串的长度

  'fields.school_name.length'='10'  -- 随机字符串的长度

);

 

CREATE TABLE dim_hbase (

  rowkey STRING,

  cf ROW < school_name STRING >,

  PRIMARY KEY (rowkey) NOT ENFORCED

WITH (

  'connector' 'hbase-1.4',                          -- 固定值为 hbase-1.4

  'table-name' 'dim_hbase',                         -- Hbase 表名

  'zookeeper.quorum' 'ip:port,ip:port,ip:port',     -- Hbase 的 zookeeper 地址

  'sink.buffer-flush.max-size' '50KB',              -- 写入 Hbase 前,内存中缓存的数据条数。调大该值有利于提高 Hbase 写入性能,但会增加写入延迟和内存使用。

  'sink.buffer-flush.max-rows' '10'                 -- 将缓存数据周期性写入到 Hbase 的间隔,可以控制写入 Hbase 的延迟。

);

INSERT INTO dim_hbase SELECT rowkey, ROW(school_name) FROM random_source;

WITH 参数

参数

说明

是否必填

备注

connector表类型固定值为 hbase-1.4
table-nameHBase 表名-
zookeeper.quorumHBase 的 zookeeper 地址-
zookeeper.znode.parentHBase 在 zookeeper 中的根目录-
null-string-literalHBase 字段类型为字符串时,如果 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 / STRINGbyte[] toBytes(String s)
String toString(byte[] b)
BOOLEANbyte[] toBytes(boolean b)
boolean toBoolean(byte[] b)
BINARY / VARBINARYbyte[]
DECIMALbyte[] toBytes(BigDecimal v)
BigDecimal toBigDecimal(byte[] b)
TINYINTnew byte[] { val }
bytes[0]
SMALLINTbyte[] toBytes(short val)
short toShort(byte[] bytes)
INTbyte[] toBytes(int val)
int toInt(byte[] bytes)
BIGINTbyte[] toBytes(long val)
long toLong(byte[] bytes)
FLOATbyte[] toBytes(float val)
float toFloat(byte[] bytes)
DOUBLEbyte[] 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 作为主键。

参考:HBase | Apache Flink

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值