我对map/reduce和hadoop框架还比较陌生。我在一台机器上运行一个hadoop程序(用于尝试)。我有n个输入文件,我想从这些文件中总结一些单词。我知道map函数返回键值对,但map是如何调用的?每个文件一次还是每个文件的每行一次?我可以配置它吗?假设每个键都调用“reduce”是正确的吗?
vawmfj5a1#
一个inputsplit(简称split)调用一个map,您在mr作业中使用的inputformat负责将这些split装箱。它可以是一行、多行、一个完整的文件等等,这取决于inputformat中的逻辑。例如,默认的inputformat,即textinputformat包含一行的拆分板条箱。是的,您可以通过更改您正在使用的输入格式来配置它。所有对应于一个特定键的值都被聚集在一起,多个键被划分成多个分区,整个分区交给一个reducer进行进一步的处理。因此,与特定键对应的所有值都由一个reducer处理,但是一个reducer可以得到多个键。
pbpqsu0x2#
在hadoop mr框架中,作业跟踪器为每个inputspilt创建一个map任务,该任务由作业指定的inputformat确定。分配给map任务的每个inputspilt都由recordreader进一步处理,为map函数生成输入键/值对。为recordreader生成的每个键/值对调用map函数。对于默认的inputformat,即textinputformat,输入分割将是单个hdfs块,该块将由单个map任务处理,recordreader将在块内一次处理一行,并生成键/值对,其中key是文件中行起始的字节偏移量,value是将传递给map函数的行内容。还原器的数量取决于用户的作业配置,具有相同键的所有键/值对都被分组,并将发送到按键排序的单个还原器,但同时单个还原器也可以处理多个键。有关inputformat和自定义它的更多详细信息,请参阅此ydn文档:
http://developer.yahoo.com/hadoop/tutorial/module5.html#inputformat
2条答案
按热度按时间vawmfj5a1#
一个inputsplit(简称split)调用一个map,您在mr作业中使用的inputformat负责将这些split装箱。它可以是一行、多行、一个完整的文件等等,这取决于inputformat中的逻辑。例如,默认的inputformat,即textinputformat包含一行的拆分板条箱。
是的,您可以通过更改您正在使用的输入格式来配置它。
所有对应于一个特定键的值都被聚集在一起,多个键被划分成多个分区,整个分区交给一个reducer进行进一步的处理。因此,与特定键对应的所有值都由一个reducer处理,但是一个reducer可以得到多个键。
pbpqsu0x2#
在hadoop mr框架中,作业跟踪器为每个inputspilt创建一个map任务,该任务由作业指定的inputformat确定。分配给map任务的每个inputspilt都由recordreader进一步处理,为map函数生成输入键/值对。为recordreader生成的每个键/值对调用map函数。
对于默认的inputformat,即textinputformat,输入分割将是单个hdfs块,该块将由单个map任务处理,recordreader将在块内一次处理一行,并生成键/值对,其中key是文件中行起始的字节偏移量,value是将传递给map函数的行内容。
还原器的数量取决于用户的作业配置,具有相同键的所有键/值对都被分组,并将发送到按键排序的单个还原器,但同时单个还原器也可以处理多个键。
有关inputformat和自定义它的更多详细信息,请参阅此ydn文档:
http://developer.yahoo.com/hadoop/tutorial/module5.html#inputformat