大数据分布式文件系统——HDFS
分布式文件系统
FS File System
1:文件系统是基于硬盘之上的一个文件管理的工具
2:我们用户操作文件系统可以和硬盘进行解耦
DFS Distributed File System
1:分布式文件系统
2:将我们的数据存放在多台电脑上存储
3:HDFS是mapreduce计算的基础
是什么
为各类分布式运算框架提供数据存储服务
文件切分思想
文件存放在一个磁盘上效率肯定是低的
1:读取效率
2:如果文件特别大会超出单机的存储范围
字节数组
1:如果文件特别大会超出单机的存储范围
2:数组可以拆分和组装,源文件不会受到影响
切分数据
对字节数组进行切分
拼接数据
按照数组的偏移量将数据连接
偏移量
1:当前数据存储在数组中的绝对路径
2:数组都会有索引,可以快速定位到数据的位置
数据存储原理
1:不管文件的的大小,所有的文件都是由字节数组构成
2:如果我们要切分文件,就是将一个字节数组分成多份
3:我们将切分后的数据拼接到一起,数据可以继续使用
4:我们需要根据数据的偏移量将他们重新拼接到一起
Block切分标准
1:拆分的数据块等大
(1):数据计算的时候简化问题的复杂度
????????进行分布式算法设计的时候,数据不统一,算法很难设计
(2):数据拉取的时候时间相对一致
(3):通过偏移量就知道这个块的位置
(4):相同文件,分成的数据块大小应该相等
2:数据块
HDFS中一旦文件被存储,数据不允许被修改
一般HDFS存储的都是历史数据。所以 将来Hadoop的mr都用来进行离线数据的处理
块的大小一旦文件上传之后就不允许被修改
128MB-512MB
Block的管理效率
需要专门给节点进行分工
作用
?Hadoop是专为从单一服务器到上千台机器扩展,每个机器都可以提供本地计算和存储。HDFS作为Hadoop生态中的一员,将数据分布式存储
为什么要用hdfs?
分而治之,将大文件,大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析
HDFS的优势
高容错
运行在廉价的机器上(商用机)
适合批处理
适合大数据的处理
1:.TB,甚至PB级数据
2:百万规模以上的文件数量
3:10K+节点规模
流式数据访问
缺点
不擅长低延迟数据访问
不擅长小文件的分区
不擅长并发写入,文件随机修改
基本概念
1:HDFS是用Java语言实现的、分布式的、可扩展的文件系统。
2:HDFS是Hadoop的三大核心(HDFS、MapReduce、YARN)和四大模块(Hadoop?Common、Hadoop?HDFS、Hadoop?MapReduce、Hadoop?YARN)之一。
3:HDFS主要应用于海量数据的存储。
4:HDFS的基本存储单位:块,块是最小的数据读写单位,默认存储块大小为128M。块的大小可以在配置文件hdfs-site.xml中修改。块的默认单位是Byte,每个块都有自己的全局唯一ID。HDFS就是以块为单位在集权服务器上分配存储的。
5:块的好处就是:一个文件的大小可以大于集群中任一磁盘容量;块适合于数据备份,极大的提高了集群的容错能力和可用性
分布式文件特点
1:高可靠:按位存储,就近原则分配数据,会把数据分配到离它最近的数据节点(DateNode)上。
2:高扩展:集群节点可以根据业务需求随时扩展和缩减。
3:高效性:可以在各个集群节点之间动态移动数据,保证集群各节点之间的动态平衡。
4:高容错:自动保存多个副本(默认3个,可自行修改),并且能够将失败的任务重新分配,解决故障,成本低。
5:不适合存储小文件
6:不适合低延迟的数据访问(多用于离线数据分析)
HDFS设计目标
1:故障检测和自动快速恢复是HDFS的核心架构目标。因为HDFS可能有成百上千的服务器组成,每一个组件都有可能出现故障。
2:相较于数据访问的反应时间,更注重数据访问的高吞吐量。HDFS被设计成用于批处理,而不是用户交互式的。
3:典型的HDFS文件大小是GB到TB的级别。所以,HDFS被调整成支持大文件(Large?Data?Sets)?。它应该提供很高的聚合数据带宽,一个集群中支持数百个节点,一个集群中还应该支持千万级别的文件。
HDFS组成架构
HDFS采用master/slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。
1:Namenode(NN):就是一个Master,是一个管理者
(1)管理HDFS的名称空间;
(2)配置副本策略;
(3)管理数据块(Block)映射信息;
(4)处理客户端读写请求。
2:DataNode:就是Slave。NameNode?下达命令,DataNode执行实际的操作。
(1)存储实际的数据块;
(2)?执行数据块的读/写操作
3:Client:就是客户端
(1)文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行上传;
(2)与NameNode交互,获取文件的位置信息;
(3)与DataNode交互,读取或者写入数据;
(4)Client提供一些命令来管理HDFS,比如NameNode格式化;
(5)Client可以通过一些命令来访问HDFS,比如对HDFS增删查改操作;
4:Secondary?NameNode:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。
(1)辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode?;
(2)在紧急情况下,可辅助恢复NameNode。
?????????????????
HDFS?文件块大小
HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数?(?dfs.blocksize)来规定,默认大小在Hadoop2.x/3.x版本中是128M,1.x版本中是64M
?
HDFS写入流程
宏观写入流程
微观写入数据流程
(1)客户端通过?Distributed?FileSystem?模块向?NameNode?请求上传文件,NameNode?检查目标文件是否已存在,父目录是否存在。
(2)NameNode?返回是否可以上传。
(3)客户端请求第一个?Block?上传到哪几个?DataNode?服务器上。
(4)NameNode?返回?3?个?DataNode?节点,分别为?dn1、dn2、dn3。
(5)客户端通过?FSDataOutputStream?模块请求?dn1?上传数据,dn1?收到请求会继续调用?dn2,然后?dn2?调用?dn3,将这个通信管道建立完成。
(6)dn1、dn2、dn3?逐级应答客户端。
(7)客户端开始往?dn1?上传第一个?Block(先从磁盘读取数据放到一个本地内存缓存),?以?Packet?为单位,dn1?收到一个?Packet?就会传给?dn2,dn2?传给?dn3;dn1?每传一个?packet?会放入一个应答队列等待应答。?(8)当一个?Block?传输完成之后,客户端再次请求?NameNode?上传第二个?Block?的服务?器。(重复执行?3-7?步)。
HDFS?读数据流程
1.客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址,并返回地址给客户端
2.挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据
3.DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以packet为单位校验)
4.客户端以packet为单位接收,先在本地缓存,然后写入目标文件
5.关闭资源
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!