【问题标题】:How does Hadoop decide to distribute among buckets/nodes?Hadoop 如何决定在桶/节点之间分配?
【发布时间】:2026-02-07 10:05:01
【问题描述】:
我是 Map/Reduce 和 Hadoop 框架的新手。
我在单机上运行 Hadoop 程序(用于试用)。
我有 n 个输入文件,我想要这些文件中的单词摘要。
我知道 map 函数返回键值对,但是如何调用 map 呢?
在每个文件上一次还是在每个文件的每一行上一次?我可以配置它吗?
假设每个键都调用“reduce”是否正确?
【问题讨论】:
标签:
hadoop
mapreduce
distributed-computing
hadoop-partitioning
【解决方案1】:
为一个 InputSplit(或简称为 split) 调用映射,您在 MR 工作中使用的 InputFormat 负责创建这些分裂。根据 InputFormat 中的逻辑,它可以是一行、多行、一个完整的文件等等。例如,默认的 InputFormat,即 TextInputFormat 包,由 单行组成。
是的,您可以通过更改您正在使用的 InputFormat 来配置它。
与特定键对应的所有值都组合在一起,多个键被划分为分区,整个分区进入reducer进行进一步处理。因此,与特定 key 对应的所有值都由单个 reducer 处理,但单个 reducer 可以获取多个 key。
【解决方案2】:
在 Hadoop MR 框架中,作业跟踪器为每个 InputSplit 创建一个映射任务,由您的作业指定的 InputFormat 确定。每个分配给 map 任务的 Inputsplit 都由 RecordReader 进一步处理,以生成 map 函数的输入键/值对。 RecordReader 生成的每个键/值对都会调用 map 函数。
对于默认的InputFormat,即TextInputFormat,输入分割将是单个HDFS块,将由单个地图任务处理,RecordReader将处理一个在块内一次一行并生成键/值对,其中键是文件中行开头的字节偏移量,值是将传递给映射函数的行内容。
reducer 的数量取决于用户的作业配置,所有具有相同 key 的键/值对都被分组,并将发送到按 key 排序的单个 reducer,但同时单个 reducer 也可以处理多个 key。
有关 InputFormat 和自定义的更多详细信息,请参阅此 YDN 文档:
http://developer.yahoo.com/hadoop/tutorial/module5.html#inputformat