记录一次生产上因Spark升级导致的程序报错:java.lang.IllegalArgumentException: Illegal pattern component: XXX

1. 前言


前段时间因生产需要,需将 Spark2.1 版本升级到 2.4 版本。但由于升级方式存在问题:

  • 并不是将 2.1 版本 jars 目录下的 jar 包全部替换成 2.4 版本的,只是替换了 spark 开头的 jar 包;
  • jars 目录下存在自己放进去的一些 jar 包

2. 问题定位


  • 报错内容

    程序报错定位

  • 解决

    1. 将 jars 目录下的相关 jar 包替换为 Spark2.4 依赖的 jar 包,再次运行
      查看日志发现报错

      19/11/17 18:20:51 WARN support.ClassPathXmlApplicationContext: Exception encountered during context initialization -          cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name  'kafkaProducerServer': Unsatisfied dependency expressed through field 'kafkaTemplate'; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.apache.commons.pool2.impl.GenericObjectPoolConfig] for bean with name 'rcPoolConf' defined in class path resource [conf/bigdata-bean.xml]; nested exception is java.lang.ClassNotFoundException: org.apache.commons.pool2.impl.GenericObjectPoolConfig
      19/11/17 18:20:51 ERROR yarn.ApplicationMaster: User class threw exception: java.lang.ExceptionInInitializerError
      java.lang.ExceptionInInitializerError
              at cn.strong.leke.bigdata.app.largescreen.CoverageConditionStatApp.main(CoverageConditionStatApp.scala)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
              at java.lang.reflect.Method.invoke(Method.java:498)
              at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:678)
      Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'kafkaProducerServer': Unsatisfied dependency expressed through field 'kafkaTemplate'; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.apache.commons.pool2.impl.GenericObjectPoolConfig] for bean with name 'rcPoolConf' defined in class path resource [conf/bigdata-bean.xml]; nested exception is java.lang.ClassNotFoundException: org.apache.commons.pool2.impl.GenericObjectPoolConfig
      
    2. 定位

      nested exception is java.lang.ClassNotFoundException: org.apache.commons.pool2.impl.GenericObjectPoolConfig
      
    3. 分析
      应该是缺少 org.apache.commons.pool2 这个依赖所致
      去Spark2.4 jars 目录下查看,果真没发现这个 jar 包,只有 commons-pool-1.5.4.jar
      解决:将 commons-pool2-2.4.2.jar 放到 jars 目录下
      (原因:这个包在程序里是创建 RedisPool 使用到的,Spark 所依赖的 jar 包并没有这一个)
      结果:再次运行,SUCCEEDED

3. 总结


  • Spark 的 jars 目录下尽量不要放入自己的包,Spark自带什么就是什么,方便以后 Spark 的升级;

  • 自己用到的 jar 包

    1. 如果很少,可通过 --jars 传进去;
    2. 如果较多,可通过 --package a:g:v 去下载,或者将所需依赖通过maven的插件打包进去,这样包会很大(所谓的胖包);
    3. 具体采用哪种看公司要求。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值