博客 > 巨杉Tech | Hbase迁移至SequoiaDB 实战

巨杉Tech | Hbase迁移至SequoiaDB 实战

 2019-09-12  SequoiaDB,技术教程

背景


在传统银行 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 数据结构如下: 


image.png


 图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;OKhbase_user.id  hbase_user.name  hbase_user.phone  hbase_user.birthday  hbase_user.id_number  hbase_user.gender  hbase_user.email  hbase_user.address0004928c7287408085403c6ec4cd3c12  刘英  15073203583  2013-07-15  211324199408301340  M  maojuan@yahoo.com  黑龍江省晶市徐汇六盘水街J座 222331
  • 导出 hive 表中的数据到 csv

  • 导出的数据如下图所示,为 csv 格式

[hadoop@node hbase_hive_export_user.csv]$ tail -2f 000000_0ffdca61d22b74462aefdcb948d819542,边志强,18598897076,1958-08-25,52062819960928857X,M,ming52@gmail.com,内蒙古自治区太原县浔阳史街P座 547199ffdf82a4e2f84c3a9c99e726153d9496,傅玉华,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 巨杉数据库自研的一款图形化工具,具备自动化部署集群、配置主机及集群信息、监控主机及集群状态、查看集群数据等等功能,可大幅度提高数据库管理效率。

image.png
图2 SAC图形化界面功能展示


  • 登录到 SequoiaDB 存储引擎层,查看数据量为24282,数据导入成功完毕。

#sdb
> db = new Sdb("localhost", 11810)
> db.users.employee.count()
24282
Takes 0.002236s.

  • 在 SequoiaDB 的图形化界面上,可以查看到导入到 SequoiaDB 中的数据条数为24282

image.png


图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

image.png

图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 中。

准备开始体验 SequoiaDB 巨杉数据库?