Искра РДД внешних накопителей
Я написал код 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 или файловый сервер.