#apache-spark #classpath #apache-spark-standalone
#apache-spark #путь к классу #apache-spark-standalone
Вопрос:
Мой вариант использования довольно прост, я хочу переопределить несколько классов, которые являются частью дистрибутива Hadoop, для этого я создал новый jar, который я сериализую из драйвера на рабочие узлы, используя свойства spark.jars.
Чтобы убедиться, что мой новый jar имеет приоритет в workers classpath, я хочу добавить их в свойство spark.executor.extraClassPath.
Однако, поскольку я сериализую эти jar с помощью spark.jars, их путь в workers является динамическим и включает app-id amp; executor-id — <some-work-dir&&t;/<app-id&&t;/<executor-id&&t;
.
Есть ли способ обойти это? возможно ли добавить каталог внутри каталога приложения, чтобы он был первым в classpath?
Работа с Spark 2.4.5 в режиме автономного клиента — Docker.
p.s Я знаю о возможности добавить jar в workers ima&e, а затем добавить его в classpath, но тогда мне придется постоянно обновлять изображение при каждом изменении кода.
Ответ №1:
Вы можете включить эту опцию в spark submit:
spark.driver.userClassPathFirst=True
Комментарии:
1. Я думаю, вы имели в виду — spark.executor.userclasspath первым. и в документах об этом не так ясно сказано. «при загрузке классов добавленные пользователем jars имеют приоритет перед собственными jars Spark ..» добавленные пользователем jars означают файлы spark.jars?
2. Именно те jars, которые вы передали в задание spark (используя —jars), имеют приоритет над собственными jars Spark. Обратите внимание, что эта функция все еще экспериментальная, но если она решит вашу проблему, вы можете ее использовать.
3. Единственным недостатком ATM является то, что он добавляет все, а не один jar. но это только начало 🙂