在Hadoop中读取文件时的seek()数量?

时间:2014-08-12 03:34:35

标签: hadoop hdfs

我想确保我正确地理解这个概念:

在Hadoop the Definite Guide中,声明:“设计文件系统时的目标始终是减少与要传输的数据量相比的搜索次数。”在本声明中,作者指的是Hadoop逻辑块的“seek()”,对吧?

我在想,无论Hadoop块大小有多大(64MB或128MB或更大),底层文件系统(例如ext3 / fat)的物理块(通常为4KB或8KB)的查找次数无论Hadoop块大小的大小,都必须执行相同的操作。

示例:为了简化数字,假设基础文件系统块大小为1MB。我们想要读取大小为128MB的文件。如果Hadoop块大小为64MB,则该文件占用2个块。阅读时有128个寻求。如果Hadoop块大小增加到128MB,则文件系统执行的搜索次数仍为128.在第二种情况下,Hadoop将执行1次搜索而不是2次。

我的理解是否正确?

如果我是正确的,只有非常大的文件才能观察到通过增加块大小来提高性能,对吧?我认为,对于1~GB大小范围内的文件,将搜索次数从~20次搜索(64MB块大小)减少到~10次搜索(128MB块大小)不应该有很大的不同,对吗?

1 个答案:

答案 0 :(得分:0)

您是正确的,增加文件系统块大小将提高性能。 Linux要求块大小小于或等于页面大小。 x86页面大小限制为4K;因此,即使文件系统可以支持更大的块大小,您可以使用的最大块大小为4K。大块大小和页面大小的性能优势非常显着:读/写系统调用的减少,旋转延迟和搜索的减少(不开始考虑SSD),更少的上下文切换,改进的缓存局部性,更少的TLB错过等等。这都是善良。

我根据磁盘使用模式分析了各种块大小的好处,并在某些情况下根据磁盘子系统预测了数量级的改进。这会将性能瓶颈转移到其他地方。

你是正确的,可以获得可观的性能提升。不幸的是,控制此类改进的某个工程师认为页面大小不大于4K。他嘲笑那些需要高性能的企业用户,这些用户需要大量同质的工作负载,并专注于在桌面或笔记本电脑系统上以交互方式运行的异构工作负载,而高性能并不重要。