2013-08-04 44 views
3

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

  1. 工作节点如何分割这个文件进行处理。不同的工作节点会分别处理341(1024/3)KB。或者一个工作人员节点将处理该文件。

  2. 如果我处理100个这样的文件。工作节点是否会将要处理的文件数量分配给它们?

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

回答

2

可能的答案,

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

与普通文件系统相比,Hadoop分布式文件系统(HDFS)通常具有更大的块大小,例如Windows中可用的NTFS和FAT。 HDFS中的块分散在具有复制的多个节点(机器)中,并且如果提供机架拓扑脚本,复制处理得更好,并且块更具策略性地防止数据丢失(例如,如果Hadoop在不知情的情况下将复制因子2相同的机架和整个机架失败,哎呀!一个好的策略可能是将一个块存储在一个机架中,将另一个复制块存储在不同的机架中)。按一个块的默认大小是64MB。所以,一个1 MB的文件可能会驻留在一个单独的块中,当然,这个文件将被复制到不同的节点中。通常情况下,单个Map可以在一个叫做split的东西上工作,它可以由一个或多个块组成。可能会有不同的地图可以处理的拆分。 TextInputFormat通常处理以endline作为分隔符的文本文件,并为每个分割块启动映射,大致为单个块的大小。为确保边界线的边界,分割大小可能略大于或小于块大小。底线,在正常情况下,您的1 MB的文件位于一个64 MB的单个块中,将由单个映射任务进行处理。

如果我处理100个这样的文件。工作节点是否会将要处理的文件数量分配给它们?

如果单独此类文件100在那里,有一个概率100 map任务将被调用,除非你使用类似的CombineInputFormat,可以为一个地图分割相结合,过程中的几个街区在一起。

另一种选择是将这100个文件合并成一个文件和进程。

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

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

注意(摘自here):

预测执行:与Hadoop的系统的一个问题是,通过 划分在很多节点的任务,有可能几缓慢 节点以限制其余的计划。例如,如果一个节点 有一个慢速磁盘控制器,那么它可能只读取其所有其他节点速度的10%。因此,当99个地图任务已完成时,系统仍在等待最终地图任务检查 ,这比其他所有节点花费的时间要长得多。

通过强制任务彼此独立运行,个人 任务不知道他们的输入来自哪里。任务信任Hadoop平台仅提供适当的输入。因此,同一输入可以并行处理多次,以利用机器能力上的差异。由于作业中的大多数任务即将结束,因此Hadoop平台将安排剩余任务的冗余副本跨多个节点,这些节点没有其他的 工作要执行。这个过程被称为投机执行。当 任务完成时,他们向JobTracker公布此事实。无论哪一个 任务副本首先完成成为权威副本。如果其他 副本被推测执行,Hadoop会告知TaskTracker到 放弃任务并放弃其输出。

+0

在第2点中,假设工人node1拥有所有要处理的100个文件,那么所有100个Map任务都位于Worker节点1中。 –

+1

@vaibhav:检查我添加的推测执行部分。在同一台机器或不同机器上为同一类型的多个块调用映射。无论哪一位先完成,都是赢家! –

相关问题