背景
在传统银行 IT 架构中,联机交易与统计分析系统往往采用不同的技术与物理设备,通过定期执行的 ETL 将联机交易数据向分析系统中迁移。而作为数据服务资源池,同一份数据可能被不同类型的微服务共享访问。当一些联机交易与审计类业务针对同一份数据同时运行时,必须保证请求在完全隔离的物理环境中执行,做到交易分析业务无干扰。
HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,善于处理大数据场景,具备以下特点:
表规模大,亿级别行,上百万列
面向列存储,列独立检索
但是 HBase 在使用中也存在下面的一些问题:
HBase 只能做简单的 key-value 查询,无法实现复杂的统计 SQL
HBase 不支持多索引
运维复杂。Hadoop 作为一套完整大数据分析体系框架,操作比较复杂,出现问题难以定位
为了解决上述问题,在典型的数据中台和服务平台业务中,用户需要选择一个可弹性扩展的分布式关系型数据库,以满足以下需求:
标准 SQL 支持
支持高并发
多索引中支持
易维护等需求
SequoiaDB 巨杉数据库是计算存储分离架构,这种分布式架构一方面可以提供针对数据表的无限横向水平扩张,另一方面在计算层通过提供不同类型数据库实例的方式,100% 兼容 MySQL,PostgreSQL 与 SparkSQL 协议与语法。除了结构化数据外,SequoiaDB 巨杉数据库可以在同一集群支持包括 JSON 和 S3 对象存储、以及 Posix 文件系统在内的非结构化数据,使整个数据库面向上层的微服务架构应用提供了完整的数据服务资源池。
SequoiaDB 支持复杂 SQL 查询、支持多索引、支持高并发,并且作为开源分布式数据库运维简单便捷。到目前为止,已有大量用户从 HBase 迁移至 SequoiaDB,本文将与大家分享从 HBase 迁移数据至 SequoiaDB 的操作实战。
1 导出 HBase 数据
先用 Hive 把 HBase 数据导出为 csv 文件。Hbase 数据结构如下:
图 1 Hbase 数据结构 整合 HBase 和 hive, 创建 hive 外部表进行关联
hive 创建外部表关联 Hbase 参考语句
CREATE EXTERNAL TABLE hbase_user(
id string,
name string,
phone string,
birthday string,
id_number string,
gender string,
email string,
address string
) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:phone,info:birthday,info:id_number,info:gender,info:email,i nfo:address") # 指定映射关系,:key 为 rowkey
TBLPROPERTIES ("hbase.table.name" = "user"); # 指定要映射的 hbase 表名
整合效果如下所示
hive (default)> select * from hbase_user limit 1;
OK
hbase_user.id hbase_user.name hbase_user.phone hbase_user.birthday hbase_user.id_number hbase_user.gender hbase_user.email hbase_user.address
0004928c7287408085403c6ec4cd3c12 刘英 15073203583 2013-07-15 211324199408301340 M maojuan@yahoo.com 黑龍江省晶市徐汇六盘水街 J 座 222331
导出 hive 表中的数据到 csv
# hive 表导出 csv 参考语句
insert overwrite local directory '/tmp/data/hbase_hive_export_user' row format delimited # 指定行分割符
fields terminated by ',' # 执行的列分割符
select * from hbase_user;
导出的数据如下图所示,为 csv 格式
[hadoop@node hbase_hive_export_user.csv]$ tail -2f 000000_0
ffdca61d22b74462aefdcb948d819542, 边志强,18598897076,1958-08-25,52062819960928857X,M,ming52@gmail.com, 内蒙古自治区太原县浔阳史街 P 座 547199
ffdf82a4e2f84c3a9c99e726153d9496, 傅玉华,14509458979,1977-08-13,451022198005119836,M,yanhe@hotmail.com, 辽宁省兵县山亭深圳路 h 座 706208
2 通过 CSV 文件导入到 SequoiaDB 中
sdbimprt 是 SequoiaDB 的数据导入工具,它可以将 JSON 格式或 csv 格式的数据导入到 SequoiaDB 数据库中。
将 HBase 导出的 csv 文件导入到 SequoiaDB 中,导入的命令如下:
sdbimprt --hosts=localhost:11810 --type=csv --file=user.csv -c users -l employee --fields='id string,name string,phone string,birthday string,id_number string,gender string,email string,address string'
其中集合空间名称为 users,集合名称为 employee,执行结果如下:
$ sdbimprt --hosts=localhost:11810 --type=csv --file=user.csv -c users -l employee --fields='id string,name string,phone string,birthday string,id_number string,gender string,email string,address string'
parsed records: 24282
parse failure: 0
sharding records: 0
sharding failure: 0
imported records: 24282
import failure: 0
3 在 SequoiaDB 的 MySQL 层创建 HBase 对应映射表
CREATE TABLE `employee` (`id` int(11) DEFAULT NULL,
`name` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL,
`phone` int(20) DEFAULT NULL,
`birthday` datetime DEFAULT NULL,
`id_number` int(20) DEFAULT NULL,
`gender` varchar(11) COLLATE utf8mb4_bin DEFAULT NULL,
`email` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL,
`address` int(50) DEFAULT NULL
) ENGINE=SEQUOIADB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
4 在 SequoiaDB 的 SAC 图形化界面查看数据导入情况
SAC 图形化界面是 SequoiaDB 巨杉数据库自研的一款图形化工具,具备自动化部署集群、配置主机及集群信息、监控主机及集群状态、查看集群数据等等功能,可大幅度提高数据库管理效率。
图 2 SAC 图形化界面功能展示
登录到 SequoiaDB 存储引擎层,查看数据量为 24282,数据导入成功完毕。
#sdb
> db = new Sdb("localhost", 11810)
> db.users.employee.count()
24282
Takes 0.002236s.
图 3 SAC 图形化界面 SequoiaDB 存储引擎层查看数据示意图
同时,在 SequoiaDB 对应的 MySQL 实例层,可以查看到对应数据是 24282
$ /opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
...
mysql> use users;
Database changed
mysql> show tables;
+-----------------+
| Tables_in_users |
+-----------------+
| employee |
+-----------------+
1 row in set (0.00 sec)
mysql> select count(*) from employee;
+----------+
| count(*) |
+----------+
| 24282 |
+----------+
1 row in set (0.00 sec)
在 SequoiaDB 的 SAC 图形化界面中,查看 MySQL 实例层,得出数据条数为 24282
图 4 SAC 界面 MySQL 实例层查询数据示意图
5 在 SequoiaDB 中执行多索引查询验证
在 SequoiaDB 的 mysql 实例层创建多个索引
mysql> ALTER TABLE `employee` ADD INDEX index_id (`id`);
mysql> ALTER TABLE `employee` ADD INDEX index_email (`name`);
在 SequoiaDB 的 mysql 实例层, 执行多个索引查询:
mysql> select count(*) from employee where name="xiuyingxia";
+----------+
| count(*) |
+----------+
| 2 |
+----------+
1 row in set (0.00 sec)
从 HBase 迁移数据至 SequoiaDB,并且在 SequoiaDB 的 SAC 界面可以分别从底层存储引擎层和 MySQL 的实例层查看到对应导入的数据,并且支持多索引查询。
总结
SequoiaDB 支持复杂 SQL 查询、支持多索引、支持高并发,作为开源分布式数据库运维简单便捷。Hbase 迁移至 SequoiaDB,可以先通过 hive 导出数据文件 csv 格式,然后通过 SequoiaDB 的导入工具 sdbimprt 导入到 SequoiaDB 中。