第四天 hadoop HDFS上传下载原理
HDFS上传下载原理
- 一、HDFS数据流向模型(上传和下载)
- 1>网络拓扑结构和机架感知
- <2>上传操作数据流向模型
- <3>下载操作数据流向模型
- 二、NameNode和StandbyNameNode的工作流程(重点)
- <1>NameNode的工作流程/StandbyNameNode的工作流程
- <2>fsimage镜像文件和edits编辑日志
- <3>编辑日志的滚动操作
- <4>checkpoint
- checkpoint 概念
- checkpoint 过程
- checkpoint 设置
- <5>名称节点故障,数据恢复
- 三、DataNode的工作流程(重点)
- <1>流程图
- <2>安全模式
一、HDFS数据流向模型(上传和下载)
1>网络拓扑结构和机架感知
1. 网络拓扑节点距离:两个节点到达共同父节点的距离和
2. 机架感知 ( 副本节点的选择 )例如:500个节点,上传数据jdk.tar.gz ,设定副本数为3, 根据机架感知,副本数据存储节点的选择。
<2>上传操作数据流向模型
1. client向namenode发送上传请求(将本地e:/myfile.txt上传到HDFS)
2. NameNode返回上传请求结果
3. clinet接受到可以传递的结果,继续请求NameNode具体上传的数据节点信息
4. NameNode返回备份数据的节点信息给client
5. client可所有的数据节点建立连接,并传递数据
6. client返回上传完毕结果给NameNode
<3>下载操作数据流向模型
1. client向namenode发送下载请求(下载/home/zhangsan/myfile.txt)
2. namenode将当前数据的元数据返回给client(client需要下载的数据的信息,数据存储在哪个节点)
3. 就近选择一台数据节点
4. client向数据节点发送下载请求
5. 数据节点返回下载许可
6. 以package数据包下载数据,先在client缓冲,然后持久化磁盘
二、NameNode和StandbyNameNode的工作流程(重点)
<1>NameNode的工作流程/StandbyNameNode的工作流程
- SNN检查是否达到checkpoint条件:离上一次checkpoint操作是否已经有一个小时,或者HDFS已经进行了100万次操作。
- SNN检查达到checkpoint条件后,将该namespace以fsimage.ckpt_txid格式保存到SNN的磁盘上,并且随之生成一个MD5文件。然后将该fsimage.ckpt_txid文件重命名为fsimage_txid
- 然后SNN通过HTTP联系ANN。
- . ANN通过HTTP从SNN获取最新的fsimage_txid文件并保存为fsimage.ckpt_txid,然后也生成一个MD5,将这个MD5与SNN的MD5文件进行比较,确认ANN已经正确获取到了SNN最新的fsimage文件。然后将fsimage.ckpt_txid文件重命名为fsimage_txit。
通过上面一系列的操作,SNN上最新的FSImage文件就成功同步到了ANN上。
<2>fsimage镜像文件和edits编辑日志
fsimage镜像文件:存储HDFS中最新的文件信息,元数据,所有文件和目录信息
edits编辑日志: 用户的操作查看:fsimage镜像文件和edits编辑日志命令1:查看镜像文件hdfs oiv -p 文件的类型 -i 镜像文件 -o 转换后文件的路径例如:hdfs oiv -p XML -i fsimage00024235 -o /home/zhangsan/fs1.xml命令2:查看编辑日志hdfs oev -p 文件的类型 -i 镜像文件 -o 转换后文件的路径例如:hdfs oiv -p XML -i edits00024235 -o /home/zhangsan/edits1.xml案例:清空数据,格式名称节点
<3>编辑日志的滚动操作
有新的用户操作和数据时编辑日志滚动实现编辑日志的手动:hdfs dfsadmin -rollEdits
<4>checkpoint
checkpoint 概念
NameNode的metadata信息在启动后会加载到内存,由于加载到内存的数据很不安全,断电后就没有了,因此必须对内存中存放的信息做持久化处理。
Namenode上保存着HDFS的命名空间。对于任何对文件系统元数据产生修改的操作,Namenode都会使用一种称为Edits的事务日志记录下来。例如,在HDFS中创建一个文件,Namenode就会在Edits中插入一条记录来表示;同样地,修改文件的副本系数也将往Edits插入一条记录。Namenode在本地操作系统的文件系统中存储这个Edits。整个文件系统的命名空间,包括数据块到文件的映射、文件的属性等,都存储在一个称为FsImage的文件中,这个文件也是放在Namenode所在的本地文件系统上。
Namenode在内存中保存着整个文件系统的命名空间和文件数据块映射(Blockmap)的映像。当Namenode启动时,它从硬盘中读取Edits和FsImage,将所有Edits中的事务作用在内存中的FsImage上,并将这个新版本的FsImage从内存中保存到本地磁盘上,然后删除旧的Edits,因为这个旧的Edits的事务都已经作用在FsImage上了。这个过程称为一个检查点(checkpoint)。
checkpoint 过程
在HA模式下checkpoint过程由StandBy NameNode来进行,以下简称为SNN,Active NameNode简称为ANN。
HA模式下的edit.log文件会同时写入多个JournalNodes节点的dfs.journalnode.edits.dir路径下,JournalNodes的个数为大于1的奇数(至少为3),类似于Zookeeper的节点数,当有不超过一半的JournalNodes出现故障时,仍然能保证集群的稳定运行。
SNN会读取FSImage文件中的内容,并且每隔一段时间就会把ANN写入edit log中的记录读取出来,这样SNN的NameNode进程中一直保持着hdfs文件系统的最新状况namespace。当达到checkpoint条件的某一个时,就会直接将该信息写入一个新的FSImage文件中,然后通过HTTP传输给ANN。
checkpoint 设置
默认情况下,2NN 一小时执行一次 设置时间点:hdfs-default.xml 查看 , hdfs-site.xml中设置<property><name>dfs.namenode.checkpoint.period</name><value>3600</value></property><property><name>dfs.namenode.checkpoint.txns</name><value>1000000</value></property>辅助名称节点的web UI访问地址:ip地址:50090
<5>名称节点故障,数据恢复
5.1 指定多个名称节点存储路径1. 停止进程2. 配置文件:hdfs-default.xml 查看 , hdfs-site.xml中设置<property><name>dfs.namenode.name.dir</name><value>file://${hadoop.tmp.dir}/dfs/name</value></property>3. 删除原数据(${hadoop_dir_name}/* hadoop/logs/* )4. 格式化文件系统 hadoop namenode -format5. 查看多个名称节点的存储目录 (实时同步,数据是一致)5.2 名称节点数据的恢复 (edits_inprogress数据会丢失)0. 模拟名称节点异常jsp 查询namenode的pidkill -9 pidrm -rf /home/zhangsan/hadoop/dfs/current/name/*1. 将scondarynamenode中存储的元数据远程拷贝到namenodescp -r zhangsan@s201:/home/zhangsan/hadoop/dfs/namesecondary/* ./name/2. 启动namenodehadoop-daemon.sh namenode
三、DataNode的工作流程(重点)
<1>流程图
<2>安全模式
在集群启动时,hdfs处于安全模式,不允许写操作(此时nn和dn在交互)hdfs dfsadmin -safemode enter/leave/wait/get
第四天 hadoop HDFS上传下载原理相关推荐
- java批量上传文件_Spring Boot2(十四):单文件上传/下载,文件批量上传
文件上传和下载在项目中经常用到,这里主要学习SpringBoot完成单个文件上传/下载,批量文件上传的场景应用.结合mysql数据库.jpa数据层操作.thymeleaf页面模板. 一.准备 添加ma ...
- web文件上传下载原理浅析
一.web文件上传浅析 现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的Commons FileUpload.还有Struts1.x和Struts2中带的上传文件功能 ...
- Hadoop hdfs上传文件报错解决
如果大家在安装的时候遇到问题,或者按步骤安装完后却不能运行Hadoop,那么建议仔细查看日志信息,Hadoop记录了详尽的日志信息,日志文件保存在logs文件夹内. 无论是启动,还是以后会经常用到的M ...
- 使用cropbox.js+jquery.js+servlet实现图片的上传下载
采用cropbox.js+jqueryajax + servlet实现图片的上传下载 原理解释: 利用javascript的内置对象FileReader读取计算机中的文件. 读取的文件会被转化为bas ...
- java操作hadoop hdfs,实现文件上传下载demo
本文主要参考了Hadoop HDFS文件系统通过java FileSystem 实现上传下载等,并实际的做了一下验证.代码与引用的文章差别不大,现列出来作为备忘. import java.io.*; ...
- 基于Java+hadoop网络云盘上传下载系统设计与实现
目 录 网络云盘上传下载系统摘要----------------------------------5 The Network Cloud Disk`s Upload and DownloadAbst ...
- python解析xml提交到hdfs_完美解决python针对hdfs上传和下载的问题
当我们使用python的hdfs包进行上传和下载文件的时候,总会出现如下问题 requests.packages.urllib3.exceptions.NewConnectionError:: Fai ...
- HDFS使用流的方式上传下载
主代码 package api;import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStr ...
- # nest笔记四:文件的上传与下载
nest笔记四:文件的上传与下载 nest是基于express之上的,所以,其文件上传和下载的功能,实际上就是express的功能. 下载 文件下载有两种,一个是sendFile,一个是downloa ...
最新文章
- HotSpot源码(一):Docker与虚拟机的区别,class字节码解析,linux内核源码下载地址,Yacc与Lex快速入门
- 一个redis的连接库的实现
- 云计算设计模式(三)——补偿交易模式
- 重磅福利!10本豆瓣平均8.0分技术书免费看!速来!
- 对于国产芯片何时能挑大梁
- CDH5 6 7安装包
- GDB watch的使用
- Using platform encoding (UTF-8 actually) to copy
- 《算法设计与分析》王红梅 第二版部分习题
- Android 微信H5支付,无法拉起微信支付页面
- 谷歌地球 hosts文件_NO—谷歌地球===YESgt;gt;GoogleEarth
- mac上禁用复制粘贴
- pkg打包node项目
- 浅层复制和深层复制( implements Cloneable )
- 【元宇宙系列】元宇宙的创世居民——M 世代(Mateverse)
- Python数据获取——图片数据提取
- 《天下少年英雄》隐私政策
- python利用浏览器执行js_浏览器如何执行JS
- 《Serverless 与容器决战在即?有了弹性伸缩就不一样了》
- android应用推广高招齐分享!力荐六大安卓应用推广方式