Я новичок в использовании механизма Startcluster/qsub/grid для запуска параллельных заданий, и я попытался прочесть пару других сообщений относительно того же. Я все еще не уверен, как построить масштабируемое решение для моего конкретного требования. Я хотел бы принять еще несколько предложений, прежде чем я продолжу то же самое.Как динамически масштабировать StarCluster/qsub/EC2 для выполнения параллельных заданий по нескольким узлам
Вот мои требования:
У меня есть огромный архивный файл [~ 40 - 50 Гб и может доходить до 100GB] -----> Существует не так много я могу сделать Вот. Я принимаю, что в качестве входных данных используется один единственный файл tar.
Я должен распаковать и распаковать его -----> Я запускаю tar xvf tarfilename.tar | параллельный pbzip -d для распаковки и распаковки.
Результат этого несжатия - это несколько сотен тысяч файлов, около 500 000 файлов.
Этот несжатый файл должен быть обработан. У меня модульный код, который может принимать в каждом отдельном файле и обрабатывать его и выводить 5 разных файлов.
Tar File ----- Parallel распаковки ---> несжатых файлов ----- Parallel Processing ---> 5 выходных файлов в файл обрабатывается
Я в настоящее время параллельный скрипт python, который работает на 16 ядрах, 16 ГБ памяти, взяв в этом списке несжатых файлов и обрабатывая их параллельно.
Проблема в том, как я могу масштабировать масштаб. Например, если мой код работает в течение 10 часов, и я хотел бы добавить к нему еще одну 8-ядерную машину, я не могу сделать это в параллельном python, так как мне нужно было бы знать количество процессоров заранее.
В то же время, когда я динамически добавляю больше узлов в текущий кластер, как насчет доступности данных и операций чтения/записи?
Итак, я начал читать и делал основные эксперименты с помощью starcluster и qsub. Хотя я вижу, я могу отправить несколько заданий через qsub, как я могу заставить его взять входные файлы из несжатой папки ввода?
Например, могу ли я написать script.sh, который в цикле выбирает имена файлов один за другим и передает их команде qsub? Есть ли еще одно эффективное решение?
Скажем, если у вас 3 машины с 16 процессорами каждый, и если я отправлю 48 заданий в очередь, будет ли qsub автоматически запускаться в разных процессорах кластеров или мне придется использовать параметры параллельной среды, такие как -np orte команда устанавливает количество процессоров в каждом кластере соответственно. Нужно ли сделать мой скрипт python исполняемым MPI?
Как итог, у меня есть несколько сотен тысяч файлов в качестве входных данных, я хотел бы отправить их в очереди заданий на многоядерные машины. Если я динамически добавляю больше машин, задания должны автоматически распределяться.
Еще одна серьезная проблема: мне нужен весь вывод 500 000 нечетных операций для агрегирования в конце?Есть ли предложение о том, как агрегировать выходные данные параллельных заданий по мере выписки вывода?
Я тестирую несколько сценариев, но я хотел бы знать, есть ли люди, которые экспериментировали в подобных сценариях.
Любые предложения с использованием плагина Hadoop? http://star.mit.edu/cluster/docs/0.93.3/plugins/hadoop.html
Заранее спасибо Karthick
Спасибо за предложение. Я пошел на общий путь NFS + Queue. Я создал несколько экземпляров, в которых n рабочих прослушивали очередь с мастером, помещающим задания в очередь. Чтобы динамически добавить узел, я установил разрешения клиента NFS на rw, hard, intr для всех активных клиентов и перезапустил сервер NFS для экспорта nfs на недавно добавленный узел. – user1652054