在HDFS配置中,选择合适的block大小是一个关键决策,它直接影响到系统的性能、存储效率和可靠性。以下是关于HDFS block大小选择的详细指南:
为什么HDFS中块(block)不能设置太大,也不能设置太小?
- 设置过大的问题:
- 从磁盘传输数据的时间会明显大于寻址时间,导致程序处理数据变慢。
- MapReduce中的map任务通常一次只处理一个块中的数据,块过大运行速度也会很慢。
- 设置过小的问题:
- 存放大量小文件会占用NameNode中大量内存来存储元数据。
- 文件块过小,寻址时间增大,导致程序一直在找block的开始位置。
HDFS中块(block)的大小为什么设置为128M?
- 寻址时间与传输时间的关系:HDFS中平均寻址时间大概为10ms,经过测试发现,寻址时间为传输时间的1%时,为最佳状态,所以最佳传输时间为1s。
- 磁盘传输速率的影响:目前磁盘的传输速率普遍为100MB/s,计算出最佳block大小为100MB。为了方便计算和保证数据传输的完整性,通常设定block大小为128MB。
实际应用中的考虑因素
- 磁盘传输速率:如果磁盘传输速率为200MB/s,一般设定block大小为256MB;磁盘传输速率为400MB/s时,一般设定block大小为512MB。
- MapReduce处理效率:块设置过小会导致Map任务个数过多,影响处理效率;块设置过大则可能导致集群资源无法充分利用。
不同版本之间的差异
- Hadoop 1.x与2.x的默认值:Hadoop 1.x的块大小默认是64MB,而Hadoop 2.x的默认块大小是128MB。
综上所述,HDFS中block大小的选择需要综合考虑磁盘传输速率、MapReduce处理效率以及系统整体性能等因素。