Скопируйте файлы (конфигурацию) из HDFS в локальный рабочий каталог каждого исполнителя Spark

Я ищу, как скопировать папку с файлами зависимостей ресурсов из HDFS в локальный рабочий каталог каждого исполнителя искры с помощью Java.

Сначала я думал об использовании опции --files FILES для spark-submit, но, похоже, она не поддерживает папки с файлами произвольной вложенности. Итак, похоже, я должен сделать это, поместив эту папку на общий путь HDFS, чтобы каждый исполнитель правильно скопировал в свой рабочий каталог перед запуском задания, но еще не выяснил, как это сделать правильно в коде Java.

Или заархивируйте / gzip / заархивируйте эту папку, поместите ее в общий путь HDFS, а затем разверните архив в локальный рабочий каталог каждого исполнителя Spark.

Любая помощь или образцы кода приветствуются.

Это папка с файлами конфигурации, и они являются частью вычислений и должны быть расположены вместе с основным jar-файлом spark-submit (например, файлами базы данных, которые код jar-кода использует при запуске задания, и я, к сожалению, не могу изменить эту зависимость, поскольку я я повторно использую существующий код).

С уважением, -Юрий


person YuGagarin    schedule 01.10.2017    source источник
comment
Исполнители Spark, работающие через YARN, будут перемещены на узел / стойку вместе с самими данными. Это фундаментальное применение Hadoop - перенос вычислений в данные.   -  person OneCricketeer    schedule 01.10.2017
comment
@ cricket_007 Я понимаю концепцию переноса вычислений в данные, но в данном случае это не так. Папка (файлы), о которых я говорю, не являются данными как таковыми в традиционном понимании Hadoop - это файлы конфигурации и являются частью вычислений (например, файлы базы данных, которые код jar использует при запуске задания, и я, к сожалению, не могу это изменить. зависимости, поскольку я повторно использую существующий код).   -  person YuGagarin    schedule 01.10.2017
comment
@ cricket_007 Это файлы конфигурации, и они являются частью вычислений и должны быть размещены вместе с основным jar-файлом spark-submit (например, файлы базы данных, которые код jar-кода использует при выполнении задания, и я, к сожалению, не могу изменить эту зависимость, поскольку я повторное использование существующего кода).   -  person YuGagarin    schedule 01.10.2017
comment
Хорошо, тогда нужен параметр --files. Архивная папка, в идеале   -  person OneCricketeer    schedule 01.10.2017
comment
@ cricket_007 Поддерживает ли --files копирование папок с произвольной структурой вложенности? Я не мог подтвердить, что это так.   -  person YuGagarin    schedule 01.10.2017
comment
Он поддерживает архивные файлы, а не папки. У меня не было большого опыта его использования. В качестве альтернативы вы загружаете файлы в общую папку NFS или HDFS.   -  person OneCricketeer    schedule 01.10.2017
comment
@ cricket_007, если я помещу архив в --files, как бы мне взорвать / извлечь его содержимое в. время выполнения? Я не могу просто скопировать архив, поскольку код ожидает, что зависимости ресурсов будут присутствовать в определенной структуре папок. Кроме того, если я поставлю его на HDFS, мне понадобится способ скопировать его локально в рабочий каталог каждого исполнителя в соответствии с моим исходным вопросом. Спасибо!   -  person YuGagarin    schedule 01.10.2017
comment
Что ж, как и файлы, есть скорее архивы, которые автоматически распакуют его для вас. stackoverflow.com/questions/41498365/   -  person OneCricketeer    schedule 01.10.2017
comment
@ cricket_007 Спасибо за отличный указатель! Попробую   -  person YuGagarin    schedule 01.10.2017
comment
@ cricket_007 Я чувствую, что мои архивы не копируются и не извлекаются Yarn. Где (какие журналы) я могу это проверить?   -  person YuGagarin    schedule 02.10.2017
comment
Давайте продолжим это обсуждение в чате.   -  person YuGagarin    schedule 02.10.2017
comment
Вы должны проверить пользовательский интерфейс YARN или сервер истории Spark. Я никогда не использовал Azure, поэтому не знаю, как вы туда попали   -  person OneCricketeer    schedule 02.10.2017
comment
Я проверил YARN UI, и насколько я могу судить, архив не копируется. Я действительно вижу, как локальный мастер-jar копируется в hdfs, но это все ..   -  person YuGagarin    schedule 02.10.2017
comment
Думаю, я ошибался. Проблема заключалась в размещении --archive или --file в неправильном месте ПОСЛЕ имени файла .jar. Он должен быть перед именем .jar в искре-submit ...   -  person YuGagarin    schedule 03.10.2017
comment
Верно. --archive <file> - параметр   -  person OneCricketeer    schedule 03.10.2017
comment
Есть ли способ автоматически добавлять списки из --files или --archives в путь к классам исполнителя? это свойство spark.executor.extraClassPath?   -  person YuGagarin    schedule 03.10.2017
comment
@ cricket_007 Это не добавляет эти списки в путь к классам исполнителя. Он копирует в рабочий каталог исполнителя, который по умолчанию не находится в пути к классам.   -  person YuGagarin    schedule 05.10.2017
comment
Путь к классам - это термин Java. Если вам нужны файлы JAR, используйте --packages. В противном случае я не понимаю вашей проблемы. Вы можете открывать файлы из рабочего каталога исполнителя   -  person OneCricketeer    schedule 05.10.2017
comment
@ cricket_007 спасибо за все ваши ответы! Это не мой код. Я использую стороннюю библиотеку. Это баночка и некодовые зависимости. Этот jar библиотеки ищет эти зависимости через путь к классам. Поэтому я должен разместить эти зависимости в пути к классам где-нибудь на исполнителе.   -  person YuGagarin    schedule 05.10.2017