尝试重新定位poi jar以获得未找到Java类的异常

时间:2018-09-04 02:39:50

标签: java maven apache-spark apache-poi

我正在提交一个使用poi 3.17读取Excel文件的Spark作业,但是由于它们是包含Poi 3.14的hadoop类路径上的快速矿工jar,并且两个版本之间存在一些差异,因此我无法运行我的spark作业成功失败了一半。

这是我的火花提交

    spark2-submit --class Digital--master yarn --deploy-mode cluster --executor-memory 5G --num-executors 4 --executor-cores 4 --driver-memory 20G --driver-cores 8 --conf spark.driver.maxResultSize=7G --conf 
--conf spark.executor.heartbeatInterval=60s --conf 
spark.yarn.maxAppAttempts=1 --conf spark.yarn.queue=${queueName}  --conf 
spark.dynamicAllocation.enabled=false --jars alarming-v2.jar --files 
/etc/hive/conf/hive-site.xml --principal ${edgeUser}@${kerberos_realm} -- 
 keytab ${edgeUser}.keytab   BM-1.0.jar /tmp/digital ${start_date} 

,一旦我从集群中删除了这些快速矿工罐,我就可以成功运行火花提交了。 不幸的是,我们无法从其中一个群集中删除快速jar,因此我仍然在该群集上遇到错误。

我使用3.15中添加的getCellTypeEnum

我试图像这样重新定位冲突的库。

<dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.17</version>
        <!-- <scope>compiled</scope> --> 
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.17</version>
        <!-- <scope>provided</scope> --> 
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml-schemas</artifactId>
        <version>3.17</version>
         <!--<scope>provided</scope>  -->
   </dependency>

重定位代码段

 <relocation>
 <pattern>org.apache.poi</pattern>

  <shadedPattern>org.shaded.apache.poi</shadedPattern>
   </relocation>

然后我收到此错误。

我认为这可能仅是遮蔽了第一个poi依赖关系,而不是其他2个

Caused by: java.lang.ClassNotFoundException: org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableStyles

到此stackoverflow页面的链接使我认为我有一个问题,即此依赖项未隐藏 java.lang.NoClassDefFoundError: org/openxmlformats/schemas/spreadsheetml/x2006/main/CTWorkbook$Factory

进行一些故障排除后进行更新,似乎无法隐藏下面的隐式类

    Caused by: java.lang.ClassCastException: org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.ExternalLinkDocumentImpl cannot be cast to org.shaded.openxmlformats.schemas.spreadsheetml.x2006.main.ExternalLinkDocument
    at org.shaded.openxmlformats.schemas.spreadsheetml.x2006.main.ExternalLinkDocument$Factory.parse(Unknown Source)

是否可以以某种方式遮盖隐式类?

非常感谢您的帮助。

0 个答案:

没有答案