В hadoop что подразумевается под способностью сохранять состояние через несколько входов mapper reducer?

#hadoop #mapreduce

#hadoop #mapreduce

Вопрос:

Заголовок вопроса объясняет все, в чем заключается мой вопрос. Я прочитал несколько текстов, ответы на которые я наткнулся на эту строку

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

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

Ответ №1:

Если вы уже чувствуете себя комфортно с концепцией «редуктора», концепция объединения будет простой. Объединитель можно рассматривать как мини-редуктор на этапе отображения. Что я имею в виду под этим? Давайте посмотрим пример: предположим, что вы решаете классическую задачу подсчета слов, вы знаете, что для каждого слова mapper выдает пару ключ-значение. Затем редуктор примет в качестве входных данных эти пары ключ-значение и обобщит их. Предположим, что mapper собирает некоторые пары ключ-значение, такие как:

 <key1,1>,
<key2,1>,
<key1,1>,
<key3,1>,
<key1,1>
  

Если вы не используете объединитель, эти 4 пары ключ-значение будут отправлены в редуктор. но с помощью объединителя мы могли бы выполнить предварительное уменьшение в mapper, поэтому результат mapper будет:

 <key1,3>,
<key2,1>,
<key3,1>
  

В этом простом примере с помощью объединителя вы уменьшили общее количество пар ключ-значение с 5 до 3, что даст вам меньше сетевого трафика и лучшую производительность на этапе перетасовки.

Комментарии:

1. ДА. Я полностью понимаю, что вы говорите, но мой вопрос касается состояния…. Я не понимаю утверждение: способность сохранять состояние на нескольких входах …..? что это? где мы сохранили состояние здесь?

2. Или вы хотите сказать, что агрегация, которую мы выполнили, сохранила состояние?

3. Ну, это немного связано с тем, как структура map-reduce работает внутри. Фреймворк создает экземпляр объекта Mapper, у него есть определенный вами метод map, но поскольку один и тот же объект Mapper применяет метод map к нескольким парам ключ-значение во входном разделении, он способен сохранять состояние на нескольких входах пар ключ-значение, простым примером этого состояния может бытьсчетчик для каждого ключа, с которым он сталкивается. Он может даже загружать данные «состояния» во время «настройки» и сохранять их (или обновлять) на нескольких входах.

4. Можете ли вы подробнее объяснить это простым объяснением?