这里写自定义目录标题
hdfs概述
- HDFS(Hadoop Distributed File System)
hadoop中的文件系统,用于存储文件。是分布式的,由多个服务器联合起来实现其功能。 - **使用场景:**适合一次写入多次读取的场景,不支持文件修改,但可追加
hdfs特点
-
1.高容错性
自动保存多个副本(默认3个),某一副本丢失后可自动恢复
-
2. 适合大数据处理
(1)数据规模:可处理达到PB级别的数据
(2)文本规模:可处理百万规模以上的文件数量
注:hdfs中文件在物理上是以block(块)为单位存储的(默认一块128M) -
3. 可构建在廉价机器上
hdfs组成架构
一个主/从架构。即一个NameNode(主机),多个datanode(从机,通常一个节点一个)。
-
1. NN(NameNode)
–管理数据块的映射(即保存元数据信息)
–处理客户端请求
–配置副本策略
–管理hdfs的命名空间 -
注: namenode内存中存储的是fsimage+edits
fsimage(镜像文件):元数据,文件系统的目录树,即各数据块的映射信息()
edits(编辑日志):fsimage之后针对文件系统修改的操作记录 -
2. 2NN(SecondaryNameNode)
–NN的助手,分担NN的工作量,定时从NN中获取fsimage+edits并进行合并,形成最新的fsimage并发给NN
–是NN的冷备,即NN挂掉时不能代替NN,因为始终缺了最新的edits那部分数据 -
3. DN(DataNode)
–存储数据块
–执行客户端请求
hdfs读写流程
(1)客户端写数据流程
-
– 客户端向NN发出上传文件请求
– NN检查后(是否已有重名文件;是否有写权限)回复客户端是否可上传
– 客户端收到可上传响应后向NN申请上传第一块数据
– NN返回数据块存入的位置,即DN信息– 客户端创建写入流
– 客户端向网络拓扑距离最近的节点请求建立传输通道
– 第一个节点收到请求后依次传给其他节点,并依次应答给客户端
– 客户端收到应答成功的信息后开始向第一个节点传输第一块数据(以数据包的形式),第一个节点将收到的数据先放入缓存,然后边写入 本地边向其他节点传输(备份)
– 数据传输完成后,客户端向NN请求上传第二块数据,依此类推,所有块传输完成后,客户端通知NN数据传输完成
– 客户端关闭写入流
(2)客户端读数据流程
- – 客户端向NN发出下载文件请求
– NN检查(文件是否存在;是否有读权限)通过后,将文件的位置信息(DN)返回给客户端
– 客户端拿到数据块位置信息后,打开数据读入流,与网络拓扑距离最近的DN节点建立通信并请求下载第一块数据
– DN节点就会将第一块数据返回给客户端(以数据包为单位)
– 客户端以包为单位接收,先在本地缓存,然后写入目标文件
– 依此类推,进入第二块数据的下载,流程同第一块
hdfs-NN和2NN工作机制(NameNode和SecondaryNameNode)
说明:
NN:是运行在内存中的(因为要随时访问并相应客户端请求),NN中存储fsimage和edits
2NN:用于定时合并NN中的镜像文件和编辑日志
工作机制
-
– 集群刚启动时,NN将磁盘中的镜像文件fsimage读入内存,加载最后的编辑日志edits(seen_txid中保存最后一个edits数字)中的更新操作,得到完整的数据;(即集群刚启动时NN就对镜像文件和编辑日志进行了一次合并)
– 当客户端对数据进行增删改后,NN就会将操作记录写入新的编辑日志edits
– 2NN每隔1分钟向NN请求一次checkpoint,检查是否需要合并;当:最新的编辑日志数据满了(100万条操作记录)或时间过了一个小时就需要合并– NN滚动创建一个新的edits文件(此后更新操作写入该文件),并将当前正在写的edits文件重命名和fsimage一起发给2NN
– 2NN将这两个文件加载到内存进行合并,形成最新的fsimage文件并发给NN
– NN用2NN发过来的fsimage替换当前内存中的fsimage文件
hdfs-DN工作机制(DataNode)
- – DN启动后会根据集群ID向NN注册自己的信息,并汇报自己所持有的数据块信息
– 之后DN每隔1小时向NN汇报自己所持有的数据块信息
– DN每3秒心跳一次,让NN知道自己还存活并带回NN给自己的命令
– 当NN超过10分30秒没有收到某个DN的心跳,就会认为该节点不可用