Для искровых заданий вы должны иметь возможность просто разместить свои 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 ". Однако есть два подхода, которые будут иметь схожее поведение:
- Сделайте файлы jarfiles локальными по отношению к рабочей области пользователя, из которой отправляются задания - gcloud затем загрузит файл jarfile во время отправки задания в GCS и укажите задание на файл jar, когда оно выполняется в каталоге c, указанном для задания. Обратите внимание, что это приведет к дублированию загрузки файла jarfile в GCS каждый раз при запуске задания, поскольку оно всегда помещается в уникальный каталог задания; вам придется
gcloud dataproc jobs delete
позже, чтобы очистить пространство GCS, используемое этими jar-файлами - (предпочтительный подход): используйте аргумент
--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