HDFS的一些重要流程
该随笔记录HDFS学习过程中遇到的比较重要的几个过程,包括:HDFS启动流程、DataNode备份流程、流程、写流程、删除流程、HDFS合并流程。
这里都是从我的学习笔记中摘取出来的,如果哪里有误,还望不吝赐教。
1. 读流程
1)客户端发起RPC请求(RPC-Client)访问NameNode;
2)NameNode会查询元数据,找到这个文件存储位置对应的数据块的信息;
3)NameNode将文件对应的数据块的节点地址的全部或者部分放入一个队列中然后返回;
4)Client收到这个数据块对应的节点地址;
5)Client会从队列中取出第一个数据块对应的节点地址,会从这些节点地址中选择一个最近的节点进行读取;
6)将Block读取之后,对Block进行checksum/完整性验证,如果验证失败,说明数据块已损坏,那么Client会向NameNode发送信息说明该节点上的数据块损坏,然后从其他节点中再次读取这个数据块;
7)验证成功,则从队列中取出下一个Block的地址,然后继续读取;
8)当把这一次的文件全部读完之后,Client会向NameNode请求下一批Block的地址;
9)当文件读完之后,Clent向NameNode发送读取完成的信号,NameNode就会关闭对应的文件。
2. 写流程
1)客户端发起RPC请求(RPC-Client)访问NameNode;
2)NameNode接收请求,对请求进行验证,如该请求中的文件是否存在,权限验证;
3)如果验证通过,NameNode会确定文件的大小,计算分块的数量,分配对应的节点(一般会找磁盘空间相对空闲的节点),将节点地址放入队列中返回给客户端;
4)客户端收到地址后,从队列中依次取出节点地址,然后将数据块依次放入对应的节点中;
5)写完之后,客户端向NameNode发送写完数据的信号,NameNode会给客户端返回关闭文件的信号;
6)dataNode之间会通过管道进行自动备份,以保证复本的数量。
3. 删除流程
1)Client发起RPC请求(RPC-Client)到NameNode;
2)NameNode收到请求之后,会将这个操作记录到edits中,然后将该文件的元数据信息从内存中删掉,给客户端返回一个删除成功的信号;
3)客户端收到信号后,认为数据已经删除,关闭连接,实际上此时数据依然存在于DateNode中;
4)当DataNode下一次向NameNode发送心跳信号(接地状态,节点数据)时,NameNode就会检查这个DataNode中的数据;
5)如果发现DataNode中存在元数据中没有的记录,NameNode就会做出响应,命令DataNode删除对应的数据;
6)备份中的数据会通过管道进行同步(删除主节点中已经不存在的数据)。
4. DataNode备份流程
1)DataNode定时向NameNode发送心跳信息(3S),心跳信息中包含当前节点状态以及节点数据;
2)NameNode接收到心跳信息以后会检查这个DataNode中的文件信息(与NameNode中的元数据进行对比);
3)如果NameNode发现DataNode中不含元数据记录的文件,就会命令DataNode从其他节点进行备份;
4)如果发现DataNode中存在元数据中没有的记录,NameNode就会做出响应,命令DataNode删除对应的数据;
5. HDFS合并流程
NameNode中有3个文件:
fsimage:
存储元数据。但是注意fsimage中的元数据和内存中并不一致,也就意味着fsimage中的数据并不是实时数据。
edits:
记录HDFS的操作。对HDFS的操作,会:
1)首先将操作记录到edits文件中;
2)如果edits文件操作成功,那么将这个操作更新到内存中。
这么做的的目的是,保证每一步操作不会丢失。
3)当达到触发条件时,再将edits文件中的操作更新到fsimages中。
触发更新的条件:
1)文件大小:根据配置文件设置的edits log大小触发,fs.checkpoint.size默认64M;
2)时间间隔:根据配置文件设置的时间间隔:fs.checkpoint.period默认3600S;
3)重启HDFS:重启HDFS也会触发更新。
fstime:
记录上一次更新的时间;
将fsiamge文件与edits文件合并的流程如下:
1)当达到触发条件,将edits和fsimage通过网络拷贝到SecondaryNameNode中;
2)此时会在NameNode中生成一个edits.new文件用于记录合并期间的操作;
3)拷贝完成之后,fsimage就会将数据存储到SecondaryNameNode的内存中;
4)将edits的操作更新到SecondaryNameNode的内存中;
5)更新完成之后,将内存中的数据写入fsimage.ckpt文件中;
6)通过网络将fsimage.ckpt拷贝到NameNode中;
7)将fsimage.ckpt重命名为fsiamge,edits.new重命名为edits;
正因合并的机制,SecondaryNameNode虽然不是NameNode的热备份,但也能起到备份的作用,防止数据丢失。
6. HDFS启动流程
1)NameNode启动,合并edits和fsimage得到最新的fsimage;
2)NameNode等待DataNode的心跳,并根据DataNode报告的持有的Block的信息在内存中得到块和DataNode的映射关系,并在需要时复制和删除Block;
3)等到有足够数量的DataNode后,NameNode开始对外提供服务;
4)启动过程可能需要消耗一定的时间,这段时间内HDFS无法对外提供服务,称之为HDFS处于安全模式下。如果一直处于安全模式下可能是由于没有足够数量的DataNode启动,可以强制退出安全模式,但是不推荐这么做,可能会损坏元数据。
HDFS的一些重要流程的更多相关文章
- HDFS写入和读取流程
HDFS写入和读取流程 一.HDFS HDFS全称是Hadoop Distributed System.HDFS是为以流的方式存取大文件而设计的.适用于几百MB,GB以及TB,并写一次读多次的场合.而 ...
- HDFS追本溯源:HDFS操作的逻辑流程与源码解析
本文主要介绍5个典型的HDFS流程,这些流程充分体现了HDFS实体间IPC接口和stream接口之间的配合. 1. Client和NN Client到NN有大量的元数据操作,比如修改文件名,在给定目录 ...
- Hadoop(8)-HDFS的读写数据流程以及机架感知
1. HDFS的写数据流程 1.客户端通过fs模块向NameNode申请文件上传,NameNode检查请求是否合法,如用户权限,目标文件是否已存在,父目录是否存在等等 2.NameNode返回是否可以 ...
- HDFS的上传流程以及windows-idea操作文件上传的注意
HDFS的上传流程 命令:hdfs dfs -put xxx.wmv /hdfs的文件夹 cd进入到要上传文件的当前目录,再输入hdfs命令上传,注意-put后tab可以自动补全, 最后加上你要上传到 ...
- hadoop学习笔记(六):HDFS文件的读写流程
一.HDFS读取文件流程: 详解读取流程: Client调用FileSystem.open()方法: 1 FileSystem通过RPC与NN通信,NN返回该文件的部分或全部block列表(含有blo ...
- hadoop之 解析HDFS的写文件流程
文件是如何写入HDFS的 ? 下面我们来先看看下面的“写”流程图: 假如我们有一个文件test.txt,想要把它放到Hadoop上,执行如下命令: 引用 # hadoop fs - ...
- HDFS 读/写数据流程
1. HDFS 写数据流程 客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件, NameNode 检查目标文件是否已存在,父目录是否存在: NameNo ...
- HDFS数据流——读数据流程
HDFS读数据流程 假设客户端请求下载文件/user/atguigu/ss.avi,HDFS读数据流程如下: 1)客户端向namenode请求下载文件,namenode通过查询元数据,找到文件所有文件 ...
- HDFS数据流——写数据流程
剖析HDFS文件写入 假设文件ss.avi共200m,其写入HDFS指定路径/user/atguigu/ss.avi流程如下: 1)客户端向namenode请求上传文件到指定路径,namenode通过 ...
随机推荐
- LP-KPN
LP-KPN 网络结构 网络解析 1. 网络结构中绿色星星标志 公式.其实就是用预测出来的核在原图片经过Laplacian pyramid decomposes 后的图片上进行卷积运算.所以应该使用p ...
- maven打包并上传到nexus3私服
之前搭了个maven私服,接下来则要充分利用这个私服的优势上传自己的jar包了. 我们先在nexus上创建一个用来上传jar包的角色,并通过此角色创建若干帐号用来给开发者上传包.如图是我自己的配置: ...
- 硬件笔记之MacMini开启HiDPI
0x00 概述 先科普一下,有关retina和HiDPI那点事 ,Macmini在2k显示器的显示太小了,看起来费眼,没办法,苹果原生HiDPI是支持4k显示器的,所以以后买显示器,直接买4k的一步到 ...
- JDK一键部署, 新添加进度条
JDK部署, 脚本与JDK安装包放在同一目录 然后执行 source ./jdk.sh 稍等进度条100%即可 #******************************************* ...
- MYSQL数据库常用操作命令
1.连接MYSQL: mysql -h 主机地址 -u 用户名 -p 2.修改密码: 安装后第一次登录使用: mysqladmin (因为没有初始密码) 修改原密码: mysqladmin -u ro ...
- iOS绘制坐标图,折线图-Swift
坐标图,经常会在各种各样的App中使用,最常用的一种坐标图就是折线图,根据给定的点绘制出对应的坐标图是最基本的需求.由于本人的项目需要使用折线图,第一反应就是搜索已经存在的解决方案,因为这种需求应该很 ...
- Price Channel Breakout 交易系统简价及源码
Price Channel Breakout 交易系统简价及源码 既然这个版有交易系统的模型报告,小弟先在这裡野人献曝一下,把目前正在用的系统拿来请大家批评指教一下. ================ ...
- 机器学习总结(八)决策树ID3,C4.5算法,CART算法
本文主要总结决策树中的ID3,C4.5和CART算法,各种算法的特点,并对比了各种算法的不同点. 决策树:是一种基本的分类和回归方法.在分类问题中,是基于特征对实例进行分类.既可以认为是if-then ...
- 动态 DP 学习笔记
不得不承认,去年提高组 D2T3 对动态 DP 起到了良好的普及效果. 动态 DP 主要用于解决一类问题.这类问题一般原本都是较为简单的树上 DP 问题,但是被套上了丧心病狂的修改点权的操作.举个例子 ...
- 根据不同浏览器判断OCX插件是否安装
最近项目进入到了验收阶段,需要兼容不同的浏览器,海康的Demo写了一个判断插件是否成功安装的函数,但是经过测试,只在IE浏览器下有效果,在其他的浏览器下面会出现Bug,现在需要写一个通用的方法,在不同 ...