Я отправляю задание 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)
Можно ли как-то затенять неявный класс?
Любая помощь очень ценится.