全方位揭秘!大数据从0到1的完美落地之HDFS块详解
HDFS块详解
传统型分布式文件系统的缺点
现在想象一下这种情况:有四个文件 0.5TB的file1,1.2TB的file2,50GB的file3,100GB的file4;有7个服务器,每个服务器上有10个1TB的硬盘。
在存储方式上,我们可以将这四个文件存储在同一个服务器上(当然大于1TB的文件需要切分),我们需要使用一个文件来记录这种存储的映射关系吧。用户是可以通过这种映射关系来找到节点硬盘相应的文件的。那么缺点也就暴露了出来:
第一、负载不均衡。
因为文件大小不一致,势必会导致有的节点磁盘的利用率高,有的节点磁盘利用率低。
第二、网络瓶颈问题。
一个过大的文件存储在一个节点磁盘上,当有并行处理时,每个线程都需要从这个节点磁盘上读取这个文件的内容,那么就会出现网络瓶颈,不利于分布式的数据处理。
HDFS的块
HDFS与其他普通文件系统一样,同样引入了块(Block)的概念,并且块的大小是固定的。但是不像普通文件系统那样小,而是根据实际需求可以自定义的。块是HDFS系统当中的最小存储单位,在hadoop2.0中默认大小为128MB(hadoop1.x中的块大小为64M)。在HDFS上的文件会被拆分成多个块,每个块作为独立的单元进行存储。多个块存放在不同的DataNode上,整个过程中 HDFS系统会保证一个块存储在一个数据节点上 。但值得注意的是,如果某文件大小或者文件的最后一个块没有到达128M,则不会占据整个块空间 。
我们来看看HDFS的设计思想:以下图为例,来进行解释。
HDFS的块大小
HDFS上的块大小为什么会远远大于传统文件?
- 目的是为了最小化寻址开销时间。
在I/O开销中,机械硬盘的寻址时间是最耗时的部分,一旦找到第一条记录,剩下的顺序读取效率是非常高的,因此以块为单位读写数据,可以尽量减少总的磁盘寻道时间。
HDFS寻址开销不仅包括磁盘寻道开销,还包括数据块的定位开销,当客户端需要访问一个文件时,首先从名称节点获取组成这个文件的数据块的位置列表,然后根据位置列表获取实际存储各个数据块的数据节点的位置,最后,数据节点根据数据块信息在本地Linux文件系统中找到对应的文件,并把数据返回给客户端,设计成一个比较大的块,可以减少每个块儿中数据的总的寻址开销,相对降低了单位数据的寻址开销
磁盘的寻址时间为大约在5~15ms之间,平均值为10ms,而最小化寻址开销时间普遍认为占1秒的百分之一是最优的,那么块大小的选择就参考1秒钟的传输速度,比如2010年硬盘的传输速率是100M/s,那么就选择块大小为128M。- 为了节省内存的使用率
一个块的元数据大约150个字节。1亿个块,不论大小,都会占用20G左右的内存。因此块越大,集群相对存储的数据就越多。所以暴漏了HDFS的一个缺点,不适合存储小文件。
为什么HDFS不适合存储小文件?
从存储能力出发(固定内存)
因为HDFS的文件是以块为单位存储的,且如果文件大小不到128M的时候,是不会占用整个块的空间的。但是,这个块依然会在内存中占用150个字节的元数据。因此,同样的内存占用的情况下,大量的小文件会导致集群的存储能力不足。
例如: 同样是128G的内存,最多可存储9.2亿个块。如果都是小文件,例如1M,则集群存储的数据大小为9.2亿*1M = 877TB的数据。但是如果存储的都是128M的文件,则集群存储的数据大小为109.6PB的数据。存储能力大不相同。从内存占用出发(固定存储能力)
同样假设存储1M和128M的文件对比,同样存储1PB的数据,如果是1M的小文件存储,占用的内存空间为1PB/1Mb150Byte = 150G的内存。如果存储的是128M的文件存储,占用的内存空间为1PB/128M150Byte = 1.17G的内存占用。可以看到,同样存储1PB的数据,小文件的存储比起大文件占用更多的内存。
块的相关参数设置
当然块大小在默认配置文件hdfs-default.xml中有相关配置,我们可以在hdfs-site.xml中进行重置
<property><name>dfs.blocksize</name><value>134217728</value><description>默认块大小,以字节为单位。可以使用以下后缀(不区分大小写):k,m,g,t,p,e以重新指定大小(例如128k, 512m, 1g等)</description>
</property><property><name>dfs.namenode.fs-limits.min-block-size</name><value>1048576</value><description>以字节为单位的最小块大小,由Namenode在创建时强制执行时间。这可以防止意外创建带有小块的文件降低性能。</description>
</property><property><name>dfs.namenode.fs-limits.max-blocks-per-file</name><value>1048576</value><description>每个文件的最大块数,由写入时的Namenode执行。这可以防止创建降低性能的超大文件</description>
</property>
块的存储位置
在hdfs-site.xml
中我们配置过下面这个属性,这个属性的值就是块在linux系统上的存储位置
<!-- 确定DFS数据节点应该将其块存储在本地文件系统的何处-->
<property><name>dfs.datanode.data.dir</name><value>file://${hadoop.tmp.dir}/dfs/data</value>
</property>
HDFS的优点
- 高容错性(硬件故障是常态):数据自动保存多个副本,副本丢失后,会自动恢复
- 适合大数据集:GB、TB、甚至PB级数据、千万规模以上的文件数量,1000以上节点规模。
- 数据访问: 一次性写入,多次读取;保证数据一致性,安全性
- 构建成本低:可以构建在廉价机器上。
- 多种软硬件平台中的可移植性
- 高效性:Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
- 高可靠性:Hadoop的存储和处理数据的能力值得人们信赖.
HDFS的缺点
- 不适合做低延迟数据访问:
HDFS的设计目标有一点是:处理大型数据集,高吞吐率。这一点势必要以高延迟为代价的。因此HDFS不适合处理用户要求的毫秒级的低延迟应用请求- 不适合小文件存取:
一个是大量小文件需要消耗大量的寻址时间,违反了HDFS的尽可能减少寻址时间比例的设计目标。第二个是内存有限,一个block元数据大内存消耗大约为150个字节,存储一亿个block和存储一亿个小文件都会消耗20G内存。因此相对来说,大文件更省内存。- 不适合并发写入,文件随机修改:
HDFS上的文件只能拥有一个写者,仅仅支持append操作。不支持多用户对同一个文件的写操作,以及在文件任意位置进行修改
全方位揭秘!大数据从0到1的完美落地之HDFS块详解相关推荐
- 全方位揭秘!大数据从0到1的完美落地之HDFS读写流程
数据流 读流程的详解 读操作: hdfs dfs -get /file02 ./file02 hdfs dfs -copyToLocal /file02 ./file02 FSDataInputStr ...
- 全方位揭秘!大数据从0到1的完美落地之HDFS的工作机制
HDFS的工作机制 开机启动Namenode过程 非第一次启动集群的启动流程 我们应该知道,在启动namenode之前,内存里是没有任何有关于元数据的信息的.那么启动集群的过程是怎样的呢?下面来叙述一 ...
- 全方位揭秘!大数据从0到1的完美落地之HDFS的体系结构
HDFS的体系结构 体系结构解析 HDFS采用的是master/slaves这种主从的结构模型来管理数据,这种结构模型主要由四个部分组成,分别是Client(客户端).Namenode(名称节点).D ...
- 全方位揭秘!大数据从0到1的完美落地之大数据简介
大数据简介 什么是大数据 最近几年,IT行业最火的名词中,少不了"大数据"."人工智能"."云计算"."物联网".& ...
- 全方位揭秘!大数据从0到1的完美落地之MapReduce实战案例(1)
案例一: MR实战之小文件合并(自定义inputFormat) 项目准备 需求 无论hdfs还是MapReduce,对于小文件都有损效率,实践中,又难免面临处理大量小文件的场景,此时,就需要有相应解决 ...
- 全方位揭秘!大数据从0到1的完美落地之Shuffle和调优
MapReduce高级 shuffle阶段 概述 MapReduce会确保每个reducer的输入都是按键排序的.从map方法输出数据开始.到作为输入数据传给reduce方法的过程称为shuffle. ...
- 全方位揭秘!大数据从0到1的完美落地之Hive自定义函数
自定义函数 自定义函数介绍 hive的内置函数满足不了所有的业务需求.hive提供很多的模块可以自定义功能,比如:自定义函数.serde.输入输出格式等.而自定义函数可以分为以下三类: 1)UDF:u ...
- 全方位揭秘!大数据从0到1的完美落地之Mysql介绍
导读 在大数据中,我们需要处理的数据来自不同的渠道,其中有一个很重要的渠道就是关系型数据库中存储的数据.在企业中,会把业务数据存储在关系型数据库中,一般以 MySQL 居多.另外,我们在后续的学习中需 ...
- 全方位揭秘!大数据从0到1的完美落地之Hive介绍
Hive定义 Hive是一个基于Hadoop的数据仓库工具,可以将结构化的数据文件映射成一张数据表,并可以使用类似SQL的方式来对数据文件进行读写以及管理.这套Hive SQL 简称HQL.Hive的 ...
最新文章
- notepad++及Scintilla
- 位图索引(bitmap index)冲突引起的TX锁争用
- python之datetime模块
- 设计一个串口服务器设备.《需求分析报告》,《项目开发,分布式多串口交换服务器的设计与实现...
- Jzoj5425 数论
- AnsiString用法(转)
- linux从哪里入侵电脑,linux入侵的基本命令网站安全 -电脑资料
- 开票接口系统能够解决的十大问题
- 流媒体服务器之 ZLMediaKit介绍
- 一个3D引擎Demo 源码
- COMSOL6.0软件安装说明+视频教程
- (原创)[短小精悍系列]RGB(RGI/RGV)颜色明度(亮度)计算公式 (又称灰度公式,彩色照片转黑白照片时能派上用场)
- 关于冒险岛,8090的不二游戏
- 实验一 Java编程基础
- Coder, 知道 《编码》吗?
- android-studio安装过程详解
- matlab中ct值直方图,【CT值与灰度值的总结】
- android speex AEC 回音消除
- 洽洽:百亿路上无“鲜”事
- S5PV210的定时器
热门文章
- 2019年大学热门专业有哪些?
- 大白菜装原版win7怎么装|大白菜win7原版安装教程
- C++中虚继承产生的虚基类指针和虚基类表,虚函数产生的虚函数指针和虚函数表
- contOS6 部署 lnmp、FTP、composer、ThinkPHP5、docker详细步骤
- PHP带头大哥关于学习的观点
- 双城记:京城走进海关、电力讲解决方案,泉城展开“X+Y”渠道招募
- 用Python解“求符合给定条件的整数集”题
- 7-3 求符合给定条件的整数集 (15 分)
- 基于PythonGUI实现的学生选课管理系统
- 【Python】实训7:航空公司客户价值分析(K-means聚类)