Как упаковать код pyspark с помощью virtualenv, включая интерпретатор python3? - PullRequest
2 голосов
/ 12 февраля 2020

Я пытаюсь запустить приложение pyspark на кластере пряжи. Приложение использует определенные библиотеки, которые требуют python3. Однако кластер пряжи использует python2 и не имеет установленного python3. Есть ли способ упаковать мое приложение pyspark с python3 и всеми основными python3 библиотеками.

Я выполнял эти шаги грубо для создания виртуальной среды

virtualenv -p /usr/bin/python3 venv/
source venv/bin/activate
pip install -r requirements.txt
venv-pack -o environment.tar.gz
/usr/bin/spark-submit --master yarn --executor-cores 1  --num-executors 15  --queue wesp_dev   --deploy-mode cluster  --conf "spark.driver.extraJavaOptions=-DENVIRONMENT=pt"  --conf "spark.executor.extraJavaOptions=-DENVIRONMENT=pt"  --name "EndpointAttackDetectionEngine"   --class com.telus.endpointAttackDetectionEngine.AppMain   --keytab $KEY_TAB  --principal $PRINCIPAL --driver-memory=4G --archives environment.tar.gz#environment --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./environment/bin/python --conf spark.executorEnv.LD_LIBRARY_PATH=./environment/lib/ --conf spark.yarn.appMasterEnv.LD_LIBRARY_PATH=./environment/lib/ test.py 

Однако количество проблем при создании виртуальной среды, следуя шагам выше

  1. I заметил, что интерпретатор python в venv / bin / python имеет символическую ссылку на / usr / bin / python. Мне пришлось вручную удалить символические ссылки и просто скопировать интерпретатор python. Поскольку в кластере не было бы python3 в /usr/bin/python.
  2. lib python3 .6m.so.1.0. Из-за этого изначально не работало приложение Pyspark. Я вручную скопировал это в venv / lib / и указал его в spark.executorEnv.LD_LIBRARY_PATH=./environment/lib/ и spark.yarn.appMasterEnv.LD_LIBRARY_PATH=./environment/lib/ в spark-submit
  3. Теперь я застрял на Fatal Python error: Py_Initialize: Unable to get the locale encoding ModuleNotFoundError: No module named 'encodings' при запуске приложения pysark в кластере пряжи. Я вручную скопировал кодировки и другие основные модули для python3 из /usr/lib64/python3.6, но проблему не устранил.

Все это заставляет меня поверить, что я что-то упускаю, когда упаковываю свою среду с помощью venv. Должен быть лучший способ сделать это. Я новичок в этом. Может кто-нибудь, пожалуйста, помогите.

С уважением!

...