本文为您介绍HBase11xsql Writer支持的数据类型、写入方式、字段映射和数据源等参数及配置示例。
HBase11xsql Writer插件实现了向Hbase中的SQL表(phoenix)批量导入数据。因为Phoenix对rowkey进行了数据编码,如果您直接使用HBaseAPI写入,需要手动转换数据,麻烦且易错。HBase11xsql Writer插件为您提供了单间的SQL表的数据导入方式。
使用限制
Writer中的列的定义顺序必须与Reader的列顺序匹配,Reader中的列顺序定义了输出的每一行中,列的组织顺序。而Writer的列顺序,定义的是在收到的数据中,Writer期待的列的顺序。示例如下:
Reader的列顺序为c1,c2,c3,c4。
Writer的列顺序为x1,x2,x3,x4。
则Reader输出的列c1就会赋值给Writer的列x1。如果Writer的列顺序是x1,x2,x4,x3,则c3会赋值给x4,c4会赋值给x3。
支持的功能
支持带索引的表的数据导入,可以同步更新所有的索引表。
限制
- 仅支持1.x系列的HBase。
- 仅支持通过phoenix创建的表,不支持原生HBase表。
- 不支持带时间戳的数据导入。
实现原理
通过Phoenix的JDBC驱动,执行UPSERT语句向表中批量写入数据。因为使用上层接口,所以可以同步更新索引表。
参数说明
参数 | 描述 | 是否必选 | 默认值 |
---|---|---|---|
plugin | 插件名字,必须是hbase11xsql。 | 是 | 无 |
table | 要导入的表名,大小写敏感,通常phoenix表都是大写表名。 | 是 | 无 |
column | 列名,大小写敏感。通常phoenix的列名都是大写。
说明
|
是 | 无 |
hbaseConfig | hbase集群地址,zk为必填项,格式为ip1, ip2, ip3。
说明
|
是 | 无 |
batchSize | 批量写入的最大行数。 | 否 | 256 |
nullMode | 读取到的列值为null时,您可以通过以下两种方式进行处理:
|
否 | skip |
脚本开发介绍
{
"type": "job",
"version": "1.0",
"configuration": {
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"throttle":true,//当throttle值为false时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。
"concurrent":1, //作业并发数。
"mbps":"1"//限流
}
},
"reader": {
"plugin": "odps",
"parameter": {
"datasource": "",
"table": "",
"column": [],
"partition": ""
}
},
"plugin": "hbase11xsql",
"parameter": {
"table": "目标hbase表名,大小写有关",
"hbaseConfig": {
"hbase.zookeeper.quorum": "目标hbase集群的ZK服务器地址,向PE咨询",
"zookeeper.znode.parent": "目标hbase集群的znode,向PE咨询"
},
"column": [
"columnName"
],
"batchSize": 256,
"nullMode": "skip"
}
}
}
常见问题
Q:并发设置多少比较合适?速度慢时增加并发有用吗?
A:数据导入进程默认JVM的堆大小是2GB,并发(channel数)是通过多线程实现的,开过多的线程有时并不能提高导入速度,反而可能因为过于频繁的GC导致性能下降。一般建议并发数(channel)为5-10。
Q:batchSize设置多少比较合适?
A:默认是256,但应根据每行的大小来计算最合适的batchSize。通常一次操作的数据量在2MB~4MB左右,用该值除以行大小,即可得到batchSize。