HDFS中的块为什么如此大?

23

有人可以解释一下这个计算并给出一个清晰的解释吗?

一个快速的计算表明,如果寻道时间约为10毫秒,传输速率为100 MB/s,要使寻道时间占传输时间的1%,我们需要将块大小设为100 MB左右。默认值实际上是64 MB,尽管许多HDFS安装使用128 MB块。随着新一代磁盘驱动器的传输速度增长,这个数字将继续向上修订。

3个回答

36

一个数据块将被作为一个在磁盘上连续的信息存储,这意味着完全读取它所需的总时间是定位它的时间 (查找时间) + 读取其内容而无需进行更多的查找的时间,即 sizeOfTheBlock / transferRate = transferTime

如果我们保持比率 seekTime / transferTime 很小 (在文本中接近0.01),这意味着我们从磁盘读取数据的速度几乎与磁盘所施加的物理限制一样快,因此花费在查找信息上的时间最少。

这很重要,因为在 MapReduce 作业中,我们通常遍历(读取)整个数据集(由 HDFS 文件或文件夹或一组文件夹表示)并对其进行逻辑处理,所以既然我们必须花费全部的 transferTime 来从磁盘输出所有的数据,让我们尝试通过大块读取来减少查找和读取所花费的时间,因此数据块的大小很大。

在更传统的磁盘访问软件中,通常不会每次读取整个数据集,因此我们宁愿在较小的块上花费更多的时间进行查找,而不是浪费时间传输过多不需要的数据。


这是一个很好的回复。感谢您的快速答复。但有一个小问题:由于寻道时间为10毫秒,这意味着读取100MB数据块需要10毫秒。在1秒钟内,它将能够寻找100个数据块(100 * 100MB)。它已经寻找了100000MB的数据,但在此期间只传输了100MB的数据,剩下的9900MB仍然需要传输。所以我的观点是,即使我们尽可能快地寻找,仍然必须坐等待。请问您能否澄清一下? - Kumar
13
寻道时间是我们在读取任何数据之前需要花费的时间,粗略来说,这是将读取头移动到磁盘上物理存储数据所需的时间(加上其他类似的开销)。参见这里:http://en.wikipedia.org/wiki/Hard_disk_drive_performance_characteristics#Seek_time为了连续读取存储的100MB数据,我们需要花费10ms+100Mb/(100Mb/s)=1.01s。因此,大部分时间实际上是用于读取数据,只有很少一部分时间用于寻道。如果这同样的100M以10个块的形式存储,则会花费10*10ms+100Mb/(100Mb/s)=2s - Svend
明白了,Svend。非常感谢您的快速响应。 - Kumar
这是一个很好的解释,与我看过的其他链接相比。 - redeemed
我只是出于好奇来到这里,但我得到了有史以来最清晰的解释之一。恭喜! - aran

2

因为100mb被分成了10个块,所以你需要进行10次寻道,并且每个文件的传输速率为(10/100)mb/s。 (10ms*10) + (10/100mb/s)*10 = 1.1秒,这比1.01秒要长。


-2

由于100mb被分成10个块,每个块只有10mb,因为它是HDFS。那么应该是10*10ms + 10mb/(100Mb/s)=0.1s+ 0.1s=0.2s甚至更短的时间。


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