map(String key, String value):
// key: document name
// value: document contents
for each word w in value:
EmitIntermediate(w, "1");
reduce(String key, Iterator values):
// key: a word
// values: a list of counts
int result = 0;
for each v in values:
result += ParseInt(v);
Emit(AsString(result));
Host短语向量:一个term vector是指出现在一个文档或者文档集合中的最重要的单词的<word, frequency>对列表。Map函数对每一个文档输出<hostname, term vector>(host是从该文档对应的url中抽取出来)。Reduce函数接受到一个给定host的所有文档的term vector。它将这些term vector合并,并扔掉不常出现的那些terms,然后输出一个最终的<hostname, term vector>对。
MapReduce用户指定他们期望的reduce task(也可以说输出文件)的数目R。任务产生的数据通过在中间结果的key上使用一个划分函数被划分开。系统提供一个使用hash的默认的划分函数(比如 “hash(key) mod R”)。然而在某些情况下,使用关于key的其他函数进行划分更有用。比如有时候输入是URL,我们希望来自相同host的输入可以存放在相同的输出文件上。为了支持这种情况,MapReduce库的用户必须提供一个特殊的划分函数。比如使用”hash(Hostname(urlkey)) mod R”作为划分函数,就可以让来自相同host的所有URL落在同一个输出文件上。