Куда мне поместить jar-файлы в кластере datapro c, чтобы их можно было использовать в gcloud datapro c jobs submit spark? - PullRequest
2 голосов
/ 28 мая 2020

У меня есть сценарий инициализации, который загружает .jar из нашего локального репозитория артефактов и помещает его в /usr/local/bin на каждом узле кластера. Я могу запустить его, используя

gcloud dataproc jobs submit spark --cluster=my_cluster \
      --region=us-central1 --jar=file:///usr/local/bin/myjar.jar -- arg1 arg2

Однако я бы предпочел, чтобы мои конечные пользователи не знали, где находится банка.

Где я могу поместить .jar, чтобы его местонахождение указывать не обязательно?

1 Ответ

2 голосов
/ 28 мая 2020

Для искровых заданий вы должны иметь возможность просто разместить свои jar-файлы в /usr/lib/spark/jars на всех узлах, чтобы они автоматически были доступны в пути к классам.

Для более общего охвата вы можете добавить свои jar-файлы в /usr/lib/hadoop/lib вместо этого; Каталог has oop lib также автоматически включается в задания Spark на Datapro c, и именно там находятся библиотеки, такие как jarfile коннектора GCS. Вы можете увидеть, что каталог had oop lib включен через переменную среды SPARK_DIST_CLASSPATH, настроенную в /etc/spark/conf/spark-env.sh.

Если желаемое поведение по-прежнему необходимо указать с помощью флага --jar, чтобы указать «main jar "вместо --jars, чтобы указать библиотечные jar-файлы, которые просто предоставляют классы, к сожалению, в настоящее время нет понятия" рабочий каталог "в кластере, который позволял бы просто указывать относительные (а не абсолютные) пути к" main jar ". Однако есть два подхода, которые будут иметь схожее поведение:

  1. Сделайте файлы jarfiles локальными по отношению к рабочей области пользователя, из которой отправляются задания - gcloud затем загрузит файл jarfile во время отправки задания в GCS и укажите задание на файл jar, когда оно выполняется в каталоге c, указанном для задания. Обратите внимание, что это приведет к дублированию загрузки файла jarfile в GCS каждый раз при запуске задания, поскольку оно всегда помещается в уникальный каталог задания; вам придется gcloud dataproc jobs delete позже, чтобы очистить пространство GCS, используемое этими jar-файлами
  2. (предпочтительный подход): используйте аргумент --class вместо --jar для указания, какое задание запускать после выполнения описанные выше шаги, чтобы сделать jar доступным уже в пути к классам Spark. Хотя вызов имени класса немного более подробен, он по-прежнему позволяет скрыть детали расположения файла jarfile от пользователя. уже в пути к классам, поэтому, если вы хотите запустить файл scala, как если бы вы запускали его через spark-shell, вы можете запустить:
    gcloud dataproc jobs submit spark --cluster my-cluster \
        --class org.apache.spark.repl.Main \
        -- -i myjob.scala
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...