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来实现数据预处理。 所有…

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

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

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

问题:在文件夹下的资源可以按时间排序,导入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 输电环节的意义 电能的传输,是电力系统整体功能的重要组成环节。发电厂与电力负荷中心通常都位于不同地区。在水力、煤炭等一次能源资源条件适宜的地点建立发电厂,通过输电可以将电能输送到远离发电厂的负荷中心,使电能的开发和利用超越地…

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.…

Web渗透-命令执行漏洞及常见靶场探测实战

一、概述 命令执行(RCE):应用有时需要调用一些执行系统命令的函数,如php中的system,exec,shell exec,passthru,popen,proc popen等,当用户能控制这些函数的参数时,就可以将恶意系统命令拼接到正常命令中&a…

004-GeoGebra基础篇-GeoGebra的点

新手刚开始操作GeoGebra的时候一般都会恨之入骨,因为有些操作不进行学习确实有些难以凭自己发现。 目录 一、点的基本操作1. 通过工具界面添加点2. 关于点的选择(对象选择通用方法)(1)选择工具法(2&#xf…

Java新手启航:Windows下JDK安装,开启编程之旅

你是不是对编程充满好奇,想要迈入Java的世界,却不知道从何开始?别担心,每一个Java大师都是从安装JDK开始的,而今天,我将手把手教你如何轻松完成JDK的安装,让你迈出编程之旅的第一步! 接下来&am…

websocket基础使用学习

websocket基础使用学习 一、websocket是什么?二、使用步骤1.websocket服务的安装与启动安装服务连接与发消息 总结 一、websocket是什么? 以前,很多网站为了实现推送技术,所用的技术都是Ajax 轮询。轮询是在特定的的时间间隔&…

ios18开发者预览,Beta 2升级新增镜像等功能

近日,苹果发布了 iOS 18 开发者预览版 Beta 2 升级,为 iPhone 用户带来了多项新功能。据了解,这些新功能包括 iPhone 镜像和 SharePlay 屏幕共享,以及其他新增功能。 据了解,iPhone镜像可以让Mac用户将iPhone屏幕镜像…

OLMo:真正完全开源的大模型

最近,又有一家机构AI2(Allen Institute for AI)开源了一个LLM:OLMo,它的英文全称就叫Open Language Model。相比之前开源的大模型,OLMo的独特之处是完全开源,除了训练的模型,OLMo还开…

ElementUI的基本搭建

目录 1,首先在控制终端中输入下面代码:npm i element-ui -S 安装element UI 2,构架登录页面,login.vue​编辑 3,在官网获取对应所需的代码直接复制粘贴到对应位置 4,在继续完善,从官网添加…