赞
踩
1:文件系统是基于硬盘之上的一个文件管理的工具
2:我们用户操作文件系统可以和硬盘进行解耦
1:分布式文件系统
2:将我们的数据存放在多台电脑上存储
3:HDFS是mapreduce计算的基础
为各类分布式运算框架提供数据存储服务
1:读取效率
2:如果文件特别大会超出单机的存储范围
1:如果文件特别大会超出单机的存储范围
2:数组可以拆分和组装,源文件不会受到影响
对字节数组进行切分
按照数组的偏移量将数据连接
1:当前数据存储在数组中的绝对路径
2:数组都会有索引,可以快速定位到数据的位置
1:不管文件的的大小,所有的文件都是由字节数组构成
2:如果我们要切分文件,就是将一个字节数组分成多份
3:我们将切分后的数据拼接到一起,数据可以继续使用
4:我们需要根据数据的偏移量将他们重新拼接到一起
(1):数据计算的时候简化问题的复杂度
进行分布式算法设计的时候,数据不统一,算法很难设计
(2):数据拉取的时候时间相对一致
(3):通过偏移量就知道这个块的位置
(4):相同文件,分成的数据块大小应该相等
128MB-512MB
Hadoop是专为从单一服务器到上千台机器扩展,每个机器都可以提供本地计算和存储。HDFS作为Hadoop生态中的一员,将数据分布式存储
分而治之,将大文件,大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析
基本概念
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.关闭资源
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。