Почему hadoop сортирует вход редукторов? - PullRequest
0 голосов
/ 15 января 2019

Я сравнил временную производительность следующих двух редукторов для проблемы Word Count. Эти редукторы отличаются тем, пользуются ли они преимуществами сортировки ввода по ключу.

Редуктор 1 (не использует сортируемый ввод):

#!/usr/bin/python
import sys

# maps words to their counts
word2count = {}

for line in sys.stdin:
    w = line.strip().split()[0] # this is the word
    word2count[w] = (word2count[w] + 1 if word2count.has_key(w) 
                     else 1)

# Write (unsorted) tuples to stdout
for word in word2count.keys():
    print '%s\t%s' % (word, word2count[word])

Редуктор 2 (использует отсортированный ввод):

#!/usr/bin/python
import sys

# maps words to their counts
word2count = {}
last = ""
count = 0

for line in sys.stdin:
    w = line.strip().split()[0] # this is the word
    if w != last and count != 0:
        word2count[last] = count
        last = w
        count = 1
    else: count += 1
if last != "": word2count[last] = count

# Write (unsorted) tuples to stdout
for word in word2count.keys():
    print '%s\t%s' % (word, word2count[word])

Один и тот же картограф использовался с обоими редукторами:

#!/usr/bin/python
import sys
import string

#--- get all lines from stdin ---
for line in sys.stdin:
    #--- to lower case and remove punctuation ---
    line = line.lower().translate(None, string.punctuation)

    #--- split the line into words ---
    words = line.split()

    #--- output tuples [word, 1] in tab-delimited format---
    for word in words: 
        print '%s\t%s' % (word, "1")

Я использовал английский перевод "Войны и мира" в качестве входных данных. Разница во времени (процессорное время) редукторов составила около 20%.

Вот командная строка, которую я использовал для измерения времени:

./mapper.py < war_and_peace.txt | sort | time ./reducer.py > /dev/null

Учитывая, что первый редуктор намного проще и что для сортировки входных данных редукторов требуется время (что, вероятно, съедает эти 20%), мой вопрос: почему hadoop sort вводит редукторы ? Существуют ли проблемы, для которых вход сортируемых редукторов является более значительным, чем в Word Count? ( Обратите внимание: Я понимаю, что выходные данные каждого преобразователя должны быть отсортированы, чтобы сбалансировать нагрузку редукторов. Мой вопрос касается мотивации объединения пар ключ-значение, поступающих от различных преобразователей. вместо того, чтобы просто добавлять их.)

1 Ответ

0 голосов
/ 28 января 2019

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

...