HDFS和MapReduce如何处理小文件

时间:2013-08-04 18:58:33

标签: hadoop mapreduce hdfs

我已经在Windows平台上安装了Hadoop和其他2个工作节点(总共我有3个节点)。出于演示目的,我正在处理大约1兆字节的单个文件。

  1. 工作节点如何划分此文件以进行处理。不同的工作节点是否会处理341(1024/3)KB。或者单个工作节点将处理该文件。

  2. 如果我处理100个这样的文件。工作节点会将要处理的文件数除以它们吗?

  3. 如果我处理大约100MB的单个文件。

1 个答案:

答案 0 :(得分:2)

可能的答案,

  

工作节点如何划分此文件以进行处理。将   不同的工作节点每个处理341(1024/3)KB。或者一个   工作节点会处理文件吗?

与普通文件系统(如Windows中可用的NTFS和FAT)相比,Hadoop分布式文件系统(HDFS)通常具有更大的块大小。 HDFS中的块通过复制分散在多个节点(机器)上,如果提供了机架拓扑脚本,则可以更好地处理复制,并且更有策略地阻止数据丢失(例如,如果Hadoop在不知不觉中放置了具有复制因子2的块,同一个机架和整个机架都出现故障,哎呀!一个好的策略可能是将一个块存储在一个机架中,将其他复制块存储在另一个机架中。默认大小为一个块是64MB。因此,一个1 MB的文件可能会驻留在一个块中,当然,它将被复制到不同的节点上。通常,单个Map处理称为拆分的东西,它可以由一个或多个块组成。可能存在不同地图可以处理的分裂。 TextInputFormat通常处理带有endline作为分隔符的文本文件,并为每个分割触发映射,这大致是单个块的大小。为了确保端线边界,分割尺寸可以略大于或小于块尺寸。最重要的是,在正常情况下,您的1 MB文件驻留在64 MB的单个块中,将由单个地图任务处理。

  

如果我处理100个这样的文件。工作节点会将要处理的文件数除以它们吗?

如果存在100个单独的此类文件,则有可能会调用100个地图任务,除非您使用CombineInputFormat之类的内容可以组合并将多个块一起处理为地图的分割。

另一种选择是将这100个文件(如果可能)合并到一个文件和进程中。

  

如果我处理一个大约100MB的文件?

同样,假设您将块大小设置为64MB,带有TextInputFormat的100MB文件应该大致由2个map任务处理。正如我所说的不同的InputFormat,可以用不同的方式处理事情!

注意(摘自here):

  

推测执行: Hadoop系统的一个问题是by   将任务划分为多个节点,可能会有一些缓慢   节点对程序的其余部分进行速率限制。例如,如果一个节点   有一个慢速磁盘控制器,然后它可能只读取其输入   所有其他节点的速度的10%。所以99个地图任务已经完成了   完成后,系统仍在等待最终的地图任务检查   in,这比其他所有节点都要长得多。

     

通过强制任务彼此独立运行,个人   任务不知道他们的输入来自何处。任务信任Hadoop   平台,只提供适当的输入。因此,同样的   输入可以多次并行处理,以便利用   机器能力的差异。因为工作中的大部分任务都是   即将结束,Hadoop平台将安排冗余副本   剩下的任务跨越几个没有其他节点的节点   努力工作。此过程称为推测执行。什么时候   任务完成后,他们向JobTracker宣布这一事实。任何   完成任务的副本首先成为最终副本。如果是其他   副本正在推测性地执行,Hadoop告诉TaskTrackers   放弃任务并放弃他们的产出。