HDFS块大小默认为什么是64MB(或者是128MB)
HDFS块大小默认为什么是64MB(或者是128MB)
1 HDFS的设计特点?
可以进行超大文件存储
对商用硬件要求不高
式数据访问:适合一次写入,多次读出的场景,适合用来做数据分析,并不适合用来做网盘应用等文件系统。
HDFS只支持单个写入者,而且文件的写入只能以“添加”方式在文件末尾写数据。
因为namenode的原因,不适合大量小文件的存储。
数据访问的延迟相对较高,不适合进行低延迟处理
对商业硬件要求低,可以再廉价的机器上运行。
2 HDFS 文件块大小问题?
块的大小设置原则:最小化寻址开销。
HDFS的块比磁盘的块大(磁盘的块一般为512字节),其目的是为了最小化寻址开销
然而真正实际开发中要把block设置的远大于128MB,比如存储文件是1TB时,一般把Block大小设置成512MB.但是也不能任意设置的太大,比如200GB一个,因为在MapReduce的map任务中通常一次只处理一个块中数据(切片大小默认等于block大小),如果设置太大,因为任务数太少(少于集群中的节点数量),那么作业的运行速度就会慢很多,此外比如故障等原因也会拖慢速度。
如何设置块的大小?
主要由以下考虑:
减少硬盘寻道时间(disk seek time):
减少Namenode内存消耗:
Map崩溃问题:
监管时间问题:
问题分解问题:
约束Map输出:
详细说明
参考:HDFS块大小默认为什么是64MB(或者是128MB)
主要由以下考虑:
减少硬盘寻道时间(disk seek time)
HDFS设计前提是支持大容量的流式数据操作,所以即使是一般的数据读写操作,涉及到的数据量都是比较大的。假如数据块设置过少,那需要读取的数据块就比较多,由于数据块在硬盘上非连续存储,普通硬盘因为需要移动磁头,所以随机寻址较慢,读越多的数据块就增大了总的硬盘寻道时间。当硬盘寻道时间比io时间还要长的多时,那么硬盘寻道时间就成了系统的一个瓶颈。合适的块大小有助于减少硬盘寻道时间,提高系统吞吐量。传输一个由多个块的组成的文件取决于磁盘传输速率。如寻址时间约为10ms,传输速率为100MB/S,为了使寻址时间仅占传输时间的1%,块的大小设置约为100MB,默认大小是64MB,现在在实际身缠中都是128MB了,随着新一代磁盘去东区传输速率的提升,块的大小将会被设置的更大。
减少Namenode内存消耗
对于HDFS,他只有一个Namenode节点,他的内存相对于Datanode来说,是极其有限的。然而,namenode需要在其内存FSImage文件中中记录在Datanode中的数据块信息,假如数据块大小设置过少,而需要维护的数据块信息就会过多,那Namenode的内存可能就会伤不起了。
Map崩溃问题:
系统需要重新启动,启动过程需要重新加载数据,数据块越大,数据加载时间越长,系统恢复过程越长。
监管时间问题:
主节点监管其他节点的情况,每个节点会周期性的把完成的工作和状态的更新报告回来。如果一个节点保持沉默超过一个预设的时间间隔,主节点记录下这个节点状态为死亡,并把分配给这个节点的数据发到别的节点。对于这个“预设的时间间隔”,这是从数据块的角度大概估算的。假如是对于64MB的数据块,我可以假设你10分钟之内无论如何也能解决了吧,超过10分钟也没反应,那就是死了。可对于640MB或是1G以上的数据,我应该要估算个多长的时间内?估算的时间短了,那就误判死亡了,分分钟更坏的情况是所有节点都会被判死亡。估算的时间长了,那等待的时间就过长了。所以对于过大的数据块,这个“预设的时间间隔”不好估算。
问题分解问题:
数据量大小是问题解决的复杂度是成线性关系的。对于同个算法,处理的数据量越大,它的时间复杂度也就越大。块的大小太大的话,一个map任务处理一个块,那任务数就变少了,作业运行速度也就变慢了。
约束Map输出:
在Map Reduce框架里,Map之后的数据是要经过排序才执行Reduce操作的。想想归并排序算法的思想,对小文件进行排序,然后将小文件归并成大文件的思想
参考:
- HDFS文件系统中存储块为何设置为64MB或者128MB或256MB?
- 为什么du命令与xwindows或者ls显示的大小不一致
- 为什么HDFS一个块的大小是64MB
- 为什么linux kernel默认的页面大小是4K,而不是4M或8M?(转载一篇文章)
- 为什么linux默认都没有MP3和视频或者连FLASH都没有呢?
- 为什么linux kernel默认的页面大小是4K,而不是4M或8M?
- Oracle 块大小(默认8KB)
- 在malloc函数中为什么常用sizeof来设定内存分配的大小?
- 浮点数的大小比较为什么不能用等号?
- iOS实现头像选取(照相或者图片库)、大小等比缩放、生成圆形头像 (转)
- 图片默认等比例大小
- 为什么文件的占用块比实际大小多那么多
- 格式化一个文件的大小(size),或者说是格式化一个app的大小(size)
- 使用java代码打开关闭浏览器(指定的浏览器或者计算机默认的浏览器)
- Python陷阱:为什么不能用可变对象作为函数的默认参数值
- 解决LogCat为什么没有显示信息或者一开始有显示但很快就没有了
- 如何设置 Windows 默认命令行窗口大小和缓冲区大小
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时为什么会回到home界面或者到前一个界面,然后才会跳转到当前activity
- JS 取控件或者DIV的尺寸与大小,
- [ADO]为什么在其他机器上连接ORA数据库失败或者出现乱码呢?