HBase Reader插件实现了从HBase中读取数据,本文为您介绍HBase Reader支持的数据类型、字段映射和数据源等参数及配置示例。

在底层实现上,HBase Reader通过HBase的Java客户端连接远程HBase服务,并通过Scan方式读取您指定的rowkey范围内的数据,将读取的数据使用数据集成自定义的数据类型拼装为抽象的数据集,并传递给下游Writer处理。

使用限制

支持的功能

  • 支持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。
  • 支持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中的表当成竖表进行读取。读出的每条记录是四列形式,依次为rowKeyfamily:qualifiertimestampvalue。读取时需要明确指定要读取的列,把每一个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

支持的数据类型

支持读取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认证。
说明
  • 如果该值配置为true,必须要配置以下kerberos认证相关参数:
    • kerberosKeytabFilePath
    • kerberosPrincipal
    • hbaseMasterKerberosPrincipal
    • hbaseRegionserverKerberosPrincipal
    • hbaseRpcProtection
  • 如果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模式下必填。
  • normal模式下
    name指定读取的HBase列,除rowkey外,必须为 列族:列名的格式。type指定源数据的类型,format指定日期类型的格式。value指定当前类型为常量,不从HBase读取数据,而是根据value值自动生成对应的列。配置格式如下所示:
    "column": 
    [
    {
      "name": "rowkey",
      "type": "string"
    },
    {
      "value": "test",
      "type": "string"
    }
    ]

    normal模式下,对于您指定的Column信息,type必须填写,namevalue必须选择其一。

  • multiVersionFixedColumn模式
    name指定读取的HBase列,除rowkey外,必须为 列族:列名的格式,type指定源数据的类型,format指定日期类型的格式。 multiVersionFixedColumn模式下不支持常量列。配置格式如下所示:
    "column": 
    [
    {
      "name": "rowkey",
      "type": "string"
    },
    {
      "name": "info:age",
      "type": "string"
    }
    ]
maxVersion 指定在多版本模式下的HBase Reader读取的版本数,取值只能为-1或大于1的数字,-1表示读取所有版本。 multiVersionFixedColumn模式下必填项
range 指定HBase Reader读取的rowkey范围。
  • startRowkey:指定开始rowkey。
  • endRowkey:指定结束rowkey。
  • isBinaryRowkey:指定配置的startRowkey和endRowkey转换为 byte[]时的方式,默认值为false。如果为true,则调用Bytes.toBytesBinary(rowkey)方法进行转换。如果为false,则调用Bytes.toBytes(rowkey)。配置格式如下所示:
    "range": {
    "startRowkey": "aaa",
    "endRowkey": "ccc",
    "isBinaryRowkey":false
    }
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"
            }
        ]
    }
}