gpt4 book ai didi

file - Hadoop:将文件或文件路径发送到 map reduce 作业

转载 作者:可可西里 更新时间:2023-11-01 14:50:19 24 4
gpt4 key购买 nike

假设我有 N 个文件要使用 hadoop map-reduce 处理,让我们假设它们很大,远远超过 block 大小并且只有几百个。现在我想处理这些文件中的每一个,让我们假设字数统计示例。

我的问题是:创建一个输入为包含每个文件路径的文本文件的 map-reduce 作业与将每个文件直接发送到 map 函数(即连接所有文件)之间有什么区别并将它们插入不同的映射器[编辑]

这些都是有效的方法吗?它们有什么缺点吗?

感谢您的及时回答,我已经详细描述了我的问题,因为我的抽象可能遗漏了一些重要主题:

我的应用程序在 Hadoop HDFS 上有 N 个小文件,我只需要处理每个文件。所以我使用映射函数将 python 脚本应用于每个文件(实际上是图像 [我已经查看了那里的所有 hadoop 图像处理链接]),我知道小文件问题,典型的建议是将较小的文件分组,这样我们就避免了移动文件的开销(基本建议使用序列文件或创建自己的数据结构,如 HIPI 的情况)。

这让我想知道我们不能告诉每个映射器查找他本地的文件并对其进行操作吗?

我还没有找到解决该问题的方法,这就是为什么我正在考虑将文件路径发送到每个映射器或它自己的文件。

为每个图像集合创建路径名列表似乎没问题,但正如评论中所述,我松开了数据局部性属性。

现在,当我查看 hadoop 流接口(interface)时,它提到不同的部分基于通常用于文本文件的 stdin 和 stdout 进行通信。这就是我感到困惑的地方,如果我只是发送路径名列表,这应该不是问题,因为每个映射器只会尝试查找分配给它的图像集合。但是当我查看字数统计示例时,输入是文件,然后在映射器和 之间拆分,所以那时我很困惑是否应该将图像连接成组,然后像发送这些连接组一样将文本文档发送到不同的映射器,或者如果我应该连接图像,将它们留在 hadoop HDFS 中,然后将它们的路径传递给映射器 ...我希望这是有道理的...也许我完全离开这里...

再次感谢!

最佳答案

两者都有效。但是后者会产生额外的开销并且性能会下降,因为您正在谈论将所有文件连接成一个文件并将其提供给仅 1 个映射器。如果这样做,您将违背 Hadoop 的最基本原则之一,即 parallelism。并行性使 Hadoop 如此高效。

仅供引用,如果你真的需要这样做,你必须在你的 InputFormat 类中将 isSplittable 设置为 false,否则框架将拆分文件(基于你的 InputFormat ).

而就输入路径而言,你只需要给出输入目录的路径即可。此目录中的每个文件都将在没有人为干预的情况下进行处理。

HTH


响应您的修改:

我想你有点误解了这一点。您不必担心本地化。 Hadoop 负责这一点。你只需要运行你的工作,数据就会在它所在的节点上被处理。文件的大小与它无关。你不必告诉制图员任何事情。过程是这样的:

您将工作提交给 JT。 JT 指示在具有作业所需数据 block 的节点上运行的 TT 启动映射器。如果槽被其他进程占用,则在具有数据 block 的其他节点上也会发生同样的事情。

关于file - Hadoop:将文件或文件路径发送到 map reduce 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17417940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com