AbutionGraph新特性-Spark3和2版本无感知切换与无缝对接兼容
兼容性问题说明
我们在做多种大数据平台混合搭建的时候,首先件事是考虑兼容性,比如软件在迭代过程中增加与过时一些功能是家常便饭的事,绝大多数情况下并不会考虑别家的软件底层采用什么版本的框架,比如Jetty、jackson、configuration、guava等等,这些框架是开发大数据系统的必备工具,在AbutionGraph中也是如此,往往会因为这些工具在不同大数据平台上的版本不同而无法开发使用,如Spark3.1中的错误:
Exception ...
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Incompatible Jackson version: 2.10.5
at com.fasterxml.jackson.module.scala.JacksonModule$class.setupModule(JacksonModule.scala:64)
at com.fasterxml.jackson.module.scala.DefaultScalaModule.setupModule(DefaultScalaModule.scala:19)
at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:751)
at org.apache.spark.rdd.RDDOperationScope$.<init>(RDDOperationScope.scala:82)
at org.apache.spark.rdd.RDDOperationScope$.<clinit>(RDDOperationScope.scala)
复制代码
导致这个问题的原因是:在Spark2.x中,使用jackson-*-2.6.×进行功能开发,而在Spark3.×升级为jackson-*-2.9.×,这些版本间有些功能不存在兼容性,直接采用的是丢弃掉旧功能,如果对旧代码涉及了这些过时功能,运行报错是必然的。
在AbutionGraph中,采用jackson-*-2.10.×,与Spark2,3都不一致,如果想从底层将数据库和计算引擎打通,肯定绕不过数据的格式转换,势必要维护两个版本的对接程序,这是耗费长期人力的一项工作,也不方便以后技术迁移升级,所以我们多费了写力气在AbutionGraph源码层做了对Spark2,3的双兼容,使得用户对底层无感知,不管是使用Spark2还是3,以后都可以体验AbutionGraph的新功能对其无缝对接,这是对上层用户友好的,也是为了更好的对接Spark开源社区的其它组件,比如Spark-JobServer等,这些开源的周边技术往往要比主技术的新稳定版本落后一两年。
AbutionGraph-SparkConnector-2.3.2功能特性
- 在Spark上运行Abution操作,无需关心Spark3还是2;
- 将图数据(Knowledge)查询为表数据(DataFrame),以进行自定义表操作任务;
- 将图关系(Knowledge)查询为图数据(GraphFrame),以进行自定义图计算任务;
- 将图数据(Knowledge)查询为编程数据集(RDD),以进行自定义计算任务;
- 将表数据(DataFrame)、图数据(GraphFrame)存为Abution图数据(Knowledge);
- 将Abution+Spark业务代码上传为云服务,一键提交、一建调用、无需重启、立即生成接口;
- 动态配置分布式计算资源池,存储与计算资源隔离;
- 不侵占AbutionGraph的IO,从底层文件读取数据,保障图数据库长期稳定在线运行;
- AbutionGraph同时支持JDK8和JDK11,Spark3.x支持JDK11;等
更多功能及场景应用期待与我们共同探索!
相关文章