Приложение EMR Spark Submit (режим КЛИЕНТА) не получает UDF после добавления jar в новый sparkContexts - PullRequest
0 голосов
/ 09 марта 2019

Мое выполнение искры завершается неудачно с AnalysisException: Undefined function: 'to_char'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 2 pos 18, так как он не может распознать UDF из моей банки, который добавлен ПОСЛЕ вызова спарка, отправки и загрузки JVM.

Мой рабочий процесс выглядит следующим образом:

  • Загрузите кластер EMR с шагом, который запускает скрипт, который вызывает spark submit на jar-сборке, содержащей мое приложение, в режиме CLIENT (на данный момент jar-файлов нет, так как jar-ы позже станут аргументом для моего приложения)
  • Приложение теперь запущено и работает, поэтому я сверну конечную точку с некоторыми аргументами, которые содержат JAR, который я хочу использовать из S3.
  • В приложении новый контекст искры создается с новымКонфигурация spark, которая добавляет банку, например sparkConfiguration.set("spark.jars", "s3://somejar") (журналы шагов EMR показывают, что баночка успешно добавлена)
  • Все пользовательские функции зарегистрированы во вновь созданном сеансе Spark, который содержит только что упомянутый контекст искры
  • Работа выполняется в этом искровом контексте, который пытается использовать UDF в s3://somejar и терпит неудачу, говоря, что не может найти UDF

Ярекламируйте документы Spark 2.2 (https://spark.apache.org/docs/2.2.1/configuration.html#runtime-environment), и в нем говорится, что конфигурация spark spark.jars должна добавить перечисленные jar-файлы к драйверу и всем рабочим узлам, но кажется, что jar-файл отсутствует в пути к классам даже для узловхотя контекст искры свеж с аргументами.Меня сбивает с толку то, что описание других конфигураций, таких как spark.driver.extraClassPath, явно содержит примечание о том, что вы не можете добавить это в контекст spark после запуска JVM, но это примечание не существует для spark.jars заставляет меня думать, что это нормально.

Я думаю, что если я сделаю повторную отправку spark-submit с jars в качестве аргумента, то UDF будет распознан на узлах, так как все будет помещено в путь к классам при запуске JVM, но я неЯ не хочу этого делать.Можно ли добавить файлы jar в приложение, которое уже было отправлено в режиме клиента?

...