Обработка тысяч изображений на нескольких узлах при помощи Oropo |
[исправить] |
Проект 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
Все готово !
|
|
|
|
Раздел: Корень / Администратору / Система / Кластерные технологии |