Несколько машин - обрабатывать много файлов одновременно? - PullRequest
0 голосов
/ 14 декабря 2010

Мне нужно одновременно обрабатывать большое количество файлов (тысячи разных файлов, средний размер которых составляет 2 МБ на файл).

Вся информация хранится на одном (1,5 ТБ) сетевом жестком диске,и будут доступны (читать) около 30 различных машин.Для эффективности каждая машина будет считывать (и обрабатывать) разные файлы (есть тысячи файлов, которые необходимо обработать).

Каждая машина - после чтения файла из папки «входящие» нажесткий диск 1,5 ТБ - будет обрабатывать информацию и быть готовым выводить обработанную информацию обратно в «обработанную» папку на диске 1,5 ТБ.обработанная информация для каждого файла имеет примерно тот же средний размер, что и входные файлы (около ~ 2 МБ на файл).

Существуют ли какие-либо «do» и «donts» при создании такой операции?проблема в том, чтобы 30 машин или около того считывали (или записывали) информацию на один и тот же сетевой диск одновременно?(примечание: существующие файлы будут только читаться, а не добавляться / записываться; новые файлы будут создаваться с нуля, поэтому нет проблем множественного доступа к одному и тому же файлу ...).Есть ли какие-то узкие места, которые я должен ожидать?

(я использую Linux, Ubuntu 10.04 LTS на всех машинах, если все это имеет значение)

Ответы [ 2 ]

1 голос
/ 14 декабря 2010

Вещи, о которых вы должны подумать:

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

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

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

Чем больше я пишу, тем больше это сводится к тому, сколько обработки нужно сделать для каждого файла. Если это простой синтаксический анализ, то то, что занимает миллисекунды, 1 машина или 30, не будет иметь большого значения.

0 голосов
/ 14 декабря 2010

Вы должны быть осторожны, чтобы два рабочих процесса не воспринимали (и не пытались выполнять) одну и ту же часть работы одновременно.

К сожалению, файловые системы NFS не имеют семантики, которая позволяетвам легко это сделать.

Так что я бы порекомендовал использовать что-то вроде Gearman и модель производителя / потребителя, где один процесс дает работу тому, кто может это сделать.

Другая возможность состоит в том, чтобы иметь базу данных (например, mysql) с таблицей всех задач и иметь процессы, которые атомарно «претендуют» на задачи для себя.

Но все это имеет смысл только в том случае, если ваши процессы в основном ЦП-связанный.Если вы пытаетесь получить большую пропускную способность ввода-вывода (или операции) из своего NAS с помощью нескольких клиентов, это не сработает.

Я предполагаю, что вы будете использовать по крайней мере гигабитную сеть Ethernet (илиэто, вероятно, не стоит).

Вы пытались запустить несколько процессов на одном компьютере?

...