hadoop - 在 map reduce 的 reduce 端进行同机数据处理

标签 hadoop io mapreduce

Hadoop MapReduce 的一大优势是 Map 进程发生在它们操作的数据所在的同一台机器上(在可能的范围内)。但这对 Reduce 端来说可能是真的吗?例如,在 Map-only 作业的极端情况下,所有输出数据最终都与相应的输入数据位于同一台机器上(对吗?)。但在输出与输出有些相关的中间情况下,对输出进行分区并尽可能将其保存在同一台机器上似乎是合理的。

这可能吗?这已经发生了吗?

最佳答案

Reducers 的输入可以驻留在任何节点(本地或远程)上,而不必在它们运行的​​同一台机器上。当 Mappers 完成时,它们的输出被写入到它们运行的​​机器的本地 FS 上。一旦完成,即将运行 reduce 任务的机器就需要中间输出。这里要注意的一件事是,与特定键对应的所有值都进入同一个缩减器。因此,Reducers 的输入并不总是本地的,因为不同的键/值对集由运行在不同机器上的不同 Mappers 处理。

现在,在将 Mapper 输出发送到 Reducers 进行进一步处理之前,数据根据键进行分区,每个分区都进入一个 Reducer,该分区中的所有键/值对都由该 Reducer 处理。在此过程中,会发生大量数据混洗。因此,在 Reducers 的情况下无法维护数据局部性。

希望这能回答问题。

关于hadoop - 在 map reduce 的 reduce 端进行同机数据处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18755023/

相关文章:

c# - c# 应用程序的 oozie 调度

python - 使用带有 mongo-hadoop 和 python 的 hadoop 流式处理的空输出集合

java - 如何将两个字符串和一个 List<byte[]> 聚合为一个 byte[],然后提取它们

java - 创建更新程序

linux - 在 Bash 中循环文件的内容

Hadoop 0.2 : How to read outputs from TextOutputFormat?

hadoop - 是否可以将map-reduce的输出直接输出到多个Map文件?

hadoop - 超时导致sqoop导出失败

java - 带有.a​​ddCacheFile的Hadoop Mapreduce CompileError(使用外部Jar)

java - MapReduce 多个归约任务