Я пытаюсь сделать python программу для Amazon EMR, но я не могу читать файлы из hdfs в ней. Я делаю это так: Конфигурация кластера следующая: Релиз: emr-5.25.0, куст 2.3.5, spark 2.4.3
Сначала я запускаю сценарий оболочки с компьютера, не входящего в кластер, вот так:
aws emr add-steps ... --steps Type=CUSTOM_JAR .. Args=['s3://script.sh']
Скрипт находится в корзине s3.
Скрипт выполняет некоторые проверки и копирует файлы из s3 в кластер следующим образом:
s3-dist-cp s3://some_file /mnt1/some_file
hdfs dfs -put /mnt1/some_file hdfs://home/hadoop/output/gzip
hdfs dfs -ls -h hdfs://home/hadoop/output/gzip (1)
Затем запускается скрипт python Программа выглядит так:
spark-submit ... --master yarn --deploy-mode cluster s3://script.py
В python программе я делаю что-то вроде этого:
if __name__=="main":
subprocess.check_output("hdfs dfs -ls hdfs://home/hadoop/output/gzip") #(2)
sc = SparkContext()
f = sc.binaryFiles("hdfs://home/hadoop/output/gzip") #(3)
f.keys().foreach(some_fn)
Моя проблема в том, что (1) работает правильно и показывает файлы в формате hdfs. (3) тоже работает правильно, но (2) ничего не выводит, говоря: «[Errno 2] Нет такого файла или каталога».
Что я пытаюсь сделать, это изменить код python, так как Насколько я понимаю, binaryFiles загружает содержимое файлов в память и разделяет его между узлами, но в этой задаче мне нужно знать только имена файлов.