Попытка переместить poi jar для получения класса java не найден - PullRequest
0 голосов
/ 04 сентября 2018

Я отправляю задание spark, которое использует poi 3.17 для чтения файлов Excel, но из-за того, что они являются быстрым майнером, на пути к классу hadoop, который содержит Poi 3.14, и из-за некоторых различий между двумя версиями я не смог запустить свое задание 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} 

и как только я удаляю эти быстрые майнеры из кластера, я могу успешно запустить отправку spark . К сожалению, мы не можем удалить быстрый jar из одного из наших кластеров, поэтому я все еще получаю сообщение об ошибке на этом кластере.

Я использую getCellTypeEnum, который был добавлен в 3.15

Я попытался переместить конфликтующие библиотеки ниже, вот так.

<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>

После этого я получаю эту ошибку.

Я думаю, что это может быть только затенение первой зависимости пои, а не другой 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)

Можно ли как-то затенять неявный класс?

Любая помощь очень ценится.

...