HDFS块大小的计算与设计规则

1.概述

hadoop集群中文件的存储都是以块的形式存储在hdfs中。

2.默认值

从2.7.3版本开始block size的默认大小为128M,之前版本的默认值是64M.

3.如何修改block块的大小?

可以通过修改hdfs-site.xml文件中的dfs.block.size对应的值。

<property>
                 <name>dfs.block.size</name>
                 <value>512000</value>
 </property>

注意:在修改HDFS的数据块大小时,首先停掉集群hadoop的运行进程,修改完毕后重新启动。
  
注意:blockSize必须是io.bytes.per.checksum大小(512K)的整数倍,否则会报错
“put: io.bytes.per.checksum(512) and blockSize(100000) do not match. blockSize should be a multiple of io.bytes.per.checksum”

4.block块大小设置规则

在实际应用中,hdfs block块的大小设置为多少合适呢?为什么有的是64M,有的是128M、256M、512呢?

首先我们先来了解几个概念:

1)寻址时间:HDFS中找到目标文件block块所花费的时间。

2)原理:文件块越大,寻址时间越短,但磁盘传输时间越长;文件块越小,寻址时间越长,但磁盘传输时间越短。

5.block不能设置过大,也不要能设置过小

1)如果块设置过大,一方面从磁盘传输数据的时间会明显大于寻址时间,导致程序在处理这块数据时,变得非常慢;另一方面,MapReduce中的map任务通常一次只处理一个块中的数据,如果块过大运行速度也会很慢。

2)如果设置过小,一方面存放大量小文件会占用NameNode中大量内存来存储元数据,而NameNode的内存是有限的,不可取;另一方面块过小,寻址时间增长,导致程序一直在找block的开始位置。因此,块适当设置大一些,减少寻址时间,那么传输一个有多个块组成的文件的时间主要取决于磁盘的传输速度。

6.多大合适呢?

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

2)经过前任的大量测试发现,寻址时间为传输时间的1%时,为最佳状态,所以最佳传输时间为:

10ms/0.01=1000s=1s

3)目前磁盘的传输速度普遍为100MB/s,最佳block大小计算:

100MB/s*1s=100MB

所以我们设置block大小为128MB.

4)实际中,磁盘传输速率为200MB/s时,一般设定block大小为256MB;磁盘传输速率为400MB/s时,一般设定block大小为512MB.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值