為什么選擇Spark?
SequoiaDB是一款NoSQL數(shù)據(jù)庫,其可以在不同的物理節(jié)點之間對數(shù)據(jù)進行復制,并且允許用戶指定使用哪一個數(shù)據(jù)備份。SequoiaDB允許在同一集群同時運行數(shù)據(jù)分析和數(shù)據(jù)操作負載,并且保證最小的I/O和CPU使用率。
Apache Spark和SequoiaDB的聯(lián)合解決方案,使得用戶可以搭建一個在同一個物理集群中支持多種類型負載(如,SQL語句和流處理)的統(tǒng)一平臺。
Spark-SequoiaDB Connector,讓SequoiaDB與Spark完美結合
Spark-SequoiaDB Connector是Spark的數(shù)據(jù)源,可以讓用戶能夠使用SparkSQL對SequoiaDB的數(shù)據(jù)庫集合中的數(shù)據(jù)進行讀寫。連接器用于SequoiaDB與Spark的集成,將無模式的存儲模型、動態(tài)索引以及Spark集群的優(yōu)勢有機的結合起來。
Spark與SequoiaDB可以在同一個物理環(huán)境中安裝,也可以安裝在不同的集群中。Spark-SequoiaDB Connector將查詢的條件下壓至SequoiaDB,獲取符合查詢條件的記錄。這一優(yōu)化使得對操作型數(shù)據(jù)源的分析無需在SequoiaDB和Spark之間再使用ETL。
以下是部分示例代碼,有關如何在Spark-SequoiaDB 連接器中使用SparkSQL:
scala> sqlContext.sql("CREATE temporary table org_department ( deptno string, deptname string, mgrno string, admrdept string, location string ) using com.sequoiadb.spark OPTIONS ( host 'host-60-0-16-2:50000', collectionspace 'org', collection 'department', username 'sdb_reader', password 'sdb_reader_pwd')")
res2: org.apache.spark.sql.DataFrame = []
scala> sqlContext.sql("CREATE temporary table org_employee ( empno int, firstnme string, midinit string, lastname string, workdept string, phoneno string, hiredate date, job string, edlevel int, sex string, birthdate date, salary int, bonus int, comm int ) using com.sequoiadb.spark OPTIONS ( host 'host-60-0-16-2:50000', collectionspace 'org', collection 'employee', username 'sdb_reader', password 'sdb_reader_pwd')")
res3: org.apache.spark.sql.DataFrame = []
scala> sqlContext.sql("select * from org_department a, org_employee b where a.deptno='D11'").collect().take(3).foreach(println)
[D11,MANUFACTURING SYSTEMS,000060,D01,null,10,CHRISTINE,I,HAAS,A00,3978,null,PRES ,18,F,null,152750,1000,4220]
[D11,MANUFACTURING SYSTEMS,000060,D01,null,20,MICHAEL,L,THOMPSON,B01,3476,null,MANAGER ,18,M,null,94250,800,3300]
[D11,MANUFACTURING SYSTEMS,000060,D01,null,30,SALLY,A,KWAN,C01,4738,null,MANAGER ,20,F,null,98250,800,3060]
…
案例1:交易歷史存儲系統(tǒng)
Spark+SequoiaDB的聯(lián)合解決方案幫助企業(yè)從數(shù)據(jù)中發(fā)現(xiàn)和獲取更多價值。我們也舉一些金融行業(yè)應用的例子,某銀行使用了SequoiaDB+Spark的方案作為其新的交易歷史信息存儲系統(tǒng)。
在過去的數(shù)十年中,大部分銀行都一直使用大型機作為其核心的銀行業(yè)務系統(tǒng)支持。大型機的技術局限性使得超過一年之前的歷史交易數(shù)據(jù)就需要從大型機上移出而轉存在其他的磁盤(磁帶)中進行保存。
然而,如今,因為移動互聯(lián)網(wǎng)和網(wǎng)上銀行的興起,銀行用戶對于服務的要求大大的超過了從前,這也帶來了更多的需求。為了讓客戶更好的體驗銀行的服務,讓產(chǎn)品服務更有競爭力,各大銀行也開始推出讓客戶能快速的查詢歷史記錄(包括1年以前的歷史記錄)等多項改進的服務。
傳統(tǒng)的存儲系統(tǒng)架構
通過使用SequoiaDB,該銀行在數(shù)據(jù)庫的50個物理節(jié)點,使用近1PB的空間,存儲了所有用戶長達15年的歷史數(shù)據(jù)。這一新系統(tǒng)讓用戶可以輕松的獲取其所有的交易歷史,無論展現(xiàn)在移動客戶端或者網(wǎng)頁端。
現(xiàn)行新存儲架構
案例2:Spark+SequoiaDB 的產(chǎn)品精準推薦系統(tǒng)
在之前的案例中,我們已經(jīng)將所有的用戶歷史交易數(shù)據(jù)都存儲在了數(shù)據(jù)庫當中,基于這些歷史交易信息,我們也可以通過對這些數(shù)據(jù)的分析,對每個用戶的交易行為進行預測,對用戶進行分類和建模,最終根據(jù)分析的結果向每個用戶推薦最適合的理財產(chǎn)品。
當用戶模型系統(tǒng)通過分析所有的歷史數(shù)據(jù)和日志,計算出需要推薦的產(chǎn)品時,這些用戶特征也會作為這個用戶的一個標簽寫入這個用戶的信息中。這些新加入的用戶標簽,可以幫助前臺的員工和產(chǎn)品推薦系統(tǒng)快速的分辨出每個顧客的興趣和消費傾向。部署了這套系統(tǒng)后,該行的金融產(chǎn)品的推薦成功率提升了10倍以上。
系統(tǒng)架構圖
未來與Spark結合的計劃
在實際合作中,我們發(fā)現(xiàn)我們很多的金融行業(yè)用戶都有興趣使用流處理(反洗錢和高頻交易),也有很大興趣在于交互式SQL處理(政府的監(jiān)管系統(tǒng))。我們計劃進一步對SequoiaDB的Spark組件增加功能和提升穩(wěn)定性,比如使得SparkSQL能支持標準的SQL2003。
作者:SequoiaDB聯(lián)合創(chuàng)始人和CTO王濤先生。