Есть несколько проблем с вашей задачей.
Hadoop не обрабатывает изображения, как вы видели. Но вы можете экспортировать все имена файлов и пути в виде текстового файла и вызвать для него некоторую функцию Map. Поэтому вызывать ImageMagick для файлов на локальном диске не стоит.
Но как вы справляетесь с локальностью данных?
Нельзя запускать ImageMagick для файлов в HDFS (нестабильно только Java API и FUSE), и вы не можете предсказать планирование задачи. Так, например, задача карты может быть запланирована на хост, где изображение не существует.
Конечно, вы можете просто использовать одну машину и одну задачу. Но тогда у вас нет улучшения. Тогда у вас будет куча накладных расходов.
Также существует проблема с памятью, когда вы выполняете оболочку из задачи Java. Я сделал сообщение в блоге об этом [1].
and should be able to be done using Bash
Это следующая проблема, вам, по крайней мере, нужно написать задачу карты. Вам нужен ProcessBuilder
для вызова ImageMagick с определенным путем и функцией.
Я не могу найти что-либо об этой работе с Hadoop: запуск
с набором файлов, выполняя одно и то же действие для каждого из файлов,
и затем записываем вывод нового файла как его собственный файл.
Угадай почему? : D Hadoop не подходит для этой задачи.
Поэтому я бы порекомендовал вручную разделить ваши изображения на несколько хостов в EC2 и запустить поверх них скрипт bash.
Это меньше стресса и быстрее. Чтобы парализовать на одном хосте, разделите ваши файлы на несколько папок для каждого ядра и запустите сценарии bash поверх него. Это должно использовать вашу машину довольно хорошо и лучше, чем Hadoop.
[1] http://codingwiththomas.blogspot.com/2011/07/dealing-with-outofmemoryerror-in-hadoop.html