當前以圖搜圖應用存在的問題:java
根據上述問題和預期成果,指望選擇一款與Spark結合較好的分佈式內存緩存計算,從而將緩存工做從spark中抽離出來,讓spark專一於計算。apache
Apache Ignite內存數據組織是高性能的、集成化的以及分佈式的內存平臺,他能夠實時地在大數據集中執行事務和計算,和傳統的基於磁盤或者閃存的技術相比,性能有數量級的提高。api
選擇預研該技術最大的緣由爲,Ignite實現了一個可共享的Spark RDD,可實現增量數據實時在比對中體現。緩存
Alluxio在1.0版本後由原來的Tcahyon改名。Alluxio與Spark結合較好,Spark1.5後增長的緩存方式:OFF_HEAP(堆外緩存)當前只支持tachyon。性能優化
不過Alluxio和Spark RDD同樣都不可變,緩存文件一旦寫入就不能修改,且在完成寫入以前緩存數據是沒法讀取的,這樣就服務達到增量數據的實時性,但能夠實現儘量縮短增量加載時間來達到準實時性。數據結構
性能測試採用上述兩種技術三個版本(apache-ignite-fabric-1.5.0.final、alluxio-1.0.一、tachyon-0.7.1-hadoop2.6-build)八種方案:框架
下面爲三臺256G內存集羣,58727000條數據,Spark分配36核,測試結果以下:jvm
緩存方式分佈式 |
內存配置oop |
是否序列化 |
序列化實現 |
檢索耗時(s) |
內存空間(GB) |
Spark RDD |
executor:150GB*3 |
否 |
|
11.527 |
112.8 |
Spark RDD |
executor:150GB*3 |
是 |
java |
20.09 |
56.4 |
Spark RDD |
executor:150GB*3 |
是 |
kryo |
16.275 |
51.8 |
Spark RDD + tachyon |
executor:20GB*3 tachyon:100GB*3 |
是 |
java |
21.771 |
51.56 |
Spark RDD + tachyon |
executor:20GB*3 tachyon:100GB*3 |
是 |
kryo |
17.772 |
51.83 |
tachyon |
executor:20GB*3 tachyon:100GB*3 |
是 |
java |
32.719 |
53.03 |
Alluxio |
executor:20GB*3 alluxio:100GB*3 |
是 |
java |
26.988 |
53.03 |
ignite |
executor:20GB*3 ignite:10GB*3(數據保存在堆外,不使用jvm內存) |
是 |
java |
333.228 |
|
由上表分析以下:
結論以下:
Alluxio(Tachyon)性能優化須要看Spark緩存代碼,可是該方法最終可以達到的性能指標基本可以預估(較現有方案有5-6秒的損耗,但內存消耗可能會有所減小)