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的工作流程


  1. SNN检查是否达到checkpoint条件:离上一次checkpoint操作是否已经有一个小时,或者HDFS已经进行了100万次操作。
  2. SNN检查达到checkpoint条件后,将该namespace以fsimage.ckpt_txid格式保存到SNN的磁盘上,并且随之生成一个MD5文件。然后将该fsimage.ckpt_txid文件重命名为fsimage_txid
  3. 然后SNN通过HTTP联系ANN。
  4. . 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上传下载原理相关推荐

  1. java批量上传文件_Spring Boot2(十四):单文件上传/下载,文件批量上传

    文件上传和下载在项目中经常用到,这里主要学习SpringBoot完成单个文件上传/下载,批量文件上传的场景应用.结合mysql数据库.jpa数据层操作.thymeleaf页面模板. 一.准备 添加ma ...

  2. web文件上传下载原理浅析

    一.web文件上传浅析 现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的Commons FileUpload.还有Struts1.x和Struts2中带的上传文件功能 ...

  3. Hadoop hdfs上传文件报错解决

    如果大家在安装的时候遇到问题,或者按步骤安装完后却不能运行Hadoop,那么建议仔细查看日志信息,Hadoop记录了详尽的日志信息,日志文件保存在logs文件夹内. 无论是启动,还是以后会经常用到的M ...

  4. 使用cropbox.js+jquery.js+servlet实现图片的上传下载

    采用cropbox.js+jqueryajax + servlet实现图片的上传下载 原理解释: 利用javascript的内置对象FileReader读取计算机中的文件. 读取的文件会被转化为bas ...

  5. java操作hadoop hdfs,实现文件上传下载demo

    本文主要参考了Hadoop HDFS文件系统通过java FileSystem 实现上传下载等,并实际的做了一下验证.代码与引用的文章差别不大,现列出来作为备忘. import java.io.*; ...

  6. 基于Java+hadoop网络云盘上传下载系统设计与实现

    目 录 网络云盘上传下载系统摘要----------------------------------5 The Network Cloud Disk`s Upload and DownloadAbst ...

  7. python解析xml提交到hdfs_完美解决python针对hdfs上传和下载的问题

    当我们使用python的hdfs包进行上传和下载文件的时候,总会出现如下问题 requests.packages.urllib3.exceptions.NewConnectionError:: Fai ...

  8. HDFS使用流的方式上传下载

    主代码 package api;import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStr ...

  9. # nest笔记四:文件的上传与下载

    nest笔记四:文件的上传与下载 nest是基于express之上的,所以,其文件上传和下载的功能,实际上就是express的功能. 下载 文件下载有两种,一个是sendFile,一个是downloa ...

最新文章

  1. HotSpot源码(一):Docker与虚拟机的区别,class字节码解析,linux内核源码下载地址,Yacc与Lex快速入门
  2. 一个redis的连接库的实现
  3. 云计算设计模式(三)——补偿交易模式
  4. 重磅福利!10本豆瓣平均8.0分技术书免费看!速来!
  5. 对于国产芯片何时能挑大梁
  6. CDH5 6 7安装包
  7. GDB watch的使用
  8. Using platform encoding (UTF-8 actually) to copy
  9. 《算法设计与分析》王红梅 第二版部分习题
  10. Android 微信H5支付,无法拉起微信支付页面
  11. 谷歌地球 hosts文件_NO—谷歌地球===YESgt;gt;GoogleEarth
  12. mac上禁用复制粘贴
  13. pkg打包node项目
  14. 浅层复制和深层复制( implements Cloneable )
  15. 【元宇宙系列】元宇宙的创世居民——M 世代(Mateverse)
  16. Python数据获取——图片数据提取
  17. 《天下少年英雄》隐私政策
  18. python利用浏览器执行js_浏览器如何执行JS
  19. 《Serverless 与容器决战在即?有了弹性伸缩就不一样了》
  20. android应用推广高招齐分享!力荐六大安卓应用推广方式

热门文章

  1. Android中电话拦截器案例
  2. Android 11适配
  3. 2014多校联合-第六场
  4. 批量删除 txt 记事本文本文件中的某一行或一些行
  5. 随笔-在Unity3d中模拟键盘按键
  6. 【群控】通过adb命令实现接打电话发短信脚本
  7. gdb调试,splint_valgrind代码检查
  8. scope may not be empty [scope-empty]
  9. Win11默认下载路径设置教程
  10. html输入名字自动跳出的信息,1、在excel输入名字自动跳出相应的部门或是工号...