到底怎么设定HDFS文件块(block)大小??

最近看到这个面试问题,CSDN搜了半天也没有确切答案,查询资料思考后总结如下:

我们在HDFS中存储数据是以块(block)的形式存放在DataNode中的,块(block)的大小可以通过设置dfs.blocksize来实现;

在Hadoop2.x的版本中,文件块的默认大小是128M,老版本中默认是64M;

目录

一、为什么HDFS中块(block)不能设置太大,也不能设置太小?

二、 HDFS中块(block)的大小为什么设置为128M?

寻址时间:HDFS中找到目标文件块(block)所需要的时间。

原理:

文件块越大,寻址时间越短,但磁盘传输时间越长;

文件块越小,寻址时间越长,但磁盘传输时间越短。

 

一、为什么HDFS中块(block)不能设置太大,也不能设置太小?
1. 如果块设置过大,

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

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

2. 如果块设置过小,

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

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

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

 

二、 HDFS中块(block)的大小为什么设置为128M?
1. HDFS中平均寻址时间大概为10ms;

2. 经过前人的大量测试发现,寻址时间为传输时间的1%时,为最佳状态;

    所以最佳传输时间为10ms/0.01=1000ms=1s

3. 目前磁盘的传输速率普遍为100MB/s;

    计算出最佳block大小:100MB/s x 1s = 100MB

    所以我们设定block大小为128MB。

 

ps:实际在工业生产中,磁盘传输速率为200MB/s时,一般设定block大小为256MB

       磁盘传输速率为400MB/s时,一般设定block大小为512MB

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值