Искра РДД внешних накопителей
Я написал код python sum.py для суммирования всех чисел для каждого csv-файла в каталоге data. Теперь я собираюсь использовать Apache-Spark на Amazon Web Service (AWS), чтобы распараллелить процесс суммирования для каждого csv-файла. Я уже сделал следующие шаги:
- я создал один главный и два подчиненных узла на AWS.
- я использовал команду bash
$ scp -r -i my-key-pair.pem my_dir root@host_nameдля загрузки каталогаmy_dirна главный узел кластера AWS. Папкаmy_dirсодержит два подкаталога:codeиdata, в которомcodeсодержит код pythonsum.py, аdataсодержит все csv-файлы. - я вошел в свой главный узел AWS и оттуда использовал команду bash
$ ./spark/copy-dir /my_dir/code/для отправки моего каталога кодаcode, содержащегоsum.py, всем подчиненным узлам. - на AWS master node я также поместил каталог
data, содержащий все csv-файлы, в HDFS с помощью$ ./ephemeral-hdfs/bin/hadoop fs -put /root/my_dir/data/.
Теперь, когда я подаю заявку на AWS master node: $ ./spark-submit ~/my_dir/code/sum.py, появляется ошибка, что рабочий узел не удается найти файлы csv. Однако после того, как я отправлю свой каталог данных data всем подчиненным узлам с помощью команды copy-dir, все работает отлично.
1 ответ:
Да, вы должны сделать данные доступными для всех узлов. Однако каждый узел будет стараться изо всех сил загружать только те данные, которые его интересуют (его раздел ), и вы можете настроить уровень параллелизма так, чтобы он наилучшим образом соответствовал вашей задаче. Существует множество способов сделать эти данные доступными для всех узлов, помимо копирования их в файловую систему каждого узла. Рассмотрите возможность использования распределенной файловой системы, такой как HDFS , или размещения файлов в доступном месте с каждого узла, которое включает в себя S3 или файловый сервер.