Spark Shell: добавление зависимости через опцию --jars не работает - PullRequest
0 голосов
/ 21 сентября 2018

Справочная информация:

Мы поставляем искровую версию 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 с указанными банками в аргументах:

  1. -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 и
  2. --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?Не уверен в данный момент!Любое понимание очень ценится.

...