Настройте Partitioner для балансировки входов с редукторами

Предположим, мои преобразователи выдают N ключей (эти ключи разные), и у меня есть K редукторов. Как написать собственный Paritioner, чтобы каждый редуктор получал примерно N/K ключей? Какие ключи идут на какие получает, не важно.

Пример: предположим, что мои мапперы выдают 10 пар <k1,v1>,<k2,v2>,<k3,v3>,...<k10,v10> и у меня 3 редуктора. Я хочу, чтобы 3 пары шли на 1-й редуктор, 3 пары - на 2-й, 4 пары - на 3-й, независимо от того, какие ключи и какие редукторы идут.

Что я пытался:

  • Случайно назначить редуктор. Например, случайным образом назначить <k1,v1> до 1-го редуктора, <k2,v2> до 2-го редуктора и тд. Но все же есть редукторы, получающие гораздо больше данных, чем другие
  • Я не хочу исправлять, какие ключи идут на какие редукторы. Потому что ключи k1,k2,...k10 из моих картографов меняется в зависимости от входных данных -> Я должен изменить код для каждого входного данных. Кроме того, эти ключи имеют равные роли. Мне просто нужно распределить их поровну между редукторами.

Большое спасибо.

1 ответ

Разделитель по умолчанию использует хеш-функцию, она обеспечивает равномерное распределение по структуре, поэтому вы не получите лучших результатов, если не знаете что-то о данных, например, точные значения ключей, которые должны быть распределены.

Другие вопросы по тегам