У меня есть сценарий 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", тогда код запускается. Что я делаю не так?