Я пишу потоковое приложение с использованием pyspark, которое в основном обрабатывает данные.
Краткий обзор упаковки: это приложение содержит несколько модулей и некоторые файлы конфигурации, которые не являются файлами .py (например:.yaml или .json) .
Я упаковываю все это приложение в файл package.zip и отправляю этот package.zip в spark.
Теперь проблема в том, когда я выпускаюкоманда spark-submit в режиме кластера пряжи.Я получаю IOError.Ниже приведена стековая трассировка
Traceback (most recent call last):
File "main/main.py", line 10, in <module>
import logger.logger
File "package.zip/logger/logger.py", line 36, in get_logger
IOError: [Errno 2] No such file or directory: 'logger/config.yaml'
Spark-Command: spark-submit - главный кластер пряжи - py-files package.zip main / main.py
Но когда я отправляю задание в режиме клиента-пряжи, приложение работает должным образом.
Мое понимание:
- Когда я отправляю задание в режиме клиента, драйвер зажигания работает на той же машине, где я дал команду.И пакет распределяется по всем узлам.
- И когда я запускаю команду в режиме кластера, оба искровой драйвер и мастер приложений запускаются в одном узле (который являетсяне клиент, предоставивший код.) и все же пакет распространяется на все узлы кластера.
В обоих случаях package.zip доступен для всех узлов, тогда почему загружаются только файлы py ине Py файлы не удалось загрузить в режиме кластера.
Может ли кто-нибудь помочь мне разобраться в ситуации здесь и решить проблему?
Обновлено -
Наблюдения
В Режим клиента Распакованный пакет распаковывается впуть, по которому работает скрипт драйвера.Где, как в Режим кластера , ZIP-пакет распределяется по всему узлу, но не распаковывается.Здесь мне нужно распаковать пакет во всех узлах? Есть ли какой-нибудь способ заставить spark распаковать пакет в рабочем узле?