通常hadoop分割文件并将每个分割发送到每台机器,但是我希望让每台机器处理同一个文件(不是文件的分割),然后将结果发送到reduce,在reduce过程中它将所有结果相加。我该怎么做?有人能帮我吗?
gab6jxml1#
你的问题是你有不止一个问题。你想做什么:产生一些随机样本总和样本我只是把它们分解成两个独立的,简单的Map/缩略图。生成随机样本的mapreduce。一秒钟分别对每个样本求和。现在可能有一个聪明的方法可以一次完成这一切,但是除非你有一些不寻常的限制,否则我会很惊讶它是否值得额外的复杂性。
41zrol4v2#
好 啊。。这可能不是确切的解决方案,但实现这一点的一个肮脏的方法是:套 FileInputFormat.setMaxInputSplitSize(job, size) 其中size参数的值必须大于可以使用 length() java方法 File 班级。它确保每个文件只有一个Map器,并且您的fie不会被分割。现在使用 MultipleInputs.addInputPath(job, input_path, InputFormat.class) 对于将在每台计算机上运行单个Map器的每台计算机。根据您的要求,减少功能不需要任何更改。
FileInputFormat.setMaxInputSplitSize(job, size)
length()
File
MultipleInputs.addInputPath(job, input_path, InputFormat.class)
**肮脏的部分在这里 MultipleInputs.addInputPath 需要唯一路径。因此,您可能需要将同一个文件复制到所需Map器的数量,并为它们指定唯一的名称,并将其提供给的参数 MultipleInputs.addInputPath . 如果您提供相同的路径,它将被忽略。
MultipleInputs.addInputPath
2条答案
按热度按时间gab6jxml1#
你的问题是你有不止一个问题。你想做什么:
产生一些随机样本
总和样本
我只是把它们分解成两个独立的,简单的Map/缩略图。生成随机样本的mapreduce。一秒钟分别对每个样本求和。
现在可能有一个聪明的方法可以一次完成这一切,但是除非你有一些不寻常的限制,否则我会很惊讶它是否值得额外的复杂性。
41zrol4v2#
好 啊。。这可能不是确切的解决方案,但实现这一点的一个肮脏的方法是:
套
FileInputFormat.setMaxInputSplitSize(job, size)
其中size参数的值必须大于可以使用length()
java方法File
班级。它确保每个文件只有一个Map器,并且您的fie不会被分割。现在使用
MultipleInputs.addInputPath(job, input_path, InputFormat.class)
对于将在每台计算机上运行单个Map器的每台计算机。根据您的要求,减少功能不需要任何更改。
**肮脏的部分在这里
MultipleInputs.addInputPath
需要唯一路径。因此,您可能需要将同一个文件复制到所需Map器的数量,并为它们指定唯一的名称,并将其提供给的参数MultipleInputs.addInputPath
. 如果您提供相同的路径,它将被忽略。