[Background]:
Я реализую упрощенную версию каркаса mapreduce в python
.В основном master
назначит файл каждому worker
, а worker
обработает файл и отправит результат обратно.После получения всех результатов от workers
master
будут агрегироваться результаты, т.е. выступать в качестве одного редуктора.
[Мой вопрос]:
Мы с моим колледжем придерживались разных мнений о том, как реализовать связь между master
и workers
.
Мой путьэто открыть http-серверы на master
и workers
(Python имеет встроенный http-сервер SimpleHttpServer
).Обычно master
отправляет запрос post
с файлом в качестве данных, а worker
подтверждает файл.После обработки файла worker
отправит еще один запрос post
с результатом (объект json) на master
.
Но мой колледж считает, что я должен использовать scp
для передачи файла из master
в workers
и позволить workers
записать результат в файл. workers
следует использоватьscp
для передачи файла результатов в master
(например, в определенном каталоге) и пусть master
периодически проверяет этот каталог на наличие файла результатов.
[My Reasoning]:
Причины, по которым http-сервер является лучшим решением, следующие:
- Можно использовать временную папку и не нужно указывать работнику конкретный каталог для размещения файлов.
- Если выполняется мониторинг при создании файла, необходимо убедиться, что файл результата из
worker
скопирован в master
после запуска watchdog. - Возможно, создание файла мониторинга имеетиметь дело с устаревшими файлами, например файлами с последнего запуска.Для этого может потребоваться какая-то временная метка, которая, на мой взгляд, немного хакерская.
Я полагаю, что основным недостатком использования http-серверов является то, что в python нет очень хорошего встроенного http-сервера.Но я все еще чувствую, что передача файла и создание файла мониторинга не так чисты, как использование http requests
.
Любые предложения будут оценены!А также, если возможно, не помечайте это как " в основном основанное на мнении ".Я пытался предоставить как можно больше информации, и я думаю, по крайней мере, для этого конкретного сценария одно решение лучше, чем другое.
[Подробнее]
- Каждый файл имеет размер менее 100 МБ.(Большинство из них составляют примерно 40 МБ)
- Передача файлов осуществляется в частной сети, и содержимое файла не является конфиденциальным.Я думаю, что нет необходимости шифровать их.
- Результаты намного меньше, чем входной файл.
- Здесь примерно 20 рабочих, а номера файлов примерно 40.