HDFS中的最佳块大小 - 大块大小会有害吗?

7
我了解HDFS中小文件和小块大小的缺点。我试图理解默认的64/128 MB块大小背后的原理。具有大块大小(例如2GB)是否存在任何缺点(我读到比这更大的值会引起问题,但我尚未深入研究其细节)。
我认为过大的块大小可能会出现以下问题(请纠正我,可能有些或所有这些问题实际上不存在)-
  1. 可能在数据节点失效时复制1 GB文件时会出现问题-这需要集群传输整个文件。如果我们使用较小的块大小(例如128 MB),则如果有很多较小的文件,则可能必须传输更多的文件。
  2. 可能会影响Mappers。大块可能会导致每个Mapper处理的数据量增加,从而减少了可能的Mapper数量。但是如果我们使用较小的拆分大小,则不应该成为问题。
  3. 当我想到这可能是一个问题时,它听起来很傻,但我仍然想提一下-由于NameNode事先不知道文件的大小,因此可能会认为某个数据节点不可用,因为它没有足够的磁盘空间用于新块(考虑到可能有1-2 GB的大块大小)。但也许它会通过减少特定块的块大小来巧妙地解决这个问题(这可能是一种不好的解决方案)。
块大小可能取决于用例。我基本上想找到一个答案,即大块大小设置是否会对某些情况/用例产生负面影响?
感谢您的帮助。提前致谢。

我猜这可能是在客户端之间传输文件的问题。我想如果大块出现故障,那将会很昂贵。 - Praneeth
1个回答

2
我对Hadoop上的高端集群进行了广泛的性能验证,我们将块大小从64兆变化到2GB。回答这个问题:想象一下需要处理小文件(比如几十兆)的工作负载。在这种情况下,哪种块大小会更具有性能优势 - 64兆还是1024兆?对于大文件来说,较大的块大小确实更倾向于更好的性能,因为映射器的开销不可忽略。

非常感谢您的回复。在您所描述的情况下,保持在64M是有意义的。但是,通过设置输入分片大小,这不是可以实现吗?当我想运行一个mapreduce作业将一些avro文件索引到SolR时,我开始研究这个问题。这些文件可能太大了。因此,我最终决定使用特定于文件的块大小。我想分享一些信息-在我的测试中,我将块大小从64M变化到115Gig。(并不是我想使用那么大的块大小)超过115G后,它会出错,因为它无法获得最小副本数1。这个数字应该是集群特定的。 - Praneeth
我想知道是否可以使用最大可能的块大小获得更高效的集群,然后使用输入分割大小来控制映射器的数量。 - Praneeth
是的,请保持块大小为64兆字节,适用于小文件,但对于仅处理较大文件的作业,请设置更高的最小分割大小。反之则不行,即使用大块大小,然后尝试使用小分割的映射器作业。 - WestCoastProjects
我们最终决定为每个文件使用自定义块大小。谢谢。 - Praneeth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接