HDFS读写数据流程和NameNode工作机制

HDFS文件系统写数据

1.步骤

文件上传步骤:

  1. 向NameNode请求上传文件+文件路径(验证请求身份,写权限)
  2. 响应可以上传文件
  3. 请求上传第一个Block(0-128M), 请返回DataNode
  4. 返回dn1,dn2,dn3节点,表示采用这三个节点存储数据

NameNode节点选择存储节点的原则:

  • 节点最近原则
  • 负载均衡

2.节点距离计算

在HDFS写数据的过程中,NameNode会选择距离待上传数据最近距离的DataNode接收数据,也就是节点最近原则

节点距离 = 两个节点到达最近的共同祖先的距离总和

集群、机架、主机通过类似树型的结构连接在一起,共同祖先节点的计算方法一样。

3.机架感知

NameNode接收到客户端发送过来的写数据请求后,会选择三个节点:

  1. 本地节点
  2. 其他机架的一个节点
  3. 其他机架的另一个节点
    选择哪个节点的这个过程被称为机架感知,为何是这个策略呢?

感知策略
这个感知策略兼顾了数据的可靠性和效率,将数据分散在两个不同的机架,保证数据更可靠,其次第三个节点由于在同一个机架中,传输效率更高。

HDFS文件系统读数据

1.步骤

  1. 客户端向Name请求下载文件+文件地址(验证身份权限,权限)
  2. NameNode向客户端返回目标文件的元数据
  3. 客户端向DataNode请求读数据
  4. DataNode向客户端传输数据

2.读数据具体方式

实际上是串行读取方式,先读取完某个数据块后再读取另一个DataNode里面的数据。由于每个节点有3个备份,具体选择哪一个节点来进行读取主要使用节点最近原则和负载均衡原则。当某个节点读取数量超过一定数量时就更换为另一个节点。

NameNode和2NN工作机制

1.思考一下NameNode放在哪里比较好?

  1. 内存:好处是计算速度快,坏处是可靠性差。
  2. 磁盘:好处是可靠性高,坏处是计算速度慢
  3. 内存+磁盘:需要在内存中计算完,然后再持久化到磁盘中,两个位置都需要计算,效率更低。磁盘中存放的是fsImage镜像文件,如果是随机读写,效率很低。追加读写效率会更高
    • 随机读写
      • 需要读取历史数据
      • 修改后覆盖历史数据
    • 追加读写
      • 不读取历史数据
      • 直接修改操作追加到文件末尾

2.第三种方式如何协调运行

  1. 客户端的增删改请求都会追加到edits_improgress中。
  2. 2NN会不定期向NameNode发送CheckPoint请求,CheckPoint触发条件有两种:
    • 定时时间到
    • Edits中的数据满了
  3. NameNode接受请求后edits追加信息会进行滚动操作,生成一个新的edits2文件,滚动期间的增删改操作会进入到edits2文件中。
  4. edits2文件生成后,2NN会将镜像文件和edits2都拷贝到2NN中,然后加载到内存中进行合并,并生成一个新的镜像文件fsimage.chkpoint, 并拷贝回NameNode中。

在这里插入图片描述

3.文件结构

在linux文件目录中,NN文件都存放在/opt/module/hadoop-3.1.3/data/dfs/name/current/路径下, 主要存放了如下文件

  • fsimage镜像文件
    • hdfs oiv -p 文件类型 -i 镜像文件 -o: 必须先将镜像文件转换为特定格式后才能查看
    • fsimage文件存储了文件的inode节点,包含文件名以及文件之间的父子关系
    • fsimage文件没有存放dataNode节点的存储位置,开机时dataNode会主动向对应的NameNode告知其位置
  • edits追加文件
    • 同理edits文件也需要转换类型后才能查看,命令为edits_inprogress_0000000000000000517
    • NameNode保存着最新的修改信息,2NN没有。
  • seen_txid追加次数
  • VERSION版本信息(ClusterID集群ID):必须集群ID一致,NameNode才能找到相应的DataNode.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/86907.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

servletAPI超详__解老公不在家, 一个人偷看Servlet

目录 tomcat的定位 Servlet 详解 HttpServlet 核心方法 Get请求 关于乱码的问题 HttpServletRequest 核心方法 代码案例1: 打印请求信息 代码案例2: 获取GET请求中的参数 代码案例3:获取POST请求中的参数 代码案例4:获取POST请求中的参数(2) 引入JSON库解析String字符…

HCIP-OpenStack组件之neutron

neutron(ovs、ovn) OVS OVS(Open vSwitch)是虚拟交换机,遵循SDN(Software Defined Network,软件定义网络)架构来管理的。 OVS介绍参考:https://mp.weixin.qq.com/s?__bizMzAwMDQyOTcwOA&mid2247485088&idx1…

已解决Gradle错误:“Unable to load class ‘org.gradle.api.plugins.MavenPlugin‘”

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

[ACL2023] Exploring Lottery Prompts for Pre-trained Language Models

Exploring Lottery Prompts for Pre-trained Language Models 文章链接 清深的工作,比较有意思的一篇。作者先给出假设,对于分类问题,在有限的语料空间内总能找到一个prompt让这个问题分类正确,作者称之为lottery prompt。为此&…

探索未来世界,解密区块链奥秘!

你是否曾好奇,区块链是如何影响着我们的生活与未来?想要轻松了解这个引领着技术革命的概念吗?那么这本令人着迷的新书《区块链导论》绝对值得你拥有! 内容丰富多彩,让你轻松掌握: **1章:区块链…

计算机竞赛 基于大数据的时间序列股价预测分析与可视化 - lstm

文章目录 1 前言2 时间序列的由来2.1 四种模型的名称: 3 数据预览4 理论公式4.1 协方差4.2 相关系数4.3 scikit-learn计算相关性 5 金融数据的时序分析5.1 数据概况5.2 序列变化情况计算 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 &…

Linux 可重入、异步信号安全和线程安全

可重入函数 当一个被捕获的信号被一个进程处理时,进程执行的普通的指令序列会被一个信号处理器暂时地中断。它首先执行该信号处理程序中的指令。如果从信号处理程序返回(例如没有调用exit或longjmp),则继续执行在捕获到信号时进程…

LeetCode 1267. 统计参与通信的服务器

【LetMeFly】1267.统计参与通信的服务器 力扣题目链接:https://leetcode.cn/problems/count-servers-that-communicate/ 这里有一幅服务器分布图,服务器的位置标识在 m * n 的整数矩阵网格 grid 中,1 表示单元格上有服务器,0 表…

性能测试流程? 怎么做性能测试?

一、前期准备 性能测试虽然是核心功能稳定后才开始压测,但是在需求阶段就应该参与,这样可以深入了解系统业务、重要功能的业务逻辑,为后续做准备。 二、性能需求分析(评审) 评审时,要明确性能测试范围、目…

jupyter notebook 插件nbextensions的安装

安装步骤: 1、打开 jupyter notebook,新建一个 python 文件; 2、 分别输入以下代码,然后运行,出现 warning 不影响使用,如果出现 errors,则说明下载有问题: !python -m pip install…

【送书活动】AI时代,程序员需要焦虑吗?

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

plsql ebs 工作中的简单笔记

工作流中给系统界面发送消息: PROCEDURE wf_notify(p_sender IN VARCHAR2 DEFAULT SYSADMIN,p_receiver IN VARCHAR2,p_subject IN VARCHAR2,p_content_text IN VARCHAR2);PROCEDURE wf_notify(p_sender IN VARCHAR2 DEFAULT SYSADMIN,---发送…