Искра РДД внешних накопителей


Я написал код python sum.py для суммирования всех чисел для каждого csv-файла в каталоге data. Теперь я собираюсь использовать Apache-Spark на Amazon Web Service (AWS), чтобы распараллелить процесс суммирования для каждого csv-файла. Я уже сделал следующие шаги:

  1. я создал один главный и два подчиненных узла на AWS.
  2. я использовал команду bash $ scp -r -i my-key-pair.pem my_dir root@host_name для загрузки каталога my_dir на главный узел кластера AWS. Папка my_dir содержит два подкаталога: code и data, в котором code содержит код python sum.py, а data содержит все csv-файлы.
  3. я вошел в свой главный узел AWS и оттуда использовал команду bash $ ./spark/copy-dir /my_dir/code/ для отправки моего каталога кода code, содержащего sum.py, всем подчиненным узлам.
  4. на 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, все работает отлично.

Так что я очень запутался в этой проблеме. Насколько мне известно, программа-драйвер на главном узле загружает csv-файлы, создает RDD и отправляет отдельные задачи, а также RDD на каждый из подчиненных узлов. Это означает, что подчиненным узлам не нужно знать исходные csv-файлы, поскольку они просто получают RDD от главного узла. Если это правда, то почему должен ли я отправить все мои csv-файлы на каждый из подчиненных узлов? Кроме того, если я отправлю все свои csv-файлы на подчиненные узлы, будет использоваться много внешнего дискового хранилища на подчиненных узлах. Означает ли это, что Apache-Spark является очень дорогостоящим инструментом для параллельных вычислений? Я очень признателен, если кто-нибудь поможет мне в этих двух вопросах.
1 2

1 ответ:

Да, вы должны сделать данные доступными для всех узлов. Однако каждый узел будет стараться изо всех сил загружать только те данные, которые его интересуют (его раздел ), и вы можете настроить уровень параллелизма так, чтобы он наилучшим образом соответствовал вашей задаче. Существует множество способов сделать эти данные доступными для всех узлов, помимо копирования их в файловую систему каждого узла. Рассмотрите возможность использования распределенной файловой системы, такой как HDFS , или размещения файлов в доступном месте с каждого узла, которое включает в себя S3 или файловый сервер.