巨杉Tech | Hbase遷移至SequoiaDB 實戰

背景node

在傳統銀行 IT 架構中,聯機交易與統計分析系統每每採用不一樣的技術與物理設備,經過按期執行的 ETL 將聯機交易數據向分析系統中遷移。而做爲數據服務資源池,同一份數據可能被不一樣類型的微服務共享訪問。當一些聯機交易與審計類業務針對同一份數據同時運行時,必須保證請求在徹底隔離的物理環境中執行,作到交易分析業務無干擾。mysql

HBase 是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,善於處理大數據場景,具有如下特色:sql

  •     表規模大,億級別行,上百萬列
  •     面向列存儲,列獨立檢索

可是 HBase 在使用中也存在下面的一些問題:數據庫

  •     HBase 只能作簡單的 key-value 查詢,沒法實現複雜的統計 SQL
  •     HBase 不支持多索引
  •     運維複雜。Hadoop 做爲一套完整大數據分析體系框架,操做比較複雜,出現問題難以定位

爲了解決上述問題,在典型的數據中臺和服務平臺業務中,用戶須要選擇一個可彈性擴展的分佈式關係型數據庫,以知足如下需求:apache

  •     標準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 參考語句app

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

相關文章
相關標籤/搜索