HDFS存取策略联系

embedded/2024/9/24 0:22:01/

书上关于这部分分了三个点:

1.数据存放

2.数据读取

3.数据复制

    但数据存放和数据复制都是数据写操作过程中的,“存放”体现一种思想,“复制”体现过程,整个数据写操作过程如下:

1.分块:当客户端写入一个文件时,该文件首先会被切分为若干个块(block),每个块的大小由HDFS的设定值决定。

2.块向NN发起请求:每个数据块会向NameNode发起写请求。

3.NN为块给出DN列表:NameNode会根据数据块的存放策略,选择三个DataNode组成一个列表返回给客户端。如果是集群内发起的写操作,则将发起操作的节点作为第一个DN,如果是集群外发起的,则随机一个DN。第二个DN与第一个要是不同机架,第三个DN要与第一个DN同机架不同节点。

4.DN复制:客户端在接收到这个DataNode列表后,开始使用流水线复制的方法进行数据块的复制。具体步骤如下:

  1. 客户端将数据和列表传给第一个DataNode。
  2. 第一个DataNode接收到数据后,将其写入本地存储,并同时将数据和列表传递给第二个DataNode。
  3. 第二个DataNode接收到数据后,也将其写入本地存储,并继续将数据和列表传递给第三个DataNode。

    这个过程是并行进行的,也就是在第一个DataNode在接收到数据后,会立即开始将数据写入本地存储,并且几乎同时,它也会将数据转发给下一个DataNode(即第二个DataNode)。第二个DataNode也会立即开始写入数据,并继续将数据传递给第三个DataNode。也就是第一个DataNode不需要等待自己完全写完数据后再传递给下一个DataNode;相反,它可以一边写入数据,一边将数据传递给下一个节点。这种流水线复制的方式可以显著提高数据写入的效率。

5.写毕:当最后一个DataNode完成写入后,它会沿着列表逆序发送数据写完毕信号“ACK确认包”,通知客户端和整个流水线中的数据节点,表示该数据块已成功复制到所有目标节点。

因此,可以说HDFS数据块的复制和存放是一个协同进行的过程,它们相互依赖、相互促进,共同保证了数据在HDFS中的可靠存储和高效访问。

其余补充:

1.NameNode的内存中存储了当前的元数据,而FsImage和EditLog则存储在磁盘上,用于持久化和恢复元数据

2.Region元数据:记录Region与Region服务器的映射关系,存内存

   NameNode元数据:除了目录-文件-块-DataNode的映射关系(分几块,存在哪里),还包括了文件的描述属性。(是什么)

3.hbase表的meta表和root表也是存在Region上的

4.hbase空间大小受root表大小限制(region大小)

    hdf存储空间大小受namenode内存大小限制

5.hadoop1.0对于hdfs的namenode单点失效问题采取第二名称节点方式解决

  hadoop2.0对于hdfs的namenode单点失效问题采取NN Federation方法解决

   hbase对于master单点失效问题采取zookeeper协调选取主管方式解决

6.region以行划分

   store以列族划分

7.region服务器重启:若hlog里有缓存,也就是上次关机memstore里剩余没刷新的内容,执行hlog恢复memstore,刷新,删除hlog文件

   region失效:把hlog中的操作全部重新做一次恢复memstore,与重启类似


http://www.ppmy.cn/embedded/26841.html

相关文章

【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)

💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD) 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 My …

【蓝桥杯】第十五届蓝桥杯C/C++B组省赛补题

文章目录 估分试题 A: 握手问题试题 B: 小球反弹试题 C: 好数试题 D: R 格式试题 E: 宝石组合试题 F: 数字接龙试题 G: 爬山试题 H: 拔河 估分 测试网址:民间测试数据 5 0 9 5 2 5 18 2 46 5 0 9 5 2 5 18 2 46 50952518246 试题 A: 握手问题 #inc…

bun 换源 国内阿里源 npmmirror 加速下载

Github https://github.com/oven-sh/bun 版本号 bun 1.1.5 windows 安装 bun 如果本机有 nodejs 环境, 可以 npm install -g bun 安装 ( 官方把 exe 已经传到了 npm 仓库, 走的国内 npm 镜像, 下载速度会很快) 没有 nodejs, 可以用 powershell 脚本安装 具体操作 全局 …

四、线段、矩形、圆、椭圆、自定义多边形、边缘轮廓和文本绘制(OpenCvSharp)

功能实现: 对指定图片上进行绘制线段、矩形、圆、椭圆、自定义多边形、边缘轮廓以及自定义文本 一、布局 用到了一个pictureBox和八个button 二、引入命名空间 using System; using System.Collections.Generic; using System.Drawing; using System.Windows.F…

【JAVA进阶篇教学】第九篇:MyBatis-Plus用法介绍

博主打算从0-1讲解下java进阶篇教学,今天教学第九篇:MyBatis-Plus用法介绍。 在 MyBatis-Plus 3.5.0 中,LambdaQueryWrapper支持多种条件构造方式,除了等于(eq)、不等于(ne)、大于&a…

nowcoder——删除公共字符

删除公共字符_牛客题霸_牛客网 (nowcoder.com) 对于这个题其实就是删除字符串1中在字符串2中出现过的字符。我们来分析下解题步骤: 思路一:遍历字符串1,如果遍历到的字符在字符串2中出现,则将该字符之后的所有字符向前移一位。 …

Linux 系统上安装 NVIDIA 驱动程序失败(X server问题)

报错信息: ERROR: You appear to be running an X server; please exit X before installing. For further details, please see the section INSTALLING THE NVIDIA DRIVER in the README available on the Linux driver download page at www.nvidia.com. ERROR: …

Ubuntu如何更换 PyTorch 版本

环境: Ubuntu22.04 WLS2 问题描述: Ubuntu如何更换 PyTorch 版本考虑安装一个为 CUDA 11.5 编译的 PyTorch 版本。如何安装旧版本 解决方案: 决定不升级CUDA版本,而是使用一个与CUDA 11.5兼容的PyTorch版本,您可…