背景

在传统银行 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 ;

    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    刘英        --        M    maojuan@yahoo.com 黑龍江省晶市徐汇六盘水街J座 

导出 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,边志强,,--,52062819960928857X,M,ming52@gmail.com,内蒙古自治区太原县浔阳史街P座 

    ffdf82a4e2f84c3a9c99e726153d9496,傅玉华,,--,,M,yanhe@hotmail.com,辽宁省兵县山亭深圳路h座 

2 通过CSV文件导入到SequoiaDB中

sdbimprt 是 SequoiaDB 的数据导入工具,它可以将 JSON 格式或 csv 格式的数据导入到 SequoiaDB 数据库中。

将 HBase 导出的 csv 文件导入到 SequoiaDB 中,导入的命令如下:

sdbimprt --hosts=localhost: --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: --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: 

    parse failure: 

    sharding records: 

    sharding failure: 

    imported records: 

    import failure: 

3 在SequoiaDB 的MySQL层创建HBase对应映射表

   CREATE TABLE `employee` (

      `id` int() DEFAULT NULL,

      `name` varchar() COLLATE utf8mb4_bin DEFAULT NULL,

      `phone` int() DEFAULT NULL,

      `birthday` datetime DEFAULT NULL,

      `id_number` int() DEFAULT NULL,

      `gender` varchar() COLLATE utf8mb4_bin DEFAULT NULL,

      `email` varchar() COLLATE utf8mb4_bin DEFAULT NULL,

      `address` int() DEFAULT NULL

    ) ENGINE=SEQUOIADB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

4 在SequoiaDB 的SAC图形化界面查看数据导入情况

SAC 图形化界面是 SequoiaDB 巨杉数据库自研的一款图形化工具,具备自动化部署集群、配置主机及集群信息、监控主机及集群状态、查看集群数据等等功能,可大幅度提高数据库管理效率。

图2 SAC图形化界面功能展示

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

    #sdb

    > db = new Sdb("localhost", )

    > db.users.employee.count()

    Takes .002236s.

图3  SAC图形化界面SequoiaDB存储引擎层查看数据示意图

同时,在 SequoiaDB 对应的 MySQL 实例层,可以查看到对应数据是24282

   $ /opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P  -u root

    ...

    mysql> use users;

    Database changed

    mysql> show tables;

    +-----------------+

    | Tables_in_users |

    +-----------------+

    | employee        |

    +-----------------+

     row in set (0.00 sec)

    mysql> select count(*) from employee;

    +----------+

    | count(*) |

    +----------+

    |     |

    +----------+

     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(*) |

    +----------+

    |         |

    +----------+

     row in set (0.00 sec)

从 HBase 迁移数据至 SequoiaDB,并且在 SequoiaDB 的 SAC 界面可以分别从底层存储引擎层和 MySQL 的实例层查看到对应导入的数据,并且支持多索引查询。

总结

SequoiaDB 支持复杂 SQL 查询、支持多索引、支持高并发,作为开源分布式数据库运维简单便捷。Hbase 迁移至 SequoiaDB,可以先通过 hive 导出数据文件 csv 格式,然后通过 SequoiaDB 的导入工具 sdbimprt 导入到 SequoiaDB 中。

巨杉Tech | Hbase迁移至SequoiaDB 实战的更多相关文章

  1. HBase数据迁移到Kafka实战

    1.概述 在实际的应用场景中,数据存储在HBase集群中,但是由于一些特殊的原因,需要将数据从HBase迁移到Kafka.正常情况下,一般都是源数据到Kafka,再有消费者处理数据,将数据写入HBas ...

  2. 巨杉Tech | 使用 SequoiaDB 分布式数据库搭建JIRA流程管理系统

    介绍 JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域.很多企业与互联网公司都在使用Jira作为内部 ...

  3. 巨杉Tech|SequoiaDB 巨杉数据库高可用容灾测试

    数据库的高可用是指最大程度地为用户提供服务,避免服务器宕机等故障带来的服务中断.数据库的高可用性不仅仅体现在数据库能否持续提供服务,而且也体现在能否保证数据的一致性. SequoiaDB 巨杉数据库作 ...

  4. 巨杉Tech | 微服务趋势下的数据库设计与应用简析

    周五(7月12日)巨杉数据库参与了由得到App主办八里庄技术沙龙活动,分享主题是关于分布式数据库架构与实战. 以下就是根据巨杉数据库现场分享的内容进行的分享实录整理. 巨杉数据库简介 巨杉,专注新一代 ...

  5. 巨杉Tech | 十分钟快速搭建 Wordpress 博客系统

    介绍 很多互联网应用程序开发人员第一个接触到的网站项目就是博客系统.而全球使用最广的Wordpress常常被用户用来快速搭建个人博客网站.默认情况下,Wordpress一般在后台使用MySQL关系型数 ...

  6. 【巨杉数据库SequoiaDB】巨杉Tech | 巨杉数据库数据高性能数据导入迁移实践

    SequoiaDB 一款自研金融级分布式数据库产品,支持标准SQL和分布式事务功能.支持复杂索引查询,兼容 MySQL.PGSQL.SparkSQL等SQL访问方式.SequoiaDB 在分布式存储功 ...

  7. 巨杉Tech | SequoiaDB虚机镜像正式上线

    数据库云化架构需求 随着云架构的发展和流行,在业务和应用进行“云化”的过程中,云数据库因为在整体架构中的重要地位,在云化改造中的重要性不言而喻.云数据库需要满足这些技术要求,除了在功能上的具体提升,在 ...

  8. 巨杉Tech | SequoiaDB数据域及存储规划

    1 背景近年来,企业的各项业务发展迅猛,客户数目不断增加,后台服务系统压力也越来越大,系统的各项硬件资源也变得非常紧张.因此,在技术风险可控的基础上,希望引入大数据技术,利用大数据技术优化现有IT系统 ...

  9. 【巨杉数据库SequoiaDB】巨杉Tech | 分布式数据库千亿级超大表优化实践

    01 引言 随着用户的增长.业务的发展,大型企业用户的业务系统的数据量越来越大,超大数据表的性能问题成为阻碍业务功能实现的一大障碍.其中,流水表作为最常见的一类超大表,是企业级用户经常碰到的性能瓶颈. ...

随机推荐

  1. SoapSerialization——手机号码归属地

    public class MainActivity extends AppCompatActivity { private EditText etNumber; private TextView tv ...

  2. 免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作简易流量爬虫

    前言 我们之前的爬虫都是模拟成浏览器后直接爬取,并没有动态设置IP代理以及UserAgent标识,本文记录免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作 ...

  3. Vue创建项目配置

    前言 安装VS Code,开始vue的学习及编程,但是总是遇到各种各样的错误,控制台语法错误,格式错误.一股脑的袭来,感觉创建个项目怎么这个麻烦.这里就讲一下vue的安装及创建. 安装环境 当然第一步 ...

  4. 章节十六、2-TestNG注解和断言

    一.TestNG注解的testcease不是自上而下运行的,而是按照方法名的字母排序或数字的大小顺序运行的. 二.断言:判断返回的结果与我们的预期结果是否一致. 1.Assert.assertTrue ...

  5. Jenkins将ASP.NETCore部署到Azure

    首先需要获得Azure上App-service 的porfile. 登录portal 选到app,点击Get publish pofile 将得到一个 ****.PublishSettings,注意这 ...

  6. lua_基本语法

    学习lua,首先应该了解热更新. 热更新:可以在不重新下载客户端的情况下更新软件内容.在使用软件过程中,我们经常会遇到这种情况:升级软件,没错,这就使用的是热更新. C#不能直接热更新,原因为:C#脚 ...

  7. POJ 1661 暴力dp

    题意略. 思路: 很有意思的一个题,我采用的是主动更新未知点的方式,也即刷表法来dp. 我们可以把整个路径划分成横向移动和纵向移动,题目一开始就给出了Jimmy的高度,这就是纵向移动的距离. 我们dp ...

  8. 浅谈jQuery中的Ajax

    浅谈jQuery中的Ajax 一.前言 jQuery 对 Ajax 操作进行了封装, 在 jQuery 中最底层的方法时 $.ajax(), 第二层是 load(), $.get() 和 $.post ...

  9. 2019icpc南京网络赛_F_Greedy Sequence

    题意 题意不明,队友告诉我对于每个\(i\),所在下标\(p[i]\),在\([p[i]-k,p[i]+k]\)中找到小于\(i\)的最大数\(x\),然后\(ans[i]=ans[x]+1\)即可. ...

  10. Linux配置使用SSH Key登录并禁用root密码登录

    Linux系统大多数都支持OpenSSH,生成公钥.私钥的最好用ssh-keygen命令,如果用putty自带的PUTTYGEN.EXE生成会不兼容OpenSSH,从而会导致登录时出现server r ...