Block是文件块,HDFS中是以Block为单位进行文件的管理的,一个文件可能有多个块,每个块默认是3个副本,这些块分别存储在不同机器上。块与文件之前的映射关系会定时上报Namenode。HDFS中一个块的默认大小是64M,其大小由参数dfs.block.size控制。这里面先引申几个问题出来:

问题1:块大小要怎么设置为一个合理值,过大设置和过小设置有什么影响?

问题2:如果一个文件小于所设置的块大小,实际占用空间会怎样?

问题3:一个Namenode最多能管理多少个块,什么时候会达到瓶颈?

针对这些问题,后面会展开介绍,这里还是先关注下架构方面。针对块方面,有几个单位概念需要弄清楚: Block、Packet和Chunk。Block上面有描述,Packet和Chunk如下:

1 Packet: 其比块要小很多,可以理解为Linux操作系统最小盘块概念,一般为64KB,由参数dfs.write.packet.size控制,是client向Datanode写入数据的粒度,即client向Datanode写数据时不是一次以Block为单位写的,而是被分成若干Packet,放入pipeline顺序追加写入到Block中,示意图如下:

2 Chunk: 比Packet更小,是针对Packet数据校验粒度来设计的,一般是512B,由参数io.bytes.per.checksum控制,同时还带有一个4B的校验值,所以可以认为一个Chunk是516B

上面说到Chunk是针对数据校验的,那一个Packet有多少个chunk校验呢,如果Packet默认是64KB, 那计算公式为:chunk个数=64KB/516B=128。也就是对于一个Packet来说,数据值与校验值比例大概为128:1, 对于一个块来说,假设是64M,会对应512KB的校验文件。

Packet的示意图中还一个Header信息,实际存储的是Packet的元数据信息,包括Packet在block中的offset, 数据长度,校验编码等。

HDFS块设计原则

有人可能会问,集群存储有大文件也有小文件,那块大小该如何设计呢,这里应该要考虑2个准则:

1.减少内存占用:对于Namenode来说,单机内存毕竟有限,文件块越多,元数据信息越大,占用内存越多,如果文件数量级很大的话,单机将无法管理;

2.减少硬盘寻道时间: 数据块在硬盘为连续存储,对于普通SATA盘,随机寻址较慢, 如果块设置过小,一个文件的块总数会越多,意味着硬盘寻址时间会加长,自然吞吐量无法满足要求;如果块设置过大,一方面对于普通盘来说IO性能也比较差,加载时会很慢,另一方面,块过大,对于多副本来说,在副本出问题时,系统恢复时间越长。

所以设置合理的块大小也很重要,一般来说根据集群的需求来设定,比如对于使用到HBase的场景,一般数据量会比较大,块不宜设置太小,参考值一般为128MB或256MB,这样能尽量避免频繁块刷写和块元数据信息的膨胀;对于存储小文件的场景,如图片,块可设置成默认64MB大小,一个块中存储多个图片文件,后面会详细介绍。

参考文章:

https://www.cnblogs.com/ballwql/p/8944025.html

Hadoop上小文件如何存储?的更多相关文章

  1. 【大数据系列】hadoop上传文件报错_COPYING_ could only be replicated to 0 nodes

    使用hadoop上传文件 hdfs dfs -put  XXX 17/12/08 17:00:39 WARN hdfs.DFSClient: DataStreamer Exception org.ap ...

  2. hadoop上传文件失败解决办法

    hadoop上传文件到web端hdfs显示hadoop could only be replicated to 0 nodes instead of 1解决办法 错误状态:在hadoop-2.7.2目 ...

  3. Hadoop对小文件的解决方式

    小文件指的是那些size比HDFS的block size(默认64M)小的多的文件.不论什么一个文件,文件夹和block,在HDFS中都会被表示为一个object存储在namenode的内存中, 每一 ...

  4. Hadoop合并小文件的几种方法

    1.Hadoop HAR 将众多小文件打包成一个大文件进行存储,并且打包后原来的文件仍然可以通过Map-Reduce进行操作,打包后的文件由索引和存储两大部分组成: 缺点: 一旦创建就不能修改,也不支 ...

  5. Hadoop上传文件时报错: could only be replicated to 0 nodes instead of minReplication (=1)....

    问题 上传文件到Hadoop异常,报错信息如下: org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /home/inpu ...

  6. hadoop上传文件报错

    19/06/06 16:09:26 INFO hdfs.DFSClient: Exception in createBlockOutputStream java.io.IOException: Bad ...

  7. Hadoop上传文件的报错

    baidu了很多,都说防火墙,datanode没有正常启动的问题,可是检查了都是正常,后来还是在老外的网站上找到了解决的方法 修改了/etc/security/limits.conf文件,上传成功 这 ...

  8. hadoop上传文件失败报错(put: Cannot create file/eclipse.desktop._COPYING_. Name node is in safe mode.)

    解决办法: 离开安全模式方法:执行以下命令即可 bin/hadoop  dfsadmin -safemode leave 若不处理安全模式的话,web服务无法启动,dfsadmin report结果异 ...

  9. 如何利用Hadoop存储小文件

    **************************************************************************************************** ...

随机推荐

  1. 将HTML5封装成android应用APK

    借鉴了网上很多的教程终于是把整个过程走通了,最主要的还是墙的问题.... 先是要搭建环境(每一步都要检查,确保安装正确): 1.安装 nodejs 淘宝镜像: npm install -g cnpm ...

  2. MacOS入门

    原文池建强的blog 对普通用户来说,用好Mac主要有三点: 1.理解OSX的基本结构和特点 2.掌握多手势和快捷键(少量即可,多多益善) 3.用好工具 一.理解OSX的基本结构和特点 Mac OS ...

  3. PHP 基础语法介绍

    PHP 语法 PHP 脚本在服务器上执行,然后将纯 HTML 结果发送回浏览器. 基本的 PHP 语法 PHP 脚本可以放在文档中的任何位置. PHP 脚本以 <?php 开始,以 ?>  ...

  4. IDEA、maven创建webapp项目

      maven官方入门指南:http://maven.apache.org/guides/getting-started/index.html 推荐跟着官方文档学习噢~   IDEA.maven创建w ...

  5. .Net Core 3.0下AOP试水~~

    昨天躺了一下3.0的依赖注入的雷 今天顺势把AOP做了一下调整,比如自动化的AOP注入 默认的Program里面的CreateHostBuilder方法增加一行 public static IHost ...

  6. swift基础_ set get方法 理解

    swift中重写set get方法是这样的. 先定义一个变量,当调用set方法的时候,系统会有一个newValue, 将newValue赋值给我们定义的变量,然后从get方法返回去. swift中一般 ...

  7. Flink状态妙用

    本文主要介绍福布湿在flink实时流处理中,state使用的一些经验和心得.本文默认围观的大神已经对flink有一定了解,如果围观过程中发现了有疑问的地方,欢迎在评论区留言. 1. 状态的类别 1.1 ...

  8. Android Studio--家庭记账本(三)

    点击右上角可以实现将花费以折线图的形式显示出来.同时将同一天的花费自动计算.暂时还没有加x,y轴 ChartsActivity.java: package com.example.family; im ...

  9. 深度学习模型调优方法(Deep Learning学习记录)

    深度学习模型的调优,首先需要对各方面进行评估,主要包括定义函数.模型在训练集和测试集拟合效果.交叉验证.激活函数和优化算法的选择等. 那如何对我们自己的模型进行判断呢?——通过模型训练跑代码,我们可以 ...

  10. 注重代码习惯,Python零基础从这本书籍开始!

    笨办法学 Python是Zed Shaw 编写的一本Python入门书籍.适合对计算机了解不多,没有学过编程,但对编程感兴趣的朋友学习使用.这本书以习题的方式引导读者一步一步学习编 程,从简单的打印一 ...