Загрузка внешних зависимостей в Zeppelin на Spark в режиме Yarn-Client на Ubuntu 14.04

Уважаемое сообщество! Прежде чем я опишу проблему, вот краткое описание используемого программного обеспечения (где последние два работают в небольшом кластере из трех узлов, каждый из которых использует Ubuntu 14.04):

  • Zeppelin 0.6.1
  • Spark 2.0.0 вместе с Scala 2.11.8
  • Hadoop 2.7.3

Ситуация такова: чтобы использовать класс TwitterUtils в приложении Spark Streaming, написанном в заметке Zeppelin, мне нужно включить org.apache.spark.streaming.twitter ._ < / strong> из Maven (org.apache.bahir: spark-streaming-twitter_2.11: 2.0.0-preview). На данный момент я узнал, что есть несколько вариантов сделать внешние зависимости доступными в Zeppelin:

  • Экспортируйте переменную SPARK_SUBMIT_OPTIONS в conf / zeppelin-env.sh и установите --jars (в моем случае --jars hdfs: //admdsmaster:54310/global/jars/spark-streaming-twitter_2.11-2.0.0-preview.jar (также был протестирован путь, указывающий на локальную файловую систему)).
  • Экспортируйте SPARK_SUBMIT_OPTIONS и установите --packages (в моем случае --packages org.apache.bahir: spark-streaming-twitter_2.11: 2.0.0-preview ).
  • Задайте spark.jars или spark.jars.packages в conf / spark-defaults.conf указанными выше значениями.
  • Используйте интерпретатор % dep в самом Zeppelin следующим образом: z.load ("org.apache.bahir: spark-streaming-twitter_2.11: 2.0.0-preview") . Однако это устарело.
  • Используйте sc.addJar () в заметке Zeppelin, чтобы вручную добавить файл .jar.

После того, как я испробовал все вышеперечисленное, а также почти произвольные комбинации и варианты, проблема в том, что я все еще не могу импортировать класс TwitterUtils из заметки Zeppelin:

Ошибка импорта класса в примечании Zeppelin.

На рисунке также можно увидеть результат выполнения sc.listJars (), который показывает, что файл .jar действительно был включен. Тем не менее импорт класса не выполняется.

Моя первая мысль заключалась в том, что проблема возникает из-за того, что Spark работает в режиме пряжи-клиента, поэтому я также запустил оболочку Spark в режиме пряжи-клиента и попытался импортировать оттуда класс TwitterUtils, который работал:

Импорт классов из оболочки Spark.

Чтобы узнать, что происходит, я просмотрел файлы журналов Zeppelin, Spark и YARN, но не смог найти никаких сообщений об ошибках, указывающих мне на причину проблемы.

Короче говоря: хотя файл jar был включен в Zeppelin (что доказано sc.listJars ()) и хотя импорт класса работает из искровой оболочки в yarn- в клиентском режиме, я просто не могу заставить импорт работать из моей заметки Zeppelin.

Еще короче, длинная история: я был бы признателен за ваши идеи о том, как решить эту проблему!

Заранее благодарим за ваше время и усилия.

P.S .: Прошу прощения за то, что я не смог загрузить изображения в этот пост напрямую - там написано, что мне нужно как минимум 10 очков репутации, которых у меня нет, так как это моя первая публикация здесь.


person TheresACactusOnMyDesk    schedule 08.09.2016    source источник
comment
Вы пробовали добавлять их из вкладки интерпретатора?   -  person eliasah    schedule 08.09.2016


Ответы (1)


Добавление зависимости из вкладки интерпретатора, предложенное @eliasah, действительно помогло - большое вам спасибо!

Для тех, кто может столкнуться с той же проблемой, я очень коротко опишу решение и добавлю изображение того, как на самом деле должен выглядеть вызов sc.listJars () ( по сравнению с картинкой в ​​исходном вопросе).

Перейдите на вкладку интерпретатора Zeppelin и прокрутите вниз или найдите интерпретатор spark, затем нажмите изменить. В самом низу доступных настроек есть раздел Зависимости. Добавьте сюда свою зависимость (указав координаты Maven, например, в моем случае org.apache.bahir: spark-streaming-twitter_2.11: 2.0.0-preview) и сохраните настройки. После перезапуска интерпретатора зависимость должна быть доступна.

Вот как в моем случае выглядел вызов sc.listJars () после выполнения шагов, описанных выше:

Вызов sc.listJars ().

Если вы сравните это изображение с первым в исходном вопросе, вы заметите, что список теперь содержит намного больше записей. Однако мне все еще интересно, почему импорт класса не работал, когда присутствовал только файл .jar, содержащий его. В любом случае, проблема решена благодаря @eliasah - еще раз спасибо, вы заслужили cookie! - и я надеюсь, что это краткое описание поможет и другим.

person TheresACactusOnMyDesk    schedule 09.09.2016