Я написал код 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 я также поместил каталог
data
, содержащий все файлы csv, в HDFS, используя$ ./ephemeral-hdfs/bin/hadoop fs -put /root/my_dir/data/
.
Теперь, когда я отправляю свое приложение на главный узел AWS: $ ./spark-submit ~/my_dir/code/sum.py
, появляется сообщение об ошибке, что рабочий узел не может найти файлы csv. Однако после того, как я отправлю свой каталог данных data
на все подчиненные узлы с помощью команды copy-dir
, все работает отлично.
Так что я очень запутался в этой проблеме. Насколько мне известно, программа драйвера на главном узле загружает файлы csv, создает RDD и отправляет отдельные задачи, а также RDD на каждый из подчиненных узлов. Это означает, что подчиненным узлам не нужно знать исходные файлы CSV, поскольку они просто получают RDD от главного узла. Если это правда, почему я должен отправлять все мои CSV-файлы на каждый подчиненный узел? Кроме того, если я отправлю все свои файлы csv на подчиненные узлы, будет использоваться много внешнего дискового хранилища на подчиненных узлах. Означает ли это, что Apache-Spark - очень дорогой инструмент для параллельных вычислений? Я очень признателен, если кто-нибудь поможет мне по этим двум вопросам.