Проект Oropo (http://www.oropo.org/) позволяет разнести обработку большого объема ресурсоемких операций на несколько машин в сети, организовав временный кластер. В качестве примера рассмотрим выполнение задачи уменьшения размера нескольких тысяч изображений с высоким разрешением.
Для преобразования будет использовать стандартные утилиты из пакета libjpeg - djpeg и cjpeg. В итоге для обработки одной картинки создадим простой скрипт make_smaller.sh: #!/bin/bash
QUALITY=30
if [ $# -ne 1 ]; then
echo "arguments" 1>&2
exit 1;
fi
FILE_PATH=$1
djpeg $FILE_PATH | cjpeg -quality $QUALITY
При выполнении операции на одном компьютере, нам бы потребовался последовательный перебор всех изображений в цикле:
#!/bin/bash
MAKE_SMALLER=$PWD/make_smaller.sh
IMGS_DIR=$PWD/imgs
TARGET_DIR=$PWD/imgs_smaller
for file in $IMGS_DIR/*; do
bash $MAKE_SMALLER $file > $TARGET_DIR/${file##*/}
done
Используя систему Oropo Executor можно легко распараллелить выполнении поставленной задачи на несколько машин в сети. Как видно из следующего скрипта, скрипт притерпел минимальные изменения, изображения все так же перебираются последовательно, а их распараллеливание вынесено целиком на плечи программы oropo-system-pusher.
Processing parallelly
#!/bin/bash
MAKE_SMALLER=$PWD/make_smaller.sh
IMGS_DIR=$PWD/imgs
for file in $IMGS_DIR/*; do
oropo-system-pusher -p "string:bash" -p "path:$MAKE_SMALLER" -p "path:$file"
done
Результат работы сохраняется в файлах /var/lib/oropo/response/*/0
++ Настройка Oropo
Как видим, распаралелливание было организовано предельно просто, не менее трудно настроить работу инфраструктуры Oropo в Debian и Ubuntu.
Подключаем репозиторий с готовыми пакетами oropo, в /etc/apt/sources.list добавляем:
deb http://students.mimuw.edu.pl/~ms209495/oropo/debian sid main
Устанавливаем:
sudo apt-get update
sudo apt-get install oropo-system
На узлах-обработчиках заданий ставим по аналогии Oropo Executor:
sudo apt-get install ap-executor
Настраиваем центральный управляющий узел, на котором будем инициировать выполнение заданий.
Добавляем себя в группу oropo:
adduser `whoami` oropo
Добавляем IP-адреса узлов-обработчиков:
oropo-monitor-ctl --id_prefix oropomonitor --add 192.168.1.2
oropo-monitor-ctl --id_prefix oropomonitor --add 192.168.1.3
oropo-monitor-ctl --id_prefix oropomonitor --add 192.168.1.4
Все готово !
URL: http://www.howtoforge.com/processing-10000-pictures-using-ma...
Обсуждается: http://www.opennet.dev/tips/info/2363.shtml