gpt4 book ai didi

hadoop - 为什么hadoop对reducer的输入进行排序?

转载 作者:行者123 更新时间:2023-12-02 22:02:34 25 4
gpt4 key购买 nike

我比较了以下两个 reducer 在 Word Count 问题上的时间性能。这些 reducer 的不同之处在于它们是否利用按键排序的输入。

Reducer 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])

Reducer 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])

两个 reducer 都使用了相同的映射器:
#!/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")

我用了 the English translation of "War and Peace"作为输入。 reducer 的时间性能(CPU 时间)差异约为 20%。

这是我用来测量时间的命令行:
./mapper.py < war_and_peace.txt | sort | time ./reducer.py > /dev/null

鉴于第一个 reducer 要简单得多,并且对 reducer 的输入进行排序需要时间(这可能会占用这 20%),我的问题是:为什么 hadoop 排序 reducer 的输入 ?是否存在被排序的 reducer 的输入比字数更重要的问题? ( 请注意: 我意识到需要对每个映射器的输出进行排序以平衡 reducer 的负载。我的问题是关于合并来自不同映射器的键值对的动机而不是简单地附加它们。)

最佳答案

这是我认为正确的答案(除非将这个问题标记为重复的人可以在他们找到的帖子中指出我的这个答案,否则他们应该感到羞耻)。这个问题忽略了内存方面。将键存储在字典中假设所有键都可以放入内存中,但通常情况可能并非如此。按键对 reducer 的输出进行排序允许一次只使用一个键。

关于hadoop - 为什么hadoop对reducer的输入进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54199771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com