Python скрипт не работает в режиме развертывания кластера на AWS - PullRequest
0 голосов
/ 06 января 2020

У меня есть сценарий python, который я пытаюсь запустить на кластере AWS EC2, сценарий имеет следующий код:

df = ... make a dataframe
print(f'made dataframe')
df.to_csv('/homd/hadoop/my_file.csv')

Однако кластеры EC2, по-видимому, имеют по умолчанию python установлен на 2,7 вместо 3,6 (поэтому я не могу использовать fstrings). Поэтому я создал еще один python скрипт, script_runner.py

import os
cmd = 'python3 /home/hadoop/original_script.py'
os.system(cmd)

Так что теперь второй скрипт может запускать первый с помощью python 3.

Я поместил оба скрипта в корзина S3 и имеющийся у меня файл bootstrap. sh синхронизируют их из s3 в кластер.

Теперь я использую AWS CLI для настройки моего кластера:

aws2 emr create-cluster --name "Spark cluster with step" \
--release-label emr-5.24.1 \
--applications Name=Spark \
--log-uri s3://log-bucket/logs/ \
--ec2-attributes KeyName=boris-aws-quant,EmrManagedMasterSecurityGroup=sg-...,EmrManagedSlaveSecurityGroup=sg-... \
--instance-type m5.xlarge \
--instance-count 1 \
--bootstrap-actions Path=s3://set-up/bootstrap_file.sh \
--steps Name="Command Runner",Jar="command-runner.jar",Args=["spark-submit","--deploy-mode=cluster","/home/hadoop/run_python_scripts.py"] \
--use-default-roles \
--no-auto-terminate

И я получаю сообщение об ошибке в журналах пряжи

3.6.8 (default, Oct 14 2019, 21:22:53)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
Traceback (most recent call last):
  File "/home/hadoop/obtain_data.py", line 239, in <module>
    output_stock_df_to_csv(stock_df, output_directory)
  File "/home/hadoop/obtain_data.py", line 210, in output_stock_df_to_csv
    stock_df.to_csv(output_directory)
  File "/usr/local/lib64/python3.6/site-packages/pandas/core/generic.py", line 3228, in to_csv
    formatter.save()
  File "/usr/local/lib64/python3.6/site-packages/pandas/io/formats/csvs.py", line 183, in save
    compression=self.compression,
  File "/usr/local/lib64/python3.6/site-packages/pandas/io/common.py", line 399, in _get_handle
    f = open(path_or_buf, mode, encoding=encoding, newline="")
PermissionError: [Errno 13] Permission denied: '/home/hadoop/my_file.csv'

НО, если я не использую "--deploy-mode = cluster", тогда код запускается. Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...