2015-06-23 3 views
0

Аннотация

У меня есть обработка осуществляется с помощью двух консольных приложений (Stage-estimate, Stage-step), каждое приложение обрабатывает файлы на диске, файлы в папках. Каждая папка представляет собой один шаг обработки, который считается завершенным, когда оцениваются все файлы.Запуск приложения на кластере

В качестве примера давайте рассмотрим, что мы находимся в Step 0 и папка 0 содержит следующие файлы:

Папка 0 содержит:

000.data 
001.data 
002.data 
... 
999.data 

У нас есть data файлы, теперь мы должны оценить их , мы запускаем Stage-estimate применение 1000 раз, что приводит к следующей структуре каталогов:

Папка 0 c ontains:

000.data 
000.estimate 
001.data 
001.estimate 
002.data 
002.estimate 
... 
999.data 
999.estimate 

Step 0 завершен у нас есть все data/estimate пара. Чтобы перейти на Step 1, мы запускаем Stage-step приложение 1000 раз на каждые data/estimate пару файлов, и это приводит к появлению нового набора из 1000 *.data файлов в папку 1. После завершения Stage-step приложения, мы имеем папку 1 с такой же структурой, как у нас было на Step 0:

Папка 1 содержит:

000.data 
001.data 
002.data 
... 
999.data 

С этого момента процесс повторяется до тех пор, пока не будет отменено.

Проблема

Применение Stage-estimate делает некоторые довольно сложные вычисления он потребляет 99% от общей мощности обработки по сравнению с Stage-step применения.

Я планировал использовать AWS, чтобы ускорить процесс. Я не хочу начинать изобретать специальные командные файлы, которые бы назвали мои приложения так, как описано выше, я знаю, что есть специальное программное обеспечение, которое делает некоторые высокоуровневые процессы планирования и другие связанные с кластером.

Вопрос

Я никогда не имеет дело с кластерной вычислительной техникой, от верхней части моей головы, я вижу, что приложение распараллеливается очень приятно, и это вписывается в инфраструктуру AWS. С другой стороны, я полный новичок в мире кластерных вычислений, и я не знаю, с чего начать. Я имел дело с AWS, но ничего не связал с кластерными вычислениями, я не знаю, как организовать поток, который я описал, и как заставить его работать эффективно, поэтому я был бы признателен, если бы вы указали мне в правильном направлении или предоставили некоторые ссылки на демонстрации/лучшие практики.

Спасибо заранее!

+0

Вы не могли бы дать некоторую информацию о программном обеспечении? На каком языке вы используете? Являются ли команды оценки на одном этапе независимыми (так что вы можете запускать оценочные функции параллельно?) Должен ли этап 0 быть полностью готов, прежде чем начнется этап 1? или если 000.data обработано и 000.estimate готов на этапе 0, вы можете создать 000.data на первом этапе и оценить его, независимо от каких-либо других файлов данных? –

+0

Это написано на C++, «Stage-evaluation» берет один файл и выдает другой файл, поэтому он полностью не зависит от других файлов, «Stage-step» имеет частичную зависимость от других файлов (в действительности может потребоваться несколько файлов в качестве ввода) , Этап 1 может быть запущен, когда в исходной директории достаточно оценок. Таким образом, это означает, что вы можете получить что-то вроде 50% от этапа 1, вычисленного при выполнении только 90% этапа 0, но в конечном итоге лучше сначала выполнить «этап 0», а затем перейти к «Этапу 1» – Lu4

ответ

1

__________Edit__________

Основываясь на ваш комментарий, вы можете поместить все свои рабочие места от стадии 0 в очередь и начинают обрабатывать его.У вас также может быть логика, которая проверяет, осталось ли всего несколько заданий и пытается добавить новые задания со стадии 1. Это немного ускорит ваш расчет, даст вам лучшее использование ресурсов, но это необязательно и сделает вашу систему более сложной ,

Я предлагаю вам использовать SQS (или SWF) для хранения заданий, S3 для хранения файлов и группу автомасштабирования выборок для рабочих узлов.

К сожалению, Lambda не поддерживает C++ на данный момент. (. Node.js и Java поддерживаются)

________Original________

AWS поддерживает несколько концепций, которые вы можете рассмотреть следующие вопросы:

Развязка: Вы можете использовать SQS (Simple Queue Service) для работы очередей , что дает вам избыточную и отказоустойчивую очередь заданий. Вы можете иметь флот рабочих экземпляров, которые запрашивают задания, формируют очередь, запускают их, и если они закончены, удаление задания из очереди. Если экземпляры зависают/сбой во время выполнения задания, то после периода ожидания задание возвращается в очередь, а другой экземпляр снова выполняет его.

Прочие услуги: SWF (Простая обработка рабочего процесса). Эта служба внутренне использует очереди SQS, с этой службой вам может потребоваться меньше скриптов для склеивания всего вашего рабочего процесса вместе.

избыточностью хранения: Я бы определенно использовать AWS S3 для хранения, потому что это дешево и избыточными. После первого чтения я не думаю, что вам нужна какая-либо передовая (файловая система). (например, блокировка.)

Точки экземпляра: Для рабочих узлов я бы использовал экземпляры Spot, которые намного дешевле. Единственная проблема с ними, если вам нужен действительно быстрый ответ для вашей задачи все время. (Если вы генерировать ежедневные отчеты, спотовые экземпляры идеальным решением.)

+1: Вы можете использовать AWS Lambda функцию для выполнения заданий. Вы можете активировать функцию лямбда на основе событий S3. Например, вы загрузили новый файл * .data. Однако функции Lambda не могут работать слишком долго. Но если вы можете использовать лямбда-функцию, тогда вся ваша среда будет содержать только ведра S3 и лямбда-функцию. Оба они являются управляемыми AWS службами, поэтому ваша система будет чрезвычайно гибкой, отказоустойчивой. Я не могу сказать никаких точных сведений о ценах, но я предполагаю, что это будет дешевле, чем запуск экземпляров EC2.

Резюме: Если вы можете использовать свои оценки параллельно, AWS дает вам много мощности и скорости. (за хорошие деньги), особенно если ваша нагрузка меняется в течение дня.

Хороший источник: White Paper on ‘Cloud Architectures’ and Best Practices of Amazon S3, EC2, SimpleDB, SQS