所有Map处理同一个文件?

r9f1avp5  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(267)

通常hadoop分割文件并将每个分割发送到每台机器,但是我希望让每台机器处理同一个文件(不是文件的分割),然后将结果发送到reduce,在reduce过程中它将所有结果相加。我该怎么做?有人能帮我吗?

gab6jxml

gab6jxml1#

你的问题是你有不止一个问题。你想做什么:
产生一些随机样本
总和样本
我只是把它们分解成两个独立的,简单的Map/缩略图。生成随机样本的mapreduce。一秒钟分别对每个样本求和。
现在可能有一个聪明的方法可以一次完成这一切,但是除非你有一些不寻常的限制,否则我会很惊讶它是否值得额外的复杂性。

41zrol4v

41zrol4v2#

好 啊。。这可能不是确切的解决方案,但实现这一点的一个肮脏的方法是:
FileInputFormat.setMaxInputSplitSize(job, size) 其中size参数的值必须大于可以使用 length() java方法 File 班级。它确保每个文件只有一个Map器,并且您的fie不会被分割。
现在使用 MultipleInputs.addInputPath(job, input_path, InputFormat.class) 对于将在每台计算机上运行单个Map器的每台计算机。
根据您的要求,减少功能不需要任何更改。

**肮脏的部分在这里 MultipleInputs.addInputPath 需要唯一路径。因此,您可能需要将同一个文件复制到所需Map器的数量,并为它们指定唯一的名称,并将其提供给的参数 MultipleInputs.addInputPath . 如果您提供相同的路径,它将被忽略。

相关问题