文档首页/ 数据湖探索 DLI/ 常见问题/ Spark作业相类/ Spark作业运维报错类/ 运行Spark作业报java.lang.AbstractMethodError
更新时间:2024-11-08 GMT+08:00

运行Spark作业报java.lang.AbstractMethodError

Spark 2.3对内部接口Logging做了行为变更,如果用户代码里直接继承了该Logging,且编译时使用的是低版本的Spark,那么应用程序在Spark 2.3的环境中运行将会报java.lang.AbstractMethodError。

解决措施有如下两种方案:

  • 基于Spark 2.3重新编译应用
  • 使用sl4j+log4j来实现日志功能,而不是直接继承Spark内部接口Logging。具体如下:
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.16</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.16</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    
    private val logger = LoggerFactory.getLogger(this.getClass)
    logger.info("print log with sl4j+log4j")