HDFS学习

3.5  HDFS存储原理

 3.5.1 冗余数据保存

作为一个分布式文件系统,为了保证系统的容错性和可用性,HDFS采用了多副本方式对数据进行冗余存储,通常一个数据块的多个副本会被分布到不同的数据节点上。
 

如图所示,数据块1被分别存放到数据节点AC上,数据块2被存放在数据节点AB上。

这种多副本方式具有以下几个优点:

1)加快数据传输速度

2)容易检查数据错误

3)保证数据可靠性

 3.5.2 数据存取策略

 1.数据存放

Ø第一个副本:放置在上传文件的数据节点;如果是集群外提交,则随机挑选一台磁盘不太满、CPU不太忙的节点

Ø第二个副本:放置在与第一个副本不同的机架的节点上

Ø第三个副本:与第一个副本相同机架的其他节点上

Ø更多副本:随机节点

2. 数据读取

ØHDFS提供了一个API可以确定一个数据节点所属的机架ID,客户端也可以调用API获取自己所属的机架ID

Ø当客户端读取数据时,从名称节点获得数据块不同副本的存放位置列表,列表中包含了副本所在的数据节点,可以调用API来确定客户端和这些数据节点所属的机架ID,当发现某个数据块副本对应的机架ID和客户端对应的机架ID相同时,就优先选择该副本读取数据,如果没有发现,就随机选择一个副本读取数据

3. 数据复制(采用流水线策略)

当客户端需要向HDFS中写入一个文件时,文件首先被写入本地计算机。

1)按照HDFS的设置被切分成一定大小的块,具体大小由HDFS设置

2)每个块都会向HDFSNameNode节点发起写请求

3NameNode节点会根据系统中各个DataNode节点的使用情况,选择一个合适的DataNode节点列表返回给客户端。

4)客户端随后会将数据首先写入列表中的第一个DataNode节点,同时将列表传给该节点。

3 数据复制(采用流水线策略)

5)第一个DataNode节点在接收到一定数量的数据后,会向列表中的第二个DataNode节点发起连接请求,并把自己已经接收到的数据和列表传给第二个节点。

6)第二个节点在接收到数据后,也会向列表中的第三个节点发起连接请求。依此类推。这样,列表中的多个DataNode节点形成了一条数据复制的流水线。

 3.5.3 数据错误与恢复

HDFS具有较高的容错性,可以兼容廉价的硬件,它把硬件出错看作一种常态,而不是异常,并设计了相应的机制检测数据错误和进行自动恢复,主要包括以下几种情形:

Ø 名称节点出错
Ø 数据节点出错
Ø 数据出错。
1. 名称节点出错

名称节点保存了所有的元数据信息,其中,最核心的两大数据结构是FsImageEditlog,如果这两个文件发生损坏,那么整个HDFS实例将失效。解决方案:

1 )把名称节点上的元数据信息同步存储到其他文件系统,如 NFS
2 )运行一个第二名称节点,当名称节点死机后,可以把运行第二名称节点作为一种弥补,但这种做法有问题,问题在哪?
最优做法: NFS 和第二名称节点结合用

2. 数据节点出错

Ø 每个数据节点会定期向名称节点发送“心跳”信息,向名称节点报告自己的状态。
Ø 当数据节点发生故障,或者网络发生断网时,名称节点就无法收到来自一些数据节点的心跳信息,这时,这些数据节点就会被标记为“宕机”,节点上面的所有数据都会被标记为“不可读”,名称节点不会再给它们发送任何 I/O 请求。
Ø 这时,有可能出现一种情形,即由于一些数据节点的不可用,会导致一些数据块的副本数量小于冗余因子。
Ø 名称节点会定期检查这种情况,一旦发现某个数据块的副本数量小于冗余因子,就会启动数据冗余复制,为它生成新的副本。
Ø HDFS 和其它分布式文件系统的最大区别就是可以调整冗余数据的位置。

3. 数据出错

Ø 网络传输和磁盘错误等因素,都会造成数据错误
Ø 客户端在读取到数据后,会采用 md5 sha1 对数据块进行校验,以确定读取到正确的数据
Ø 在文件被创建时,客户端就会对每一个文件块进行信息摘录,并把这些信息写入到同一个路径的隐藏文件里面
Ø 当客户端读取文件的时候,会先读取该信息文件,然后,利用该信息文件对每个读取的数据块进行校验,如果校验出错,客户端就会请求到另外一个数据节点读取该文件块,并且向名称节点报告这个文件块有错误,名称节点会定期检查并且重新复制这个块。

3.6 HDFS数据读写过程

Ø FileSystem 是一个通用文件系统的抽象基类,可以被分布式文件系统继承,所有可能使用 Hadoop 文件系统的代码,都要使用这个类
Ø Hadoop FileSystem 这个抽象类提供了多种具体实现
Ø DistributedFileSystem 就是 FileSystem HDFS 文件系统中的具体实现
Ø FileSystem open() 方法返回的是一个输入流 FSDataInputStream 对象,在 HDFS 文件系统中,具体的输入流就是 DFSInputStream
Ø FileSystem 中的 create() 方法返回的是一个输出流 FSDataOutputStream 对象,在 HDFS 文件系统中,具体的输出流就是 DFSOutputStream

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

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

相关文章

石油化工厂为什么要用专业防爆手机?

防爆手机之所以必须使用专业设计的产品,主要是出于安全考虑,以防止在易燃易爆环境中因手机使用不当引发爆炸事故。以下几点详细解释了使用专业化工防爆手机的必要性: 本质安全设计:顶坚专业防爆手机采用了本质安全(本安…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-47转置卷积

47转置卷积 import torch from torch import nn from d2l import torch as d2l# 输入矩阵X和卷积核矩阵K实现基本的转置卷积运算 def trans_conv(X, K):h, w K.shapeY torch.zeros((X.shape[0] h - 1, X.shape[1] w - 1))for i in range(X.shape[0]):for j in range(X.shap…

昇思25天学习打卡营第5天|数据变换Transforms

数据变换Transforms 介绍Transforms分类Common TransformsVision TransformsText TransformsPythonTokenizer LookupLambda Transforms 参考 介绍 MindSpore提供不同种类的数据变换(Transforms),配合数据处理Pipeline来实现数据预处理。 所有…

【ROS】apt 找不到 ROS版本?(ROS1和ROS2通用方案)

问题描述 安装ROS底层系统时,经常遇到一个情况就是apt找不到ros的对应版本 解决方案 添加ros官方给的apt源和安装密钥 ROS1 # ros奖项 sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.li…

数学建模 —— MATLAB中的向量

目录 向量的创建方法 (1)直接输入法 (2)冒号法(常用) (3)利用MATLAB函数创建 linspace函数 logspace函数 向量元素的引用 (1)单个元素引用 (2)多个元素引用 向量元素的修改和删除 向量的创建方法 在 MATLAB中,向量的创建方法主要有…

微软Edge浏览器多用户配置文件管理:个性化浏览体验

在家庭或工作环境中,经常需要在同一台计算机上为多个用户创建和管理独立的浏览体验。微软Edge浏览器提供了多用户配置文件管理功能,允许用户为每个账户设置独立的书签、历史记录、密码、扩展和设置。本文将详细介绍如何在微软Edge中管理多个用户配置文件…

连接Sql Server时报错:无法通过使用安全套接字层加密与 SQL Server 建立安全连接

JDBC连接Sql Server时报错:无法通过使用安全套接字层加密与 SQL Server 建立安全连接 前言解决办法一解决办法二总结 前言 今天使用jdbc连接sql server突然报错为:SQLServerException: “Encrypt”属性设置为“true”且 “trustServerCertificate”属性设置为“fals…

GoMate:配置化模块化的Retrieval-Augmented Generation (RAG) 框架

文章目录 GoMate简介1.1 GoMate的核心技术文档解析向量存储嵌入模型问题查询文本生成文档更新 1.2 GoMate的应用领域智能客服知识库构建内容生成教育培训法律文书处理 GoMate的产品特色2.1 文档解析2.2 向量存储2.3 嵌入模型2.4 问题查询2.5 文本生成2.6 文档更新 GoMate的使用…

解决SPA(单页应用)首屏加载速度慢

SPA是目前流行的前端开发模式,相对于传统的多页面用户体验更好,操作更顺畅,开发效率也更高。但是SPA首屏加载速度慢一直是个致命的问题,由于SPA应用首次打开需要一次性加载大量的静态资源,这就导致了加载速度慢的问题&…

监听设备方向变化?分享 1 段优质 JS 代码片段!

大家好,我是大澈! 本文约 700 字,整篇阅读约需 1 分钟。 每日分享一段优质代码片段。 今天分享一段 JS 代码片段,用于在H5端监听设备方向的变化。 老规矩,先阅读代码片段并思考,再看代码解析再思考&#…

文件夹内-资源名称前加序号排列

问题:在文件夹下的资源可以按时间排序,导入unity后资源顺序会乱掉,不方便按顺序赋值,为了方便,通过下面方法在文件夹下统一在资源名称前按顺序加上序号 win11在文件夹内右键,选择——在终端中打开 输入&a…

制造企业用AI可以做什么?

ChatGPT横空出世,有关AI的浪潮席卷全球,比起人工智能如何改变世界,可能你更感兴趣我能用AI可以做的事情是什么? 制造企业用AI可以做的事情是什么?人工智能在制造企业中可以做很多事情,以下是一些主要的应用&#xff1…

企业源代码加密软件丨透明加密技术是什么

在一个繁忙的软件开发公司中,两位员工小李和小张正在讨论源代码安全的问题。 “小张,你有没有想过我们的源代码如果被泄露了怎么办?”小李担忧地问。 “是啊,这是个大问题。源代码是我们的核心竞争力,一旦泄露&#…

LUA 语言中subtree 的使用教程

在线编辑器: https://www.runoob.com/try/runcode.php?filenameHelloWorld&typelua 在Lua语言中,"subtree"通常指的是一个子表或者子树,它指的是一个Lua表(table)中的一个部分,可以是一个单…

<电力行业> - 《第8课:输电(一)》

1 输电环节的意义 电能的传输,是电力系统整体功能的重要组成环节。发电厂与电力负荷中心通常都位于不同地区。在水力、煤炭等一次能源资源条件适宜的地点建立发电厂,通过输电可以将电能输送到远离发电厂的负荷中心,使电能的开发和利用超越地…

哪些存储器内可以直接运行程序?

存储器是否可以运行程序,主要取决于其是否支持eXecute In Place (XIP) 或类似的直接执行特性。下面根据不同存储器进行分别说明: 1.PROM(Programmable Read-Only Memory,可编程只读存储器)是一种可以通过用户编程来存…

fiddler使用

1、设置抓取HTTPS的请求 先选中浏览器Browser---Chrome 默认是不抓https的数据包的 有时我们抓取的的包是https的,不是http的,就要做一些设置 Tools---Options 勾选Capture HTTPS CONNECTs 勾选Decrypt HTTPS traffic 勾选 Ignore server certificat…

(单机版)神魔大陆|v0.51.0|冰火荣耀

前言 今天给大家带来一款单机游戏的架设:神魔大陆v0.51.0:冰火荣耀。 如今市面上的资源参差不齐,大部分的都不能运行,本人亲自测试,运行视频如下: (单机版)神魔大陆 下面我将详细的教程交给大家,请耐心阅…

[数据集][目标检测]电力场景下电柜箱门把手检测数据集VOC+YOLO格式1167张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1167 标注数量(xml文件个数):1167 标注数量(txt文件个数):1167 标注…

编译工具-Gradle

文章目录 Idea中配置Gradle项目project目录settings.gradlebuild.gradlegradlewgradlew.bat Gradle Build生命周期编写Settings.gradle编写Build.gradleTasksPlugins Idea中配置 配置项:gradle位置 及仓库位置 Gradle项目 Task,settings.gradle,build.…