[Moscow.pm] Идеальный Map-ер и Reduce-ер

Ruslan Zakirov ruslan.zakirov на gmail.com
Ср Янв 21 00:06:02 PST 2009


Знаете что такое оператор шварца?

@sorted = map $_->[0] sort { $a->[1] <=> $b->[1] } map [ $_,
$_->sort_order ], @objects;

reducer - map+sort слева
mapper - map справа
task - сортировка
task data - @objects;

Теперь все это параллелим:

* в диспечере: my @block = splice @objects, 0, 100;
* запихиваем @block в свободный мапер
* мапер: return map { operation-sort-task-x => [ $_, $_->sort_order ] } @block
* локальный комбинатор получает ключ и список значений с этим ключом
полученный от локального мапера
* локальный комбинатор sub {
   my $key = shift; @values = @_;
   return $key, [ sort { $a->[1] <=> $b->[1] } @_ ];
}
* запихиваем в хранилище результат
* после окончания мапинга раздаем задачи по редьюсу
* редьюсеры сортируют уже предварительно отсортированные блоки и
возвращают объекты
* репортеры складывают результат куда нам нужно

Все просто, но куча веселых вопросов.

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

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

Я бы не назвал это редьюсером, а глобальным комбинером. и в задаче
сортировки не было бы редьюсера совсем. Или можно назвать re-entrant
reducer'ом.

Репортер знает, что мы передаем блоки и знает где забрать объекты.

Вот такая хрень.

2009/1/21 Павел Тимонин <gg.error на gmail.com>:
> Сильно - в смысле "здравствуйте, Михаил" :) - строчка, после которой я это
> написал. такое обращение к самому себе.
> поэтому и извинялся за оффтоп - никакого отношения к теме это не имеет.
> сама же тема мне очень непонятна и интересна, тред читаю, но ничего не
> понимаю - я в этом ни в зуб ногой. но вижу большуя практическую пользу.
> 21 января 2009 г. 1:20 пользователь Михаил Монашёв
> <postmaster на softsearch.ru> написал:
>>
>> Здравствуйте, Павел.
>>
>> ПТ> Здравствуйте, Михаил.
>> ПТ> А вот это сильно.
>> ПТ> Сорри за оффтоп.
>>
>> В каком смысле "сильно"? Грибы у меня забористые или идея понравилась?
>> Можно поняснить.
>>
>> Я  просто  тут пытаюсь людей спровоцировать на диалог. Тема, видимо не
>> всем понятна, а потому любое обсуждение ИМХО полезно.
>>
>> Есть  например  большой  вопрос об эффективности использовании ssh как
>> транспорта.  Но при этом Disco и Parallel::MapReduce их используют. Мы
>> же   не  MapReduce-ботнет  делаем.  А  во  внутренней  сетке  всё  это
>> запускаем. Шифрование там лишнее ИМХО.
>>
>> Также  есть  мысль,  что  перед  мапером  должен  запускаться какой-то
>> итератор,  который  поставляет  маперу  данные  в  формате хэша. Также
>> должно  быть  какое-то  хранилище,  чтобы складывать результаты работы
>> маперов, потом агркгировать их по ключам и раздавать редьюсерам.
>>
>> Ещё  есть  ощущение,  что  редьюсеры  особенно лично мне и не нужны. И
>> потому  MapReduce  вырождается  просто  в  запускалку  в  параллель на
>> нескольких серверах каких-то скриптов. Хотя возможно просто не хватает
>> практики, чтобы понять всю мощь MapReduce и начать использовать его.
>>
>> --
>>
>> С уважением,
>> Михаил Монашёв, SoftSearch.ru
>> mailto:postmaster на softsearch.ru
>> ICQ# 166233339
>> http://michael.mindmix.ru/
>> Без бэкапа по жизни.
>>
>> --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
>
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>



-- 
Best regards, Ruslan.


Подробная информация о списке рассылки Moscow-pm