hdfs的block为什么设置成128M

1. 如果块设置过大

  • 从磁盘传输数据的时间会明显大于寻址时间,导致程序在处理这块数据时,变得非常慢;

  • mapreduce中的map任务通常一次只处理一个块中的数据,如果块过大运行速度也会很慢。

2. 如果块设置过小

  • 存放大量小文件会占用NameNode中大量内存来存储元数据,而NameNode的内存是有限的,不可取;

  • 文件块过小,寻址时间增大,导致程序一直在找block的开始位置。

因而,块适当设置大一些,减少寻址时间,传输一个由多个块组成的文件的时间主要取决于磁盘的传输速率。

3. 为什么默认是128M

  • HDFS中平均寻址时间大概为10ms;

  • 经过前人的大量测试发现,寻址时间为传输时间的1%时,为最佳状态;
    所以最佳传输时间为10ms/0.01=1000ms=1s

  • 目前磁盘的传输速率普遍为100MB/s;
    计算出最佳block大小:100MB/s x 1s = 100MB
    所以我们设定block大小为128MB。

实际在工业生产中,
磁盘传输速率为200MB/s时,一般设定block大小为256MB
磁盘传输速率为400MB/s时,一般设定block大小为512MB
posted @ 2019-07-12 13:50  IsabellaSu  阅读(766)  评论(0编辑  收藏  举报