我们在做多种大数据平台混合搭建的时候,首先第一件事是考虑兼容性,比如软件在迭代过程中增加与过时一些功能是家常便饭的事,绝大多数情况下并不会考虑别家的软件底层采用什么版本的框架,比如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等,这些开源的周边技术往往要比主技术的最新稳定版本落后一两年。
更多功能及场景应用期待与我们共同探索!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69999831/viewspace-3157881/ ,如需转载,请注明出处,否则将追究法律责任。