背景node
在傳統銀行 IT 架構中,聯機交易與統計分析系統每每採用不一樣的技術與物理設備,經過按期執行的 ETL 將聯機交易數據向分析系統中遷移。而做爲數據服務資源池,同一份數據可能被不一樣類型的微服務共享訪問。當一些聯機交易與審計類業務針對同一份數據同時運行時,必須保證請求在徹底隔離的物理環境中執行,作到交易分析業務無干擾。mysql
HBase 是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,善於處理大數據場景,具有如下特色:sql
可是 HBase 在使用中也存在下面的一些問題:數據庫
爲了解決上述問題,在典型的數據中臺和服務平臺業務中,用戶須要選擇一個可彈性擴展的分佈式關係型數據庫,以知足如下需求:apache
SequoiaDB 巨杉數據庫是計算存儲分離架構,這種分佈式架構一方面能夠提供針對數據表的無限橫向水平擴張,另外一方面在計算層經過提供不一樣類型數據庫實例的方式,100%兼容 MySQL,PostgreSQL 與 SparkSQL協議與語法。除告終構化數據外,SequoiaDB 巨杉數據庫能夠在同一集羣支持包括 JSON 和 S3 對象存儲、以及Posix文件系統在內的非結構化數據,使整個數據庫面向上層的微服務架構應用提供了完整的數據服務資源池。
SequoiaDB 支持複雜 SQL 查詢、支持多索引、支持高併發,而且做爲開源分佈式數據庫運維簡單便捷。到目前爲止,已有大量用戶從 HBase 遷移至 SequoiaDB,本文將與你們分享從 HBase 遷移數據至 SequoiaDB 的操做實戰。數據結構
先用 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
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
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;
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實例層查詢數據示意圖
在 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 中。