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