当前以图搜图应用存在的问题: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秒的损耗,但内存消耗可能会有所减小)