HBase连接器


    HBase连接器维护着一个元存储,用于持久化HBase元数据,目前元存储只支持以下存储格式:。

    注意: Hbase连接器仅支持连接Apache HBase 2.2.3及以下的版本。

    连接器配置

    1 . 创建并编辑etc/catalog/hbase.properties,按需要替换下面xxx的值;connector.name是固定的;对于hbase.zookeeper.quorum的值,如果有多个IP地址,请使用逗号(,)作为分隔符。

    2 . 使用openLooKeng元存储来存储HBase元数据

    必须创建etc/hetu-metastore.properties来配置元数据存储平台,存储平台可选择RDBMS/HDFS。

    配置举例:

    创建并编辑 etc/hetu-metastore.properties

    选择一:hetu-metastore配置为RDBMS:

    1. hetu.metastore.type=jdbc
    2. hetu.metastore.db.url=jdbc:mysql://xx.xx.xx.xx:3306/dbName....
    3. hetu.metastore.db.user=root
    4. hetu.metastore.db.password=123456

    选择二:hetu-metastore配置为HDFS:

    1. hetu.metastore.type=hetufilesystem
    2. # profile name of hetu file system
    3. hetu.metastore.hetufilesystem.profile-name=hdfs-config-metastore
    4. #the path of metastore storage in the hetu file system
    5. hetu.metastore.hetufilesystem.path=/etc/openlookeng/metastore

    如果选择HDFS,接下来需要配置hetu filesystem(配置文件名称同上述profile-name保持一致,后缀为properties)。

    创建并编辑 etc/filesystem/hdfs-config-metastore.properties

    1. fs.client.type=hdfs
    2. hdfs.config.resources=/opt/openlookeng/xxx/core-site.xml,/opt/openlookeng/xxx/hdfs-site.xml
    3. hdfs.authentication.type=NONE

    注意: 以上hbase.properties和hetu-metastore.properties两个配置文件缺一不可。如配置为HDFS,则另外需要hdfs-config-metastore.properties

    1. 可能遇到的问题:配置完成后,启动服务遇到“xxx路径(A配置文件)不在白名单列表”的错误
    2. 解决方案:选择日志中打印的白名单列表的一个目录,将所报错的路径下的文件,拷贝到该目录,并修改A配置文件中相应路径。

    Kerberos配置:

    如果HBase/Zookeeper是安全集群,则需要配置kerberos相关信息

    编辑 jaas.conf

    1. Client {
    2. com.sun.security.auth.module.Krb5LoginModule required
    3. useKeyTab=true
    4. principal="lk_username@HADOOP.COM"
    5. useTicketCache=false
    6. storeKey=true
    7. debug=true;
    8. };

    配置属性

    属性类型默认值是否必填说明
    column_mappingString同一个族中的所有列指定表中列族与列限定符的映射关系。如果需要链接HBase数据源中的表,则column_mapping信息必须与HBase数据源一致;如果创建一个HBase数据源中不存在的新表,则column_mapping由用户指定。
    row_idString第一个列名row_id为HBase表中RowKey对应的列名
    hbase_table_nameStringNULLhbase_table_name指定要链接的HBase数据源上的表空间和表名,使用“:”连接表空间和表名,默认表空间为“default”。
    externalBooleantrue如果external为true,表示该表是HBase数据源中表的映射表。不支持删除HBase数据源上原有的表。当external为false时,删除本地HBase表的同时也会删除HBase数据源上的表。
    split_by_charString0~9,a~z,A~Zsplit_by_char为分片切割的依据,若RowKey的第一个字符由数字构成,则可以根据不同的数字进行分片切割,提高查询并发度。不同类型的符号用逗号隔开。如果设置不当,会导致查询数据结果不完整,请根据RowKey的实际情况进行配置。

    数据说明

    目前支持10种数据类型: VARCHAR、TINYINT、SMALLINT、INTEGER、BIGINT、DOUBLE、BOOLEAN、TIME、DATE和TIMESTAMP。

    下推

    HBase连接器支持下推大部分运算符,如基于RowKey的点查询、基于RowKey的范围查询等。此外,还支持这些谓词条件以进行下推:=>=><<=、、innot inbetween andis nullis not null

    1. 1. 建表时指定分片切割规则,提升单表查询性能;
    2. Create table xxx() with(split_by_char='0~9,a~z,A~Z'),
    3. split_by_char表示rowKey的第一个字符的范围,为分片切割的依据。若RowKey的第一个字符由数字构成,则可以根据不同的数字进行分片切割,提高查询并发度。不同类型的符号用逗号隔开。
    4. 如果设置不当,会导致查询数据结果不完整,请根据RowKey的实际情况进行配置。无特殊要求时,无需修改。默认情况已包含所有的数字和字母。
    5. rowKey为汉字,则create table xxx() with(split_by_char='一~锯');
    6. 另外,建表时会根据split_by_char指定预分区的splitKey,尽量将数据分散到各个region,那样在进行hbase读写时,对性能会有很好的改善。
    7. 2. 可配置ClientSide模式来读取数据,提升多并发查询性能;
    8. ClientSide的工作机制是在HDFS上创建hbase表的snapshot,记录各个数据文件所在的region地址,在读取数据时,不需要经过hbase region server,而是直接访问region,这样可以在高并发下降低region server的压力。
    9. 编辑 etc/catalog/hbase.properties 新增如下配置
    10. hbase.client.side.enable=true
    11. hbase.core.site.path=/opt/openlookeng/xxx/core-site.xml
    12. hbase.hdfs.site.path=/opt/openlookeng/xxx/hdfs-site.xml
    13. HDFS为安全集群,则另外新增如下配置】
    14. hbase.authentication.type=KERBEROS
    15. hbase.krb5.conf.path=/opt/openlookeng/xxx/krb5.conf
    16. hbase.kerberos.keytab=/opt/openlookeng/xxx/user.keytab
    17. hbase.kerberos.principal=lk_username@HADOOP.COM
    18. 备注:
    19. 1. clientSide模式的snapshot生命周期目前是没有进行维护的,如果超出了hbase对快照数的限制,则需要手动清理hdfs上的快照。
    20. 2. clientSide模式下,不支持算子下推。
    21. 3. 不允许为hbase的系统表创建快照(如schema名为hbase

    使用示例

    HBase连接器基本上支持所有的SQL语句,包括创建、查询、删除模式,添加、删除、修改表,插入数据,删除行等。

    以下是一些示例:

    1. CREATE SCHEMA schemaName;

    删除模式

    只支持删除空的模式。

    1. DROP SCHEMA schemaName;

    HBase连接器支持两种建表形式:

    1. 创建表并直接链接到HBase数据源中已存在的表,必须指定hbase_table_name。

    以下示例创建表schemaName.tableName并链接到一个名为hbaseNamespace:hbaseTable的现有表:

    映射关系的格式为:‘column_name:family:qualifier’

    注意

    如果用户指定了hbase_table_name,则创建表时,必须和hbase_table_name中的命名空间一致。否则将会创建失败。

    示例(建表失败):

    1. CREATE TABLE default.typeMapping (
    2. rowId VARCHAR,
    3. qualifier1 INTEGER
    4. )
    5. WITH (
    6. column_mapping = 'qualifier1:f1:q2',
    7. row_id = 'rowId',
    8. hbase_table_name = 'hello:type4'
    9. );

    创建连接HBase集群的表时,必须保证HBase连接器和HBase数据源中的模式名称一致,且达到相同的隔离级别。

    删除表

    1. DROP TABLE schemaName.tableName;
    1. ALTER TABLE schemaName.tableName RENAME TO schemaName.tableNameNew;

    注意

    目前不支持对通过HBase创建的表进行重命名。

    添加列

    1. ALTER TABLE schemaName.tableName
    2. ADD COLUMN column_name INTEGER
    3. WITH (family = 'f1', qualifier = 'q1');

    注意

    目前不支持删除列。

    限制

    语句show tables只能显示用户已与HBase数据源建立关联的表,因为HBase没有提供接口来检索表的元数据。

    vi hbase-site.xml

    1. <!-- default is 2 -->
    2. <property>
    3. <name>hbase.hregion.memstore.block.multiplier</name>
    4. <value>4</value>
    5. </property>
    6. <!-- default is 64MB 67108864 -->
    7. <property>
    8. <name>hbase.hregion.memstore.flush.size</name>
    9. <value>134217728</value>
    10. </property>
    11. <!-- default is 7, should be at least 2x compactionThreshold -->
    12. <property>
    13. <name>hbase.hstore.blockingStoreFiles</name>
    14. <value>200</value>
    15. </property>
    16. <property>
    17. <name>hbase.hstore.compaction.max</name>
    18. <value>20</value>
    19. </property>