我是 Map/Reduce 和 Hadoop 框架的新手。我在单台机器上运行 Hadoop 程序(用于试用)。我有 n 个输入文件,我想要这些文件中的单词摘要。我知道 map 函数返回键值对,但是 map 是如何调用的呢?在每个文件上一次还是在每个文件的每一行上一次?我可以配置它吗?
假设每个键都调用“减少”是否正确?
我是 Map/Reduce 和 Hadoop 框架的新手。我在单台机器上运行 Hadoop 程序(用于试用)。我有 n 个输入文件,我想要这些文件中的单词摘要。我知道 map 函数返回键值对,但是 map 是如何调用的呢?在每个文件上一次还是在每个文件的每一行上一次?我可以配置它吗?
假设每个键都调用“减少”是否正确?
为一个InputSplit(或简称拆分)调用映射,这是您在 MR 作业中使用的InputFormat的职责,用于创建这些拆分。根据 InputFormat 中的逻辑,它可以是一行、多行、一个完整的文件等等。例如,默认的 InputFormat,即TextInputFormat由单行组成的拆分箱。
是的,您可以通过更改您正在使用的 InputFormat 来配置它。
与特定键对应的所有值都被组合在一起,多个键被划分为分区,整个分区进入减速器进行进一步处理。因此,与特定键对应的所有值都由单个减速器处理,但单个减速器可以获取多个键。
在 Hadoop MR 框架中,作业跟踪器为每个InputSplit创建一个映射任务,由您的作业指定的InputFormat确定。每个分配给 map 任务的Inputsplit都由RecordReader进一步处理,以生成 map 函数的输入键/值对。为RecordReader生成的每个键/值对调用 map 函数。
对于默认InputFormat ,即TextInputFormat,输入拆分将是单个 HDFS 块,将由单个映射任务处理,RecordReader将在块内一次处理一行并生成键/值对,其中键是文件中行开头的字节偏移量, value 是将传递给 map 函数的行的内容。
reducer 的数量取决于用户的作业配置,所有具有相同 key 的键/值对都被分组,并将发送到按 key 排序的单个 reducer,但同时单个 reducer 也可以处理多个 key。
有关InputFormat和自定义的更多详细信息,请参阅此 YDN 文档:
http://developer.yahoo.com/hadoop/tutorial/module5.html#inputformat