配置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通信加密。
操作步骤
- 获取HBase数据源的“hbase-site.xml”、“hdfs-site.xml”和“core-site.xml”配置文件。
- 登录HBase数据源所在集群的FusionInsight Manager页面。
- 在“主页”右上方单击“下载客户端”,根据界面提示下载“完整客户端”文件。
- 将下载的客户端文件压缩包解压,获取“FusionInsight_Cluster_1_Services_ClientConfig/HBase/config”路径下的“hbase-site.xml”、“core-site.xml”和“hdfs-site.xml”文件。
- 获取HBase数据源的代理用户的“user.keytab”和“krb5.conf”文件。
- 登录HBase数据源所在集群的FusionInsight Manager页面。
- 选择“系统 > 权限 > 用户”。
- 选择对应的数据源用户,在“操作”列中选择“更多 > 下载认证凭据”。
- 从下载的文件中解压获取“user.keytab”和“krb5.conf”文件。
数据源的代理用户需要具有对HBase的相关操作权限。
- 使用HetuEngine管理员用户登录FusionInsight Manager,选择“集群 > 服务 > HetuEngine”,进入HetuEngine服务页面。
- 在概览页签下的“基本信息”区域,单击“HSConsole WebUI”后的链接,进入HSConsole界面。
- 选择“数据源”,单击“添加数据源”。在“添加数据源”页面填写参数。
- 配置“基本配置”,填写数据源名称,选择数据源类型“HBase”。
- 配置“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
- (可选)自定义配置。
- 单击“确定”。
- 登录集群客户端所在节点,执行以下命令,切换到客户端安装目录并认证用户。
cd /opt/client
source bigdata_env
kinit HetuEngine组件操作用户 (普通模式集群跳过)
- 执行以下命令,登录数据源的catalog。
hetu-cli --catalog 数据源名称 --schema 数据库名
例如执行以下命令:
hetu-cli --catalog hbase_1 --schema default
- 执行以下命令,可正常查看数据库表信息或不报错即表示连接成功。
show tables;
- 创建结构化映射表。
映射表建表语句格式:
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单表查询范围扫描优化功能,然后还需要在计算实例的“coordinator.config.properties”和“worker.config.properties”参数文件中添加自定义参数“enable-dynamic-filtering”,值为“true”,可参考3.e。
约束
不支持如下语法:ALTER,VIEW。