Запуск mapreduce на портативных устройствах - PullRequest
2 голосов
/ 21 ноября 2010

Я слышал о людях, которые успешно запустили mapreduce на Google Nexus One. Больше нет информации о производительности запуска полного кластеризованного преобразования карт на Android.

Мне бы очень хотелось запустить mapreduce на моем телефоне с относительно небольшим объемом данных в не кластерном режиме. Стоит ли полностью использовать hadoop? есть ли где-нибудь раздетая версия? какие альтернативы?

1 Ответ

6 голосов
/ 22 ноября 2010

Весь смысл использования такого процесса, как сокращение карты, состоит в том, чтобы разделить рабочую нагрузку между несколькими компьютерами, одновременно обеспечивая одновременность, невозможную на современных компьютерах. Если у вас нет планов по объединению нескольких устройств Android, вам не нужно использовать что-то вроде hadoop.

Если вы можете загрузить все данные на устройство (то, что вы говорите, вы можете сделать). Самое близкое к параллельному запуску алгоритма - использовать несколько потоков и разделить ваши данные. Вам не нужно выполнять программирование с уменьшением стилей, чтобы получить преимущества параллельного программирования, и вам может быть проще разработать свой алгоритм как модель производителя / потребителя. Но если у вас есть это, вот способ сделать это.

Я бы начал с двух BlockingQueues (в очереди и вне очереди) и потока для чтения ваших данных из файла (т.е. производителя). Создайте пул потоков для чтения из очереди и записи в очередь. Каждый поток выполнит вычисление на одном из входных данных (то есть потребителя) и отправит результаты в очередь, чтобы производитель мог получить результаты. Выполнение одного прохода через входящую и исходящую очередь выполнит половину процесса уменьшения карты. Это обычно упоминается как производитель / потребитель. С этой архитектурой стиля можно многое сделать.

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

Поэтому полный переход состояния для источника будет:

  1. Разбор входного файла и создание рабочих нагрузок для помещения в очередь.
  2. Чтение результатов из очереди, пока не будут выполнены все процессы карты.
  3. Объедините результаты по ключу.
  4. Запишите все результаты с тем же ключом в очередь, что и одна единица работы. Повторите эти действия для всех полученных уникальных ключей.
  5. Считать все результаты, возвращающиеся в очередь.

Переходы состояния потребителя будут:

  1. Считать единицу работы из очереди.
  2. Выполнить логику карты для этой единицы работы.
  3. Запишите результат + ключ в очередь.
  4. Читать единицу работы из очереди.
  5. Выполните логику сокращения для этой единицы работы.
  6. Запишите результат в очередь out.

Карта альта уменьшает рамки стиля на андроид.

...