本文为您介绍HBase11xsql Writer支持的数据类型、写入方式、字段映射和数据源等参数及配置示例。

HBase11xsql Writer插件实现了向Hbase中的SQL表(phoenix)批量导入数据。因为Phoenix对rowkey进行了数据编码,如果您直接使用HBaseAPI写入,需要手动转换数据,麻烦且易错。HBase11xsql Writer插件为您提供了单间的SQL表的数据导入方式。

在底层实现上,通过Phoenix的JDBC驱动,执行UPSERT语句向HBase写入数据。
注意 HBase11xsql Writer仅支持使用独享数据集成资源组,不支持使用默认资源组和自定义资源组

使用限制

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。

支持的功能

支持带索引的表的数据导入,可以同步更新所有的索引表。

限制

HBase11xsql Writer插件的限制如下所示:
  • 仅支持1.x系列的HBase。
  • 仅支持通过phoenix创建的表,不支持原生HBase表。
  • 不支持带时间戳的数据导入。

实现原理

通过Phoenix的JDBC驱动,执行UPSERT语句向表中批量写入数据。因为使用上层接口,所以可以同步更新索引表。

参数说明

参数 描述 是否必选 默认值
plugin 插件名字,必须是hbase11xsql。
table 要导入的表名,大小写敏感,通常phoenix表都是大写表名。
column 列名,大小写敏感。通常phoenix的列名都是大写。
说明
  • 列的顺序必须与Reader输出的列的顺序一一对应。
  • 不需要填写数据类型,会自动从phoenix获取列的元数据。
hbaseConfig hbase集群地址,zk为必填项,格式为ip1, ip2, ip3。
说明
  • 多个IP之间使用英文的逗号分隔。
  • znode是可选的,默认值是/hbase。
batchSize 批量写入的最大行数。 256
nullMode 读取到的列值为null时,您可以通过以下两种方式进行处理:
  • skip:跳过该列,即不插入该列(如果之前已经存在,则会被删除)。
  • empty:插入空值,值类型的空值是0,varchar的空值是空字符串。
skip

脚本开发介绍

脚本配置示例如下,使用脚本模式开发的详情请参见通过脚本模式配置任务
{
  "type": "job",
  "version": "1.0",
  "configuration": {
    "setting": {
      "errorLimit": {
        "record": "0"
      },
      "speed": {
        "mbps": "1",
        "concurrent": "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