更新时间:2024-11-29 GMT+08:00

配置HBase数据源

操作场景

本章节指导用户在HSConsole界面添加HBase数据源。

前提条件

  • 数据源所在集群域名与HetuEngine集群域名不能相同。
  • 数据源所在集群与HetuEngine集群节点网络互通。
  • HetuEngine所在集群的所有节点的“/etc/hosts”文件中,添加待对接数据源所在集群的主机名称和对应的IP映射,及其“/etc/hosts”文件中的“10.10.10.10 hadoop.系统域名”(如“10.10.10.10 hadoop.hadoop.com”),否则HetuEngine无法根据主机名称连接到非本集群节点。
  • 已创建HetuEngine计算实例。
  • 数据源所在集群与HetuEngine所在集群上ZooKeeper的SSL通信加密配置需保持一致。

    登录FusionInsight Manager,选择“集群 > 服务 > ZooKeeper > 配置 > 全部配置”,搜索“ssl.enabled”,值为“true”,表示启用SSL通信加密,值为“false”表示关闭SSL通信加密。

操作步骤

  1. 获取HBase数据源的“hbase-site.xml”、“hdfs-site.xml”和“core-site.xml”配置文件。

    1. 登录HBase数据源所在集群的FusionInsight Manager页面。
    2. 在“主页”右上方单击“下载客户端”,根据界面提示下载“完整客户端”文件。
    3. 将下载的客户端文件压缩包解压,获取“FusionInsight_Cluster_1_Services_ClientConfig/HBase/config”路径下的“hbase-site.xml”、“core-site.xml”和“hdfs-site.xml”文件。

  2. 获取HBase数据源的代理用户的“user.keytab”和“krb5.conf”文件。

    1. 登录HBase数据源所在集群的FusionInsight Manager页面。
    2. 选择“系统 > 权限 > 用户”。
    3. 选择对应的数据源用户,在“操作”列中选择“更多 > 下载认证凭据”。
    4. 从下载的文件中解压获取“user.keytab”和“krb5.conf”文件。

    数据源的代理用户需要具有对HBase的相关操作权限。

  3. 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
  4. 在概览页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
  1. 选择“数据源”,单击“添加数据源”。在“添加数据源”页面填写参数。

    1. 配置“基本配置”,填写数据源名称,选择数据源类型“HBase”。
    2. 配置“HBase配置”,参数配置请参考表1
      表1 HBase配置

      参数

      描述

      取值样例

      驱动

      默认为“hbase-connector”。

      hbase-connector

      ZooKeeper Quorum地址

      该数据源ZooKeeper服务所有quorumpeer实例业务IP。当该数据源ZooKeeper服务使用IPv6时,则需额外在ZooKeeper Quorum地址中指定客户端端口号。

      登录FusionInsight Manager,选择“集群 > 服务 > ZooKeeper > 实例”,可查看所有quorumpeer实例所在主机业务IP地址。

      • IPv4:10.10.10.10,10.10.10.11,10.10.10.12
      • IPv6:[10:10::10:11]:24002

      ZooKeeper客户端端口号

      ZooKeeper客户端端口号。

      登录FusionInsight Manager,选择“集群 > 服务 > ZooKeeper”,在“配置”页签查看“clientPort”的值。

      2181

      HBase RPC通信保护

      根据1获取的“hbase-site.xml”里配置项“hbase.rpc.protection”的值进行选择:

      • “authentication”时选择“否”
      • “privacy”时选择“是”

      安全认证机制

      打开安全模式后自动默认为KERBEROS。

      KERBEROS

      Principal

      开启安全认证机制时填写此参数。就是2中获取的“user.keytab”文件所属的用户。

      user_hbase@HADOOP2.COM

      keytab文件

      开启安全模式时填写此参数。安全认证的密钥,在本地选择2获取的“user.keytab”文件。

      user.keytab

      krb5文件

      开启安全模式时填写此参数。Kerberos认证用到的配置文件,在本地选择2获取的“krb5.conf”文件。

      krb5.conf

      hbase-site文件

      开启安全模式时填写此参数。连接hdfs时,需要的配置文件。在本地选择1获取的“hbase-site.xml”文件。

      hbase-site.xml

      core-site文件

      开启安全模式时填写此参数。连接hdfs时需要用到的配置。在本地选择1获取的“core-site.xml”文件。

      core-site.xml

      hdfs-site文件

      开启安全模式时填写此参数。连接hdfs时需要用到的配置。在本地选择1获取的“hdfs-site.xml”文件。

      hdfs-site.xml

    3. (可选)自定义配置。
    4. 单击“确定”。

  2. 登录集群客户端所在节点,执行以下命令,切换到客户端安装目录并认证用户。

    cd /opt/client

    source bigdata_env

    kinit HetuEngine组件操作用户 (普通模式集群跳过)

  3. 执行以下命令,登录数据源的catalog。

    hetu-cli --catalog 数据源名称 --schema 数据库名

    例如执行以下命令:

    hetu-cli --catalog hbase_1 --schema default

  4. 执行以下命令,可正常查看数据库表信息或不报错即表示连接成功。

    show tables;

  5. 创建结构化映射表。

    映射表建表语句格式:
    CREATE TABLE schemaName.tableName (
      rowId VARCHAR,
      qualifier1 TINYINT,
      qualifier2 SMALLINT,
      qualifier3 INTEGER,
      qualifier4 BIGINT,
      qualifier5 DOUBLE,
      qualifier6 BOOLEAN,
      qualifier7 TIME,
      qualifier8 DATE,
      qualifier9 TIMESTAMP
    )
    WITH (
    column_mapping = 'qualifier1:f1:q1,qualifier2:f1:q2,qualifier3:f2:q3,qualifier4:f2:q4,qualifier5:f2:q5,qualifier6:f3:q1,qualifier7:f3:q2,qualifier8:f3:q3,qualifier9:f3:q4',
    row_id = 'rowId',
    hbase_table_name = 'hbaseNamespace:hbaseTable',
    external = true
    );

    “schemaName”必须与“hbase_table_name”中的“hbaseNamespace”一致。

    • 映射表建表支持:直接关联HBase数据源中的表、创建并关联HBase数据源中不存在的新表的两种形式。
    • 映射表字段支持的数据类型包括:VARCHAR、TINYINT、SMALLINT、INTEGER、BIGINT、DOUBLE、BOOLEAN、TIME、DATE、TIMESTAMP。
    • 映射表建表语句关键字说明见下表。
      表2 映射表建表语句关键字说明

      关键字

      类型

      是否必填

      默认值

      备注

      column_mapping

      String

      所有的列在同一个Family列族下

      指定映射表中列与HBase数据源表中列族的映射关系。如果需要关联一张HBase数据源中的表,那么column_mapping必须与HBase数据源中的一致;如果创建一张HBase数据源中不存在的新表,column_mapping 由用户指定。

      column_mapping格式为“映射表列名:HBase列族:HBase列名”,映射表列名必须为小写,HBase列名需要与HBase端完全一致。

      row_id

      String

      映射表的第一列

      HBase数据源中表rowkey 对应的列名。

      hbase_table_name

      String

      指定需要关联的HBase数据源上的表空间和表名,用:连接。默认表空间为default。如果创建一张HBase数据源中不存在的新表,hbase_table_name不需要指定。

      external

      Boolean

      true

      如果external=true ,表示该表为HBase数据源中表的一个映射表,不支持删除HBase数据源上的原始表;如果external=false,则删除Hetu-HBase表的同时,会删除HBase数据源上的表。

数据类型映射

HBase是基于字节的分布式存储系统,它将所有数据类型存储为字节数组。要在HetuEngine中表示HBase数据,需要先在HetuEngine中通过创建映射表的方式为HetuEngine列限定符选择与HBase列限定符的值相匹配的数据类型。

目前HetuEngine列限定符支持以下数据类型:VARCHAR、TINYINT、SMALLINT、INTEGER、BIGINT、DOUBLE、BOOLEAN、TIME、DATE和TIMESTAMP。

性能优化

  • 谓词下推

    查询支持大部分算子下推,支持的谓词条件有:=、>=、>、<、<=、!=、IN、NOT IN、IS NULL、IS NOT NULL和BETWEEN AND。

  • 批量GET查询

    批量GET即在HBase的API中将所要查询的多个Row Key封装成一个List<Get>,然后请求这个列表以获取数据的查询方式。该方式能避免每个Row Key都发起一次请求。

  • HBase单表查询范围扫描优化

    HBase单表查询范围扫描优化是指根据HBase的列的谓词条件尝试自动推断rowkey的起止地址,在tableScan的时候设置hbase scan起止地址从而提高访问性能。

    比如假设HBase数据表的rowkey由building_code:house_code:floor:uuid四列组成,对于查询过滤条件where building_code = ‘123’and house_code = ‘456’,HetuEngine单表查询优化会只扫描rowkey范围前缀为‘123-456’的列,从而提高性能。

    开启HBase单表查询范围扫描优化的功能需要在5.c中添加自定义参数“hbase.rowkey.adaptive.optimization.enabled”,值为“true”。

    此外,在建表语句的建表属性中需指定rowkey的组成列和分隔字符:

    表3 HBase的rowkey组成列和分隔字符

    表属性

    表属性含义

    样例

    row_id_construct_columns

    HBase数据表的rowkey组成列

    building_code:house_code:floor:uuid

    row_id_construct_columns_terminal

    HBase数据表的rowkey组成列的分割字符

    例如一个有building_code:house_code:floor:uuid四列组成的rowkey的建表语句如下:

    CREATE TABLE test.table_hbase_test (
    row_id string,
    col1 string,
    col2 string,
    col3 string,
    building_code string,
    house_code string,
    floor string,
    uuid string)
    WITH (column_mapping = '
    col1:attr:col1,
    col2:attr:col2,
    col3:attr:col3,
    building_code:attr:building_code,
    house_code:attr:house_code,
    floor:attr:floor,
    uuid:attr:uuid',
    row_id = 'row_id',
    row_id_construct_columns = 'building_code:house_code:floor:uuid',
    row_id_construct_columns_terminal = ':',
    hbase_table_name='test:table_hbase_test',
    external = true)
  • Hbase多表联合查询动态过滤优化

    HBase支持动态过滤优化。

    开启动态过滤功能,需先开启HBase单表查询范围扫描优化功能,然后还需要在计算实例的“coordinator.config.properties”和“worker.config.properties”参数文件中添加自定义参数“enable-dynamic-filtering”,值为“true”,可参考3.e

约束

不支持如下语法:ALTER,VIEW。