Как я могу реализовать MapReduce с помощью команд оболочки? - PullRequest
3 голосов
/ 16 апреля 2010

Как выполнить команду оболочки Unix (например, awk one liner) в кластере параллельно (шаг 1) и собрать результаты обратно в центральный узел (шаг 2)?

Обновление: я только что нашел http://blog.last.fm/2009/04/06/mapreduce-bash-script Кажется, он делает именно то, что мне нужно.

Ответы [ 2 ]

2 голосов
/ 16 апреля 2010

Если все, что вы пытаетесь сделать, это запустить кучу удаленных команд, вы можете просто использовать perl. Вы можете «открыть» команду ssh и передать результаты обратно в perl. (Вам, конечно, нужно настроить ключи, чтобы разрешить доступ без пароля)

open (REMOTE, "ssh user@hostB \"myScript\"|");
while (<REMOTE>)
{
  print $_;
}

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

1 голос
/ 12 апреля 2013

параллельный может быть установлен на вашем центральном узле и может использоваться для запуска команды на нескольких машинах.

В приведенном ниже примере несколько соединений ssh ​​используются для запуска команд на удаленных хостах. (-j - количество одновременно выполняемых заданий на центральном узле). Затем результат может быть передан командам для выполнения этапа «уменьшения». (в этом примере сортируйте uniq).

* +1007 *

parallel -j 50 ssh {} "ls" ::: host1 host2 hostn | сортировать | uniq -c

В этом примере предполагается, что между центральным узлом и всеми компьютерами в кластере был установлен «sless-вход без ключа».

Может быть сложно правильно экранировать символы, когда вы выполняете более сложные команды, которые "ls" удаленно, иногда вам нужно экранировать escape-символ. Вы упомянули bashreduce , это может упростить это.

...