所以我对整个大数据运动,尤其是hadoop,都是新手。我想知道hdfs中的文件是否已经被拆分,如果文件已经被拆分,mapreduce作业如何执行?例如,文本文件上的简单单词计数mapreduce作业。我的理解是,在hdfs中,文件将被分割并分布在数据节点上。word count作业是在已经分割的文件上工作,还是自己分割文件?作为一个mapreduce程序员,不应该担心文件是如何被分割的吗?
接下来,当hdfs执行文件的拆分时,它是否使用任何已定义的规则进行过滤和拆分?举个例子,这是一个电话簿,hdfs知道按字母顺序划分数据块吗,就像所有a在一个数据块中,所有b在另一个数据块中,依此类推?
很抱歉,在这篇文章中的问题太多,如果他们是远远偏离基地。只是想澄清一下,因为我通过一些在线教程:)任何帮助是感激的!
3条答案
按热度按时间ujv3wf0j1#
如果文件已被拆分,mapreduce作业如何执行?
在hdfs中,文件存储在块中(默认块大小为64mb,您可以通过
dfs.block.size
属性)。如果文件大于块大小,则将文件拆分为等于或小于块大小的块。因此,如果mapreduce作业的输入文件大于块大小,则将其拆分。否则就不是了。是的,作业在作为输入提供的所有文件上执行(无论框架是拆分文件还是手动拆分文件)word count作业是在已经分割的文件上工作,还是自己分割文件?
将文件推送到hdfs之后,它会将文件物理地分成块,并将它们复制到datanodes。运行mapreduce作业时
InputFormat
作业的属性计算文件的输入拆分。输入拆分是逻辑的。为每个输入分割运行一个Map任务。因此,即使一个文件有多个部分(无论是手动拆分还是hdfs分块),在
InputFormat
计算输入拆分,作业将在文件的所有部分上运行。作为一个mapreduce程序员,不应该担心文件是如何被分割的吗?
通常,程序员不需要担心它。然而,了解hdfs如何分割文件以及与之相关的问题/优势总是很好的。显然,如果你想改变
InputFormat
为了你的需要你需要知道。当hdfs执行文件的拆分时,它是否使用任何已定义的规则进行过滤和拆分?
如果文件超过了块大小,hdfs会分割文件,没有其他规则。如果您希望基于任何已定义的规则(如您提到的规则)进行输入拆分,则必须覆盖默认值。
ps:我想你把hdfs块和输入分割混淆了。
jw5wzhpr2#
作为开发人员,您不必担心手动拆分文件。它按大小拆分(默认为64 mb)。在一个大小为70mb、块大小为默认值的文件上使用wordcount示例。很简单-你有两个Map绘制员在两个分裂处工作。。。你的减速机会整理结果。
按内容拆分时,a-b-c。。。好吧,这完全取决于块的大小,而不是字符。根据字符分割文件对你有什么好处吗?
umuewwlo3#
分割是根据输入文件的大小来完成的,如果文件的大小大于64mb,那么文件将被分割成块,因此在最后hdfs将这些块存储到数据节点中。开发人员不必担心分割是如何完成的。它是处理这个问题的框架。
hadoop不知道特定的字母表在文件中的起始位置,因此默认情况下,拆分是基于输入文件的大小而不是内容来完成的。