有人可以解释一下这个计算并给出一个清晰的解释吗?
一个快速的计算表明,如果寻道时间约为10毫秒,传输速率为100 MB/s,要使寻道时间占传输时间的1%,我们需要将块大小设为100 MB左右。默认值实际上是64 MB,尽管许多HDFS安装使用128 MB块。随着新一代磁盘驱动器的传输速度增长,这个数字将继续向上修订。
一个数据块将被作为一个在磁盘上连续的信息存储,这意味着完全读取它所需的总时间是定位它的时间 (查找时间) + 读取其内容而无需进行更多的查找的时间,即 sizeOfTheBlock / transferRate = transferTime
。
如果我们保持比率 seekTime / transferTime
很小 (在文本中接近0.01),这意味着我们从磁盘读取数据的速度几乎与磁盘所施加的物理限制一样快,因此花费在查找信息上的时间最少。
这很重要,因为在 MapReduce 作业中,我们通常遍历(读取)整个数据集(由 HDFS 文件或文件夹或一组文件夹表示)并对其进行逻辑处理,所以既然我们必须花费全部的 transferTime
来从磁盘输出所有的数据,让我们尝试通过大块读取来减少查找和读取所花费的时间,因此数据块的大小很大。
在更传统的磁盘访问软件中,通常不会每次读取整个数据集,因此我们宁愿在较小的块上花费更多的时间进行查找,而不是浪费时间传输过多不需要的数据。
因为100mb被分成了10个块,所以你需要进行10次寻道,并且每个文件的传输速率为(10/100)mb/s。 (10ms*10) + (10/100mb/s)*10 = 1.1秒,这比1.01秒要长。
由于100mb被分成10个块,每个块只有10mb,因为它是HDFS。那么应该是10*10ms + 10mb/(100Mb/s)
=0.1s+ 0.1s
=0.2s
甚至更短的时间。
10ms+100Mb/(100Mb/s)=1.01s
。因此,大部分时间实际上是用于读取数据,只有很少一部分时间用于寻道。如果这同样的100M以10个块的形式存储,则会花费10*10ms+100Mb/(100Mb/s)=2s
。 - Svend