HBase Reader插件实现了从HBase中读取数据,本文为您介绍HBase Reader支持的数据类型、字段映射和数据源等参数及配置示例。
在底层实现上,HBase Reader通过HBase的Java客户端连接远程HBase服务,并通过Scan方式读取您指定的rowkey范围内的数据,将读取的数据使用数据集成自定义的数据类型拼装为抽象的数据集,并传递给下游Writer处理。
使用限制
- HBase Reader不支持读取phoenix写入的数据,phoenix有特殊处理。
- HBase Reader仅支持使用新增和使用独享数据集成资源组,不支持使用默认资源组和自定义资源组。
支持的功能
- 支持HBase0.94.x、HBase1.1.x和HBase2.x版本
- 如果您的HBase版本为HBase0.94.x,Reader端的插件请选择094x。
"reader": { "plugin": "094x" }
- 如果您的HBase版本为HBase1.1.x或HBase2.x,Reader端的插件请选择11x。
"reader": { "plugin": "11x" }
说明 HBase1.1.x插件当前可以兼容HBase 2.0。
- 如果您的HBase版本为HBase0.94.x,Reader端的插件请选择094x。
- 支持normal和multiVersionFixedColumn模式
- normal模式:把HBase中的表当成普通二维表(横表)进行读取,获取最新版本数据。
hbase(main):017:0> scan 'users' ROW COLUMN+CELL lisi column=address:city, timestamp=1457101972764, value=beijing lisi column=address:contry, timestamp=1457102773908, value=china lisi column=address:province, timestamp=1457101972736, value=beijing lisi column=info:age, timestamp=1457101972548, value=27 lisi column=info:birthday, timestamp=1457101972604, value=1987-06-17 lisi column=info:company, timestamp=1457101972653, value=baidu xiaoming column=address:city, timestamp=1457082196082, value=hangzhou xiaoming column=address:contry, timestamp=1457082195729, value=china xiaoming column=address:province, timestamp=1457082195773, value=zhejiang xiaoming column=info:age, timestamp=1457082218735, value=29 xiaoming column=info:birthday, timestamp=1457082186830, value=1987-06-17 xiaoming column=info:company, timestamp=1457082189826, value=alibaba 2 row(s) in 0.0580 seconds }
读取后的数据如下所示。rowKey address:city address:contry address:province info:age info:birthday info:company lisi beijing china beijing 27 1987-06-17 baidu xiaoming hangzhou china zhejiang 29 1987-06-17 alibaba - multiVersionFixedColumn模式:把HBase中的表当成竖表进行读取。读出的每条记录是四列形式,依次为rowKey、family:qualifier、timestamp和value。读取时需要明确指定要读取的列,把每一个cell中的值,作为一条记录(record),若有多个版本则存在多条记录。
hbase(main):018:0> scan 'users',{VERSIONS=>5} ROW COLUMN+CELL lisi column=address:city, timestamp=1457101972764, value=beijing lisi column=address:contry, timestamp=1457102773908, value=china lisi column=address:province, timestamp=1457101972736, value=beijing lisi column=info:age, timestamp=1457101972548, value=27 lisi column=info:birthday, timestamp=1457101972604, value=1987-06-17 lisi column=info:company, timestamp=1457101972653, value=baidu xiaoming column=address:city, timestamp=1457082196082, value=hangzhou xiaoming column=address:contry, timestamp=1457082195729, value=china xiaoming column=address:province, timestamp=1457082195773, value=zhejiang xiaoming column=info:age, timestamp=1457082218735, value=29 xiaoming column=info:age, timestamp=1457082178630, value=24 xiaoming column=info:birthday, timestamp=1457082186830, value=1987-06-17 xiaoming column=info:company, timestamp=1457082189826, value=alibaba 2 row(s) in 0.0260 seconds }
读取后的数据(4列) 如下所示。rowKey column:qualifier timestamp value lisi address:city 1457101972764 beijing lisi address:contry 1457102773908 china lisi address:province 1457101972736 beijing lisi info:age 1457101972548 27 lisi info:birthday 1457101972604 1987-06-17 lisi info:company 1457101972653 beijing xiaoming address:city 1457082196082 hangzhou xiaoming address:contry 1457082195729 china xiaoming address:province 1457082195773 zhejiang xiaoming info:age 1457082218735 29 xiaoming info:age 1457082178630 24 xiaoming info:birthday 1457082186830 1987-06-17 xiaoming info:company 1457082189826 alibaba
- normal模式:把HBase中的表当成普通二维表(横表)进行读取,获取最新版本数据。
支持的数据类型
支持读取HBase数据类型及HBase Reader针对HBase类型的转换列表如下表所示。
类型分类 | 数据集成column配置类型 | 数据库数据类型 |
---|---|---|
整数类 | long | short、int和long |
浮点类 | double | float和double |
字符串类 | string | binary_string和string |
日期时间类 | date | date |
字节类 | bytes | bytes |
布尔类 | boolean | boolean |
参数说明
参数 | 描述 | 是否必选 | 默认值 |
---|---|---|---|
haveKerberos | haveKerberos值为true时,表示HBase集群需要kerberos认证。
说明
|
否 | false |
hbaseConfig | 连接HBase集群需要的配置信息,JSON格式。必填的配置为hbase.zookeeper.quorum,表示HBase的ZK链接地址。同时可以补充更多HBase client的配置,例如设置scan的cache、batch来优化与服务器的交互。
说明 如果是云HBase的数据库,需要使用内网地址连接访问。
|
是 | 无 |
mode | 读取HBase的模式,支持normal模式和multiVersionFixedColumn模式。 | 是 | 无 |
table | 读取的HBase表名(大小写敏感) 。 | 是 | 无 |
encoding | 编码方式,UTF-8或GBK,用于对二进制存储的HBase byte[]转为String时的编码。 | 否 | utf-8 |
column | 要读取的HBase字段,normal模式与multiVersionFixedColumn模式下必填。
|
是 | 无 |
maxVersion | 指定在多版本模式下的HBase Reader读取的版本数,取值只能为-1或大于1的数字,-1表示读取所有版本。 | multiVersionFixedColumn模式下必填项 | 无 |
range | 指定HBase Reader读取的rowkey范围。
|
否 | 无 |
scanCacheSize | HBase Reader每次从HBase中读取的行数。 | 否 | 256 |
scanBatchSize | HBase Reader每次从HBase中读取的列数。 | 否 | 100 |
脚本开发介绍
配置一个从HBase抽取数据到本地的作业(normal模式),使用脚本模式开发的详情请参见
通过脚本模式配置离线同步任务。
{
"type":"job",
"version":"2.0",//版本号。
"steps":[
{
"stepType":"hbase",//插件名。
"parameter":{
"mode":"normal",//读取HBase的模式,支持normal模式、multiVersionFixedColumn模式。
"scanCacheSize":"256",//HBase client每次RPC从服务器端读取的行数。
"scanBatchSize":"100",//HBase client每次RPC从服务器端读取的列数。
"hbaseVersion":"094x/11x",//HBase版本。
"column":[//字段。
{
"name":"rowkey",//字段名。
"type":"string"//数据类型。
},
{
"name":"columnFamilyName1:columnName1",
"type":"string"
},
{
"name":"columnFamilyName2:columnName2",
"format":"yyyy-MM-dd",
"type":"date"
},
{
"name":"columnFamilyName3:columnName3",
"type":"long"
}
],
"range":{//指定HBase Reader读取的rowkey范围。
"endRowkey":"",//指定结束rowkey。
"isBinaryRowkey":true,//指定配置的startRowkey和endRowkey转换为byte[]时的方式,默认值为false。
"startRowkey":""//指定开始rowkey。
},
"maxVersion":"",//指定在多版本模式下的HBase Reader读取的版本数。
"encoding":"UTF-8",//编码格式。
"table":"",//表名。
"hbaseConfig":{//连接HBase集群需要的配置信息,JSON格式。
"hbase.zookeeper.quorum":"hostname",
"hbase.rootdir":"hdfs://ip:port/database",
"hbase.cluster.distributed":"true"
}
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"//错误记录数。
},
"speed":{
"throttle":true,//当throttle值为false时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。
"concurrent":1,//作业并发数。
"mbps":"12"//限流
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}