HDFS和MapReduce如何处理小文件



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

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

  2. 如果我处理100个这样的文件。工作节点会在它们之间划分要处理的文件数量吗?

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

可能的答案,

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

Hadoop分布式文件系统(HDFS)通常比windows中的NTFS和FAT等普通文件系统具有更大的块大小。HDFS中的块分散在具有复制的多个节点(机器)上,并且如果提供机架拓扑脚本,复制处理得更好,块的位置也更具策略性,以防止数据丢失(例如,如果Hadoop在不知情的情况下将复制因子为2的块放在同一个机架中,而整个机架出现故障,哎呀!一个好的策略可能是将一个块存储在一个机架上,将另一个复制块存储在另一个机架)。默认情况下,一个块的大小为64MB。因此,1MB的文件可能位于单个块中,当然,它将在不同的节点之间复制。通常,一个Map处理一个称为拆分的东西,拆分可以由一个或多个块组成。可能存在不同贴图可以处理的拆分。TextInputFormat通常处理以换行符作为分隔符的文本文件,并为每个分割(大致相当于一个块的大小)生成映射。为确保端点线边界,拆分大小可能略大于或小于块大小的拆分大小。最重要的是,在正常情况下,您的1MB文件位于64MB的单个块中,将由单个映射任务处理。

如果我处理100个这样的文件。工作节点会在它们之间划分要处理的文件数量吗?

如果有100个单独的此类文件,则有可能调用100个映射任务,除非您使用类似CombineInputFormat的东西,它可以将多个块组合并处理在一起,作为映射的拆分。

另一种选择是,如果可能的话,将这100个文件合并为一个文件并进行处理。

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

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

注意(摘录自此处):

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

通过强制任务彼此隔离运行任务不知道它们的输入来自哪里。任务信任Hadoop平台来提供适当的输入。因此输入可以并行处理多次,以利用机器性能的差异。正如工作中的大多数任务最后,Hadoop平台将安排冗余拷贝跨几个没有其他任务的节点的剩余任务要执行的工作。这个过程被称为推测执行。什么时候任务完成后,他们会向JobTracker宣布这一事实。无论哪个任务的副本首先完成,成为最终副本。如果其他Hadoop告诉TaskTrackers放弃任务并放弃其输出。

相关内容

  • 没有找到相关文章