2016-06-23 4 views
3

У меня есть набор изображений размером ~ 1 ГБ, равный 1 ГБ, который мне нужен для запуска того же алгоритма. В настоящее время у меня есть процесс исправления, написанный на C++, и он работает хорошо, однако на всех этих изображениях будет выполняться бесконечная работа. Я понимаю, что реализация MapReduce/Spark может работать, но я не могу понять, как использовать вход/выход изображения.Hadoop для обработки больших изображений

Каждый учебник/пример, который я видел, использует обычный текст. Теоретически я хотел бы использовать веб-службы Amazon. Если у кого-то есть какое-то направление для меня, это будет здорово. Я, очевидно, не ищу полного решения, но, возможно, кто-то успешно реализовал что-то близкое к этому? Заранее спасибо.

ответ

2

Ваши данные в HDFS? Что именно вы ожидаете от использования Hadoop/Spark? Мне кажется, что все, что вам нужно, это очередь имен файлов и множество машин для выполнения.

Вы можете упаковать свое приложение в AWS Lambda (см. Running Arbitrary Executables in AWS Lambda) и trigger events для каждого файла. Вы можете упаковать свое приложение в контейнер Docker и запустить кучу из них в ECS, позволить им освобождаться в очереди имен файлов (или URL-адресов или кодов S3) для обработки.

Я думаю, что Hadoop/Spark является излишним, потому что они очень плохи при обработке 1 ГБ в качестве входных данных, а ваша обработка не является M/R (никаких ключей для редукторов для слияния). Если вам нужно, вы можете упаковать свое приложение на C++ для чтения из stdin и использовать Hadoop Streaming.

В конечном счете возникает вопрос: где хранятся данные 50 ТБ и какой формат? Решение зависит от ответа, так как вы хотели бы вычислить, где находятся данные, и не передавать 50 ТБ в AWS или даже загружать в HDFS.

+0

Спасибо за информацию, я очень ценю это. Идея контейнера/очереди Docker кажется, что она может работать. Поэтому, чтобы убедиться, что я понимаю, я бы обернул существующий код C++ в контейнер и добавил все имена файлов в очередь sqs. Затем запустите определенное количество EC2 в зависимости от размера очереди и отправьте контейнер каждому. Поскольку каждый EC2 заканчивает работу, он записывает новое изображение в S3 и удаляет задание из очереди? – HelloWor1d

+0

Правильно. Обтекание приложения в контейнере тривиально (просто добавьте все зависимости/библиотеки, скопируйте скомпилированное двоичное приложение и добавьте команду «RUN», см. [Dockerfile] (https://docs.docker.com/engine/reference/ builder /) –

+0

Отлично, я начну изучать его. Было бы целесообразно отправить пару заданий на каждый EC2 или только по одному для каждого? Также будет иметь значение, если очередь невероятно длинная или мне нужно ее сохранить на определенной длине и добавлять задания, поскольку EC2 заканчивает другие? – HelloWor1d

1
  • У вас есть 50TBs ~ 1GB больших файлов .tif.
  • Вы хотите запустить такой же алгоритм для каждого файла.

Одним из аспектов решения проблемы в MapReduce парадигме, что большинство разработчиков не знают о том, что:

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

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

MapReduce парадигма программирования предназначена для запуска видов работ, требующих масштабирования и масштабирования.


Некоторых советы:

  • С данными этой большого размером, то имеет смысл взять вычисление где данные, а не в результате чего данных для вычисления.
  • Запуск этой работы на аппаратном оборудовании коммерческого уровня явно плохая идея. Вам нужны машины с несколькими ядрами - возможно, 16/32.
  • После того как вы приобрели необходимое оборудование, вы должны оптимизировать свое программное обеспечение, чтобы распараллелить алгоритм везде, где это необходимо/полезно.
  • Ваша проблема, безусловно, та, которая может помочь в расширении. Для файлов большого размера и большой коллекции этих типов файлов, увеличение оперативной памяти и использование более быстрого процессора, несомненно, разумно.
  • Наконец, если вас беспокоит ввод данных, вы можете прочитать изображения как двоичные. Это ограничит вашу способность работать с форматом .tif, и вам, возможно, придется переработать свой алгоритм обработки.
Смежные вопросы