我理解HDFS中小文件和小块大小的缺点。我试图了解默认的64/128 MB块大小背后的基本原理。是否存在大块大小(例如2GB)的任何缺点。我读到的值大于引起问题的值,我还没有挖掘出细节。
我看到的块尺寸过大的问题(请纠正我,可能部分或全部这些问题并非真实存在) -
当数据节点出现故障时,可能会出现复制1 Gig文件的问题 - 这需要群集传输整个文件。当我们考虑单个文件时,这似乎是一个问题 - 但如果我们有更小的块大小说128 MB(我认为涉及更多的开销),我们可能不得不传输许多较小的文件
可能会麻烦地狱手。大块可能最终会与每个映射器结束,从而减少可能的映射器数量。但如果我们使用较小的分割尺寸,这不应该是一个问题吗?
当我发现这可能是一个问题时,这听起来很愚蠢但我以为我会把它扔掉 - 因为namenode事先并不知道文件的大小,所以有可能因为它没有足够的磁盘空间用于新块(考虑到大块的大小可能是1-2 Gigs),因此考虑一个不可用的数据节点。但可能只是通过减少特定块的块大小来巧妙地解决这个问题(这可能是一个糟糕的解决方案)。
块大小可能取决于用例。我基本上想找到问题的答案 - 是否存在大块大小设置可能会造成伤害的情况/用例?
感谢任何帮助。提前谢谢。
答案 0 :(得分:2)
我对hadoop上的高端集群进行了广泛的性能验证,我们将块大小从64兆升变为2GB。要回答这个问题:想象一下需要处理小文件的工作量,比如Megs的10。在这种情况下,您认为哪种块大小会更高效 - 64MEg或1024Meg?
对于大文件的情况,那么大块大小倾向于更好的性能,因为映射器的开销不可忽略。