Справочная информация:
Мы поставляем искровую версию 2.3.1 с нашим продуктом.Недавно мы добавили поддержку некоторых задач NLP, добавив библиотеку johnsnowlabs / spark-nlp.Кажется, мы сами сталкиваемся с некоторыми проблемами регрессии, без каких-либо разумных объяснений!
В конце концов, мы пытаемся вызвать spark-shell с некоторыми аргументами командной строки.Опрашивая процессы jvm, я вижу, что выполняемая команда выглядит следующим образом:
Команда Bash
/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/bin/java
-cp /Users/path/to/apps/spark-dist/conf/:/Users/path/to/apps/spark-dist/jars/*:/Users/path/to/var/api/work/spark-shaded-3d817f55997b81a17a7f7cb2df2411bd.jar
-Dscala.usejavacp=true
-Xmx520m
org.apache.spark.deploy.SparkSubmit
--master local[*]
--class org.apache.spark.repl.Main
--name Spark_shell
--total-executor-cores 4
--jars /Users/path/to/var/api/work/spark-shaded-3d817f55997b81a17a7f7cb2df2411bd.jar,/Users/path/to/apps/spark/driver/lib/hadoop-aws-2.7.5.jar,/Users/path/to/apps/spark/driver/lib/aws-java-sdk-1.7.4.jar
spark-shell
-i /Users/apiltamang/Downloads/test_sparknlp_code_1275.scala
По сути, вышеприведенная команда пытается выполнить командукод spark-nlp в файле test_sparknlp_code_1275.scala
с указанными банками в аргументах:
-cp /Users/path/to/apps/spark-dist/conf/:/Users/path/to/apps/spark-dist/jars/*:/Users/path/to/var/api/work/spark-shaded-3d817f55997b81a17a7f7cb2df2411bd.jar
применимо к java
cmd и --jars /Users/path/to/var/api/work/spark-shaded-3d817f55997b81a17a7f7cb2df2411bd.jar,/Users/path/to/apps/spark/driver/lib/hadoop-aws-2.7.5.jar,/Users/path/to/apps/spark/driver/lib/aws-java-sdk-1.7.4.jar
применимо к spark-shell.
Слово о spark-shaded-3d817f55997b81a17a7f7cb2df2411bd.jar
.По сути, это толстый кувшин, содержащий все наши классы продуктов, а также классы для johnsnowlabs/spark-nlp
.Аналогично, jar hadoop и aws-java-sdk включены для удовлетворения зависимостей для классов spark-nlp.
ERROR
Достаточно просто, или, как кажется,но дело в том, что вышесказанное НЕ работает.Ошибка скрипта:
import com.johnsnowlabs.nlp.annotator._
import com.johnsnowlabs.nlp.annotators.ner.NerConverter
import com.johnsnowlabs.nlp.base._
import com.johnsnowlabs.util.Benchmark
java.lang.NoClassDefFoundError: com/amazonaws/auth/AnonymousAWSCredentials
at com.johnsnowlabs.nlp.pretrained.ResourceDownloader$.<init>(ResourceDownloader.scala:51)
at com.johnsnowlabs.nlp.pretrained.ResourceDownloader$.<clinit>(ResourceDownloader.scala)
at com.johnsnowlabs.nlp.annotators.ner.dl.PretrainedNerDL$class.pretrained$default$3(NerDLModel.scala:117)
at com.johnsnowlabs.nlp.annotator$NerDLModel$.pretrained$default$3(annotator.scala:95)
... 82 elided
Caused by: java.lang.ClassNotFoundException: com.amazonaws.auth.AnonymousAWSCredentials
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 86 more
Что работает?
Работает, если я исключаю файл затененного фляги (spark-shaded-3d817f55997b81a17a7f7cb2df2411bd.jar
) из параметра -cp
,Это также работает, если я добавлю hadoo-aws-2.7.5.jar
и aws-java-sdk:1.7.4.jar
к параметру -cp
.Проблема, которая ставит в тупик (и, возможно, свидетельствует о более глубокой проблеме), заключается в , почему имеет зависимость hadoop-aws и aws-java-sdk в банке НЕ работа?Это должно быть предпочтительным способом добавления зависимости jar для сценариев spark-shell!Что это за параметр -cp
, который заставляет его ломаться?
FOOTNOTE
Я попытался проверить содержимое затененной банки с помощью: jar tf spark-shaded-3d817f55997b81a17a7f7cb2df2411bd.jar | grep aws-java-sdk
, который дает мне следующий список:
META-INF/maven/com.amazonaws/aws-java-sdk-kms/
META-INF/maven/com.amazonaws/aws-java-sdk-kms/pom.xml
META-INF/maven/com.amazonaws/aws-java-sdk-kms/pom.properties
META-INF/maven/com.amazonaws/aws-java-sdk-core/
META-INF/maven/com.amazonaws/aws-java-sdk-core/pom.xml
META-INF/maven/com.amazonaws/aws-java-sdk-core/pom.properties
META-INF/maven/com.amazonaws/aws-java-sdk-s3/
META-INF/maven/com.amazonaws/aws-java-sdk-s3/pom.xml
META-INF/maven/com.amazonaws/aws-java-sdk-s3/pom.properties
META-INF/maven/com.amazonaws/aws-java-sdk-dynamodb/
META-INF/maven/com.amazonaws/aws-java-sdk-dynamodb/pom.xml
META-INF/maven/com.amazonaws/aws-java-sdk-dynamodb/pom.properties
Я не вижу реальных файлов .class, относящихся к aws-java-sdk, в затененных банках, хотя есть ссылки на более новыеверсии библиотеки.Может быть, искра нашла их и просто перестала искать ...!?в отличие от проверки jar, переданных с использованием --jars?Не уверен в данный момент!Любое понимание очень ценится.