java.lang.IllegalArgumentException: попытка добавить ([custom-jar-with-spark-code].jar) несколько раз в распределенный кеш.

Я пытаюсь запустить простое задание Java Spark с помощью Oozie в кластере EMR. Задание просто берет файлы из входного пути, выполняет с ним несколько основных действий и помещает результат в другой выходной путь.

Когда я пытаюсь запустить его из командной строки, используя команду spark-submit, как показано ниже, все работает нормально:

spark-submit --class com.someClassName --master yarn --deploy-mode cluster /home/hadoop/some-local-path/my-jar-file.jar yarn s3n://input-path s3n://output-path

Затем я настроил то же самое в рабочем процессе Oozie. Однако при запуске оттуда задание всегда терпит неудачу. Журнал stdout содержит эту строку:

Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.SparkMain], main() threw exception, Attempt to add (hdfs://[emr-cluster]:8020/user/oozie/workflows/[WF-Name]/lib/[my-jar-file].jar) multiple times to the distributed cache.
java.lang.IllegalArgumentException: Attempt to add (hdfs://[emr-cluster]:8020/user/oozie/workflows/[WF-Name]/lib/[my-jar-file].jar) multiple times to the distributed cache.

Я нашел примечание базы знаний и еще один < href="https://stackoverflow.com/questions/45209705/adding-multiple-jars-in-oozie-spark-action">вопрос здесь, в StackOverflow, который имеет дело с аналогичной ошибкой. Но для них задание не выполнялось из-за внутреннего JAR-файла, а не того, который пользователь передает для запуска. Тем не менее, я попробовал его шаги по разрешению, чтобы удалить файлы jar, общие для spark и oozie в share-lib, и в итоге удалил несколько файлов из "/user/oozie/share/lib/lib_*/spark ". К сожалению, это тоже не решило проблему.

Любые идеи о том, как отладить эту проблему?


person pallupz    schedule 18.04.2019    source источник
comment
Похоже на ошибку в дистрибутиве EMR. База кода Spark должна быть взломана, чтобы поместиться в Oozie ShareLib — многие задачи инициализации, обычно выполняемые программой запуска Spark, уже выполняются программой запуска Oozie (токены аутентификации, кэширование и т. д.), поэтому многие ошибки должны быть отключены. Похоже, этот не был должным образом заглушен.   -  person Samson Scharfrichter    schedule 18.04.2019
comment
@SamsonScharfrichter у нас нет специального администратора для Oozie. Есть ли документ или что-то вроде того, чтобы подтвердить, что это проблема и исправить ее?   -  person pallupz    schedule 24.04.2019
comment
АФАИК, нет. Либо техподдержка AWS предоставит вам диагностику, либо вы скомпилируете и отладите свою собственную версию Oozie. Ваше здоровье...   -  person Samson Scharfrichter    schedule 24.04.2019


Ответы (1)


Итак, мы наконец-то разобрались с проблемой — по крайней мере, в нашем случае.

При создании рабочего процесса с помощью Hue, когда добавляется действие Spark, оно по умолчанию запрашивает «Файл» и «Имя Jar/py». Мы указали путь к файлу JAR, который мы хотели запустить, и имя этого файла JAR соответственно в этих полях, и это создало базовое действие, как показано ниже: введите здесь описание изображения

Окончательный XML, который он создал, был следующим:

<action name="spark-210e">
    <spark xmlns="uri:oozie:spark-action:0.2">
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <master>yarn</master>
        <mode>cluster</mode>
        <name>CleanseData</name>
          <class>com.data.CleanseData</class>
        <jar>JCleanseData.jar</jar>
          <spark-opts>--driver-memory 2G --executor-memory 2G --num-executors 10 --files hive-site.xml</spark-opts>
          <arg>yarn</arg>
          <arg>[someArg1]</arg>
          <arg>[someArg2]</arg>
        <file>lib/JCleanseData.jar#JCleanseData.jar</file>        
    </spark>
    <ok to="[nextAction]"/>
    <error to="Kill"/>
</action>

Тег file по умолчанию в нем вызывал проблему в нашем случае.

Итак, мы удалили его и отредактировали определение, как показано ниже, и это сработало. Обратите также внимание на изменение тега <jar>.

<action name="spark-210e">
    <spark xmlns="uri:oozie:spark-action:0.2">
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <master>yarn</master>
        <mode>cluster</mode>
        <name>CleanseData</name>
          <class>com.data.CleanseData</class>
        <jar>hdfs://path/to/JCleanseData.jar</jar>
          <spark-opts>--driver-memory 2G --executor-memory 2G --num-executors 10 --files hive-site.xml</spark-opts>
          <arg>yarn</arg>
          <arg>[someArg1]</arg>
          <arg>[someArg1]</arg>
    </spark>
    <ok to="[nextAction]"/>
    <error to="Kill"/>
</action>

PS: у нас была похожая проблема с действиями Hive. Файл hive-site.xml, который мы должны были передать с действием Hive, который создал тег <job-xml>, также вызывал проблемы. Поэтому мы удалили его, и он заработал, как и ожидалось.

person pallupz    schedule 02.05.2019