MapReduce Job 如何在 HDFS 上工作?

Posted

技术标签:

【中文标题】MapReduce Job 如何在 HDFS 上工作?【英文标题】:How does MapReduce Job work on HDFS? 【发布时间】:2014-06-03 01:29:11 【问题描述】:

所以我是整个大数据运动的新手,特别是 Hadoop。我想知道 HDFS 中的文件是否已经拆分,如果文件已经拆分,MapReduce 作业如何执行?例如,文本文件上的简单字数 MapReduce 作业。我的理解是,在 HDFS 中,文件将被分割并分布在数据节点上。字数统计作业是否适用于已经拆分的文件,还是它自己拆分文件?作为一名 mapreduce 程序员,不应该担心文件是如何拆分的吗?

作为后续,当 HDFS 进行文件拆分时,它是否使用任何定义的规则进行过滤和拆分?因此,例如,HDFS 是否知道按字母顺序划分块是电话簿,就像一个块中的所有 A 和另一个块中的所有 B 一样,等等?

对于这篇文章中的问题数量以及它们是否离题很抱歉。只是想在我浏览一些在线教程时进行一些澄清:) 感谢任何帮助!

【问题讨论】:

【参考方案1】:

作为开发人员,您无需担心手动拆分文件。它按大小拆分(默认为 64 MB)。在大小为 70MB 且默认块大小的文件上说 WordCount 示例。很简单——你得到 2 个映射器在两个分割上工作……你的减速器整理结果。

按内容拆分时,A-B-C ... AFAIK,这完全取决于块大小,而不是字符。根据字符拆分文件对您有什么好处吗?

【讨论】:

那么如果文件已经在HDFS中,WordCount还需要拆分文件吗?对于您的问题,一个优势可能是进行查询/查找会更有效。所以如果我想搜索名字“Jack”,它会去 J 所在的街区吗?但这可能不是 hadoop 的意义所在,因为它更多的是关于无组织的数据。 关于“WordCount 是否还需要拆分文件”的问题,答案是否定的。字数映射将被分配到要操作的文件块部分。【参考方案2】: 分割是根据输入文件的大小进行的,如果大于 64MB 则文件将被分割成块,所以最后 HDFS 将这些块存储到数据节点中。开发人员不必担心拆分是如何完成的。它是处理这个问题的框架。 Hadoop 不知道特定字母在文件中的起始位置,因此默认情况下,拆分是根据输入文件大小而不是内容完成的。

【讨论】:

【参考方案3】:

如果文件已经被拆分,MapReduce 作业如何执行?

在 HDFS 中,文件存储在块中(默认块大小为 64MB,您可以通过dfs.block.size 属性设置它)。如果文件大于块大小,则将文件拆分为等于或小于块大小的块。因此,如果 mapreduce 作业的输入文件大于块大小,则将其拆分。否则不是。是的,该作业在作为输入给出的所有文件上执行(无论是框架拆分文件还是您手动执行)

字数统计作业是否对已拆分的文件有效,或者是否有效 文件是自己拆分的吗?

文件被推送到 HDFS 后,它会将文件物理分解为块并将它们复制到数据节点。在运行 mapreduce 作业时,作业的 InputFormat 计算文件的输入拆分。输入拆分是合乎逻辑的。每个输入拆分都会运行一个映射任务。

因此,即使文件有多个部分(无论是手动拆分还是 HDFS 分块),在InputFormat 计算输入拆分后,作业也会在文件的所有部分上运行。

作为一名 mapreduce 程序员,不应该担心文件是如何获取的 分手?

通常,程序员不需要担心它。但是,了解 HDFS 如何拆分文件以及与之相关的问题/优势总是很好的。显然,如果您想根据自己的需要更改自定义 InputFormat,那么您需要知道。

当 HDFS 对文件进行拆分时,它是否使用任何已定义的规则进行过滤和拆分?

如果文件超过块大小,HDFS 会拆分文件,没有其他规则。如果您想根据任何定义的规则(如您提到的规则)进行输入拆分,那么您必须覆盖默认值。

PS:我认为您对 HDFS 块和输入拆分感到困惑。

【讨论】:

谢谢...这有助于澄清。总而言之,hdfs 块是文件的物理存储位置,输入拆分是合乎逻辑的,因为 mapreduce 将接收输入文件并划分文件/工作,而不用担心它们的物理存储位置。 是的。每次输入拆分都会产生一个新的地图任务。

以上是关于MapReduce Job 如何在 HDFS 上工作?的主要内容,如果未能解决你的问题,请参考以下文章

大数据技术之_05_Hadoop学习_04_MapReduce_Hadoop企业优化(重中之重)+HDFS小文件优化方法+MapReduce扩展案例+倒排索引案例(多job串联)+TopN案例+找博客

作业提交过程之HDFS&MapReduce

作业提交过程之HDFS&MapReduce

一个mapreduce同时加载读取多个文件的代码部分

大数据-hadoop-MapReduce计算流程

MapReduce编写的正确姿势