HDSF 简介

news2024/10/6 22:27:45

目录

一、HDFS 的设计特点是

二、什么零拷贝

        2.1 传统情况:

        2.2 零拷贝技术:

三、什么是DMA 

四、HDFS 的关键元素

五、HDFS 运行原理

六、HDFS 数据合并原理

七、HDFS 写的原理

八、HDFS 读的原理

九、分块存储

十、 安全模式

十一、 MapReduce 核心思想

  11.1  MapReduce 进程

十二、 Namenode 故障后,如何恢复

        12.1 方法一:

        12.2 方法二:

        12.3 防止namenode挂掉的办法


一、HDFS 的设计特点是

1、大数据文件

2、文件分块存储

3、流式数据访问,一次写入可以多次访问

4、不支持动态改变文件内容,而是要求让文件一次写入就不做改变,要变化也只能在文件末添加内容

5、廉价硬件

6、硬件故障

7、利用DMA引擎的零拷贝计数进行文件的传输和同步

二、什么零拷贝

        2.1 传统情况:

没有任何优化技术使用的背景下,操作系统为此会进行4次数据拷贝和4次上下文切换,如下图所示

        拷贝步骤如下:       

步骤一:Datanode会首先将数据块从磁盘存储(也可能是SSD、内存等异构存储)读入操作系统的内核缓冲区

步骤二:将数据跨内核推到Datanode进行

步骤三:Datanode会再次跨内核将数据推回内核中的套接字缓冲区

步骤四:最后将数据写入网卡缓冲区

 Datanode对数据进行了两次多余的数据拷贝操作(步骤二和步骤三),Datanode只是起到缓存数据并将其传回套接字的作用而以,别无他用。这里需要注意的是,步骤一盒步骤四的拷贝发生在外设(列如磁盘和网卡)和内存之间,由DMA(Direct MemoryAccess,直接内存存取)引擎执行,而步骤二和步骤三的拷贝则发生在内存中,由CPU执行。

上述读取方式除了会造成多次数据拷贝操作外, 还会增加内核态与用户态之间的上下文切换

        上下文切换:

切换一:Datanode通过read()系统调用将数据块从磁盘(或者其他异构存储)读取到内核缓冲区时,会造成第一次用户态到内核态的上下文

切换二:在系统调用read()返回时,会触发内核态到用户态的上下文切换

切换三:Datanode成功读入数据后,会调用系统调用write()发送数据到socket,也就是在数据块第三次拷贝时,会再次触发用户态到内核的上下文切换

切换四:当系统调用write()返回时,内核态又会重新切换回用户态

         2.2 零拷贝技术:

一次系统调用代替两次系统调用

 拷贝步骤如下:   

步骤一:Datanode调用transferTo()方法引用DMA引擎文件内容拷贝到内核缓冲区

步骤二:DMA引擎直接把数据从内核缓冲区传输到网卡缓冲区

使用零拷贝模式的数据块读取, 数据拷贝的次数从4次降低到了2次.

transferTo()方法读取文件通道(FileChannel) 中position参数指定位置处开始的count个字节的数据, 然后将这些数据直接写入目标通道target中。 HDFS的SocketOutputStream对象的transferToFully()方法封装了FileChannel.transferTo()方法, 对Datanode提供支持零拷贝的数据读取功能。

 使用零拷贝模式除了降低数据拷贝的次数外, 上下文切换次数也从4次降低到了2次。

当Datanode调用transferTo()方法时会发生用户态到内核态的切换,transferTo()方法执行完毕返回时内核态又会切换回用户态。

三、什么是DMA 

         DMA将一个内存区从一个设备复制到另外一个。当中央处理器初始化这个传输动作,传输动作本身是由DMA控制器来实行和完成。

四、HDFS 的关键元素

Block: 将一个文件进行分块,通常是64M

NameNo: 保存整个文件系统的目录信息、文件信息及分块信息,这是由唯一 一台主机专门保存,如果主NameNode 失效,启动备用主机运行NameNode

DataNode: 分布的廉价的计算器上,用于存储Block块文件

五、HDFS 运行原理

 1、NameNode和DataNode节点初始化完成后,采用RPC进行信息交换,采用的机制是心跳机制,即DataNode节点定时向NameNode反馈状态信息,反馈信息如:是否正常、磁盘空间大小、资源消耗情况等信息,以确保NameNode知道DataNode的情况;

2、NameNode会将子节点的相关元数据信息缓存在内存中,对于文件与Block块的信息会通过fsImageedits文件方式持久化在磁盘上,以确保NameNode知道文件各个块的相关信息;

3、NameNode负责存储fsImage和edits元数据信息,但fsImage和edits元数据文件需要定期进行合并,这时则由SecondNameNode进程对fsImage和edits文件进行定期合并,合并好的文件再交给NameNode存储。

六、HDFS 数据合并原理

 

1、NameNode初始化时会产生一个edits文件和一个fsimage文件,edits文件用于记录操作日志,比如文件的删除或添加等操作信息,fsImage用于存储文件与目录对应的信息以及edits合并进来的信息,即相当于fsimage文件在这里是一个总的元数据文件,记录着所有的信息;

2、随着edits文件不断增大,当达到设定的一个阀值的时候,这时SecondaryNameNode会将edits文件和fsImage文件通过采用http的方式进行复制到SecondaryNameNode下(在这里考虑到网络传输,所以一般将NameNode和SecondaryNameNode放在相同的节点上,这样就无需走网络带宽了,以提高运行效率),同时NameNode会产生一个新的edits文件替换掉旧的edits文件,这样以保证数据不会出现冗余;

3、SecondaryNameNode拿到这两个文件后,会在内存中进行合并成一个fsImage.ckpt的文件,合并完成后,再通过http的方式将合并后的文件fsImage.ckpt复制到NameNode下,NameNode文件拿到fsImage.ckpt文件后,会将旧的fsimage文件替换掉,并且改名成fsimage文件。 

 

 

七、HDFS 写的原理

1、HDFS客户端提交写操作到NameNode上,NameNode收到客户端提交的请求后,会先判断此客户端在此目录下是否有写权限,如果有,然后进行查看,看哪几个DataNode适合存放,再给客户端返回存放数据块的节点信息,即告诉客户端可以把文件存放到相关的DataNode节点下;

2、客户端拿到数据存放节点位置信息后,会和对应的DataNode节点进行直接交互,进行数据写入,由于数据块具有副本replication,在数据写入时采用的方式是先写第一个副本,写完后再从第一个副本的节点将数据拷贝到其它节点,依次类推,直到所有副本都写完了,才算数据成功写入到HDFS上,副本写入采用的是串行,每个副本写的过程中都会逐级向上反馈写进度,以保证实时知道副本的写入情况;

3、随着所有副本写完后,客户端会收到数据节点反馈回来的一个成功状态,成功结束后,关闭与数据节点交互的通道,并反馈状态给NameNode,告诉NameNode文件已成功写入到对应的DataNode。

 

 

八、HDFS 读的原理

 

1、HDFS客户端提交读操作到NameNode上,NameNode收到客户端提交的请求后,会先判断此客户端在此目录下是否有读权限,如果有,则给客户端返回存放数据块的节点信息,即告诉客户端可以到相关的DataNode节点下去读取数据块;

2、客户端拿到块位置信息后,会去和相关的DataNode直接构建读取通道,读取数据块,当所有数据块都读取完成后关闭通道,并给NameNode返回状态信息,告诉NameNode已经读取完毕。

九、分块存储

 

HDFS中文件在物理上是分块存储,通过dfs.blocksize配置,2.x之后的版本默认128M

  • HDFS中文件在逻辑上是连续的,提供一个文件目录树
  • block块大小计算
  1. 理想寻址时间为10ms
  2. 理想读取文件时间为寻址时间的10%
  3. 市面上磁盘的存储速率为100M/s

因此block块大小:10ms/10% *100M/s = 100M -> 128M

十、 安全模式

 

安全模式是HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受创建、删除、修改等变更请求。同时会对数据块进行大量校验,导致资源的分配和申请耗时远超预期。

在NameNode主节点启动时,HDFS首先进入安全模式,DataNode在启动的时候会向namenode汇报可用的block等状态,当整个系统达到安全标准时,HDFS自动离开安全模式。如果HDFS处于安全模式下,则文件block不能进行任何的副本复制操作,hdfs集群刚启动的时候,默认30S钟的时间是出于安全期的,只有过了30S之后,集群脱离了安全期,然后才可以对集群进行操作

十一、 MapReduce 核心思想

MapReduce实现分布式计算分成2个阶段

第一个阶段MapTask并发实例,完全并行运行,互不干扰

第二个阶段ReduceTask并发实例,完全并行运行,数据依赖上一个阶段所有MapTask并发实例输出

MapReduce编程模型只能包含一个Map阶段一个Reduce阶段,但可以实现多个MapReduce串行运行

  11.1  MapReduce 进程

MrAppMaster:负责整个程序的过程调度及状态协调

MapTask:负责Map阶段整个数据处理流程

ReduceTask:负责Reduce阶段整个数据处理流程

十二、 Namenode 故障后,如何恢复

可以采用如下两种方法恢复数据:

        12.1 方法一: 

将 SecondaryNameNode 中数据拷贝到 namenode 存储数据的目录;

 

1、删除namenode存储的数据(/home/hadoop/hadoop_tmp/dfs/name/*)

rm -rf /home/hadoop/hadoop_tmp/dfs/name/*

2、把secondarynamenode中的数据拷到原namenode存储数据目录

scp -r hadoop@hadoop102:/home/hadoop/hadoop_tmp/dfs/namesecondary/* /home/hadoop/hadoop_tmp/dfs/name/*

3、重新启动namenode (在启动之前可以删除目录下的锁文件)

hadoop-daemon.sh start namenode

        12.2 方法二:

使用 -importCheckpoint 选项 启动 namenode 守 护 进 程 , 从 而 将SecondaryNameNode 中数据拷贝到 namenode 目录中。 

 

  1. 修改hdfs-site.xml文件:
<property>

    <name>dfs.namenode.checkpoint.period</name>

    <value>120</value>

</property>


<property>

    <name>dfs.namenode.name.dir</name>

    <value>/home/hadoop/hadoop_tmp/dfs/name</value>

</property>

        2.删除namenode存储的数据(/home/hadoop/hadoop_tmp/dfs/name/*)

rm -rf /home/hadoop/hadoop_tmp/dfs/name/*

        3.将secondarybamenode  存储数据的目录拷贝到 namenode 存储数据的平级目录,并删除锁文件in_use.lock文件  

scp -r hadoop@hadoop102:/home/hadoop/hadoop_tmp/dfs/namesecondary/* /home/hadoop/hadoop_tmp/dfs/name/*

rm -rf in_use.lock

        4.导入检查点数据

hdfs namenode -importCheckpoint

        5.启动namenode

hadoop-daemon.sh start namenode

        12.3 防止namenode挂掉的办法

集群高可用。

hdfs-site.xml 文件中

 

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

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

相关文章

如何使用微服务架构?使用过程需要注意什么?

一、使用微服务架构的规范 1.1 服务拆分 微服务的服务拆分是根据业务领域和业务功能来划分的&#xff0c;目的是将复杂的单体应用程序分解为小型、自治的服务&#xff0c;每个服务都专注于处理一个特定的业务领域或功能。 以下是微服务拆分的一些常见策略&#xff1a; 领域…

JavaEE——volatile、wait、notify三个关键字的解释

文章目录一、volatile和内存可见性1.解释内存可见性问题2. volatile 的使用与相关问题二、wait 和 notify1.wait 方法2.notify() 方法3. 关于 notifyAll() 方法4. wait 和 sleep 之间的简单比较一、volatile和内存可见性 前面的文章&#xff0c;我们已经提及到了内存可见性问题…

硬件设计--stm32自动下载电路设计

1 参考博客&#xff1a; 1、Stm32 一键下载电路详解 2、启动模式&#xff0c;BOOT0和BOOT1详解 3、STM32自动ISP电路设计 4、STM32 USB接口 一键下载电路详解与过程分析 2 下载软件分享&#xff1a; 参考博客&#xff1a;FlyMcu - 用于STM32芯片ISP串口程序一键下载的免费软…

【速记】Postgresql中几个ResourceOwner的含义

几个ResourceOwner的含义 总结下几个resowner的含义&#xff1a; 事务结构内的resowner&#xff1a;TransactionState→curTransactionOwner 含义&#xff1a;跟随事务结构体创建&#xff0c;会申请内存&#xff0c;跟随事务结构释放。每层事务都有自己的curTransactionOwner…

Vivado 下按键实验

Vivado下按键实验 实验原理 PL通过按键的开关状态控制led的亮灭&#xff0c;按键按下的时候灯亮&#xff0c;按键未按下的时候灯灭。 这里的描述有些问题&#xff0c;PL_LED1为高的时候&#xff0c;LED两端的电压都为高&#xff0c;灯应该是不亮的&#xff0c;所以按照下面实…

口令暴力破解--Ftp协议暴力破解与Ssh协议暴力破解

Ftp协议暴力破解 FTP服务检测 FTP服务 FTP是一种文件传输协议&#xff0c; FTP服务默认端口为21。利用FTP服务器可以在本地主机和远程主机间进行文件传输。当FTP没有配置好安全控制&#xff0c;如对登录的源地址及密码尝试次数做限制&#xff0c;那么就会存在暴力破解可能。…

uniapp - 实现车牌号键盘与格子间隔显示组件,汽车牌照录入支持自定义样式、新能源等(附带组件完整源码,开箱即用,稍微改改就能用)

效果图 uniapp 全平台兼容,车牌号键盘输入、分格显示功能示例源码,注释很多! 可以直接复制一下,然后自己改改样式或功能就能使了。 示例源码 复制,运行。 &

基于神经网络的协同过滤-NCF

目录 1、摘要 2、引言 2.1协同过滤 2.2矩阵分解 3.准备工作 3.1学习隐性数据 3.2矩阵分解 ​3.3神经协同过滤 3.4广义矩阵分解 3.5多层感知器 3.6GMF和MLP的融合-NeuMF(神经矩阵分解) 4.总结 1、摘要 尽管最近的一些工作已经把深度学习运用到了推荐中&#xff0…

【mysql性能调优 • 一】mysql企业级安装部署(保姆级别教程)

前言 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的 RDBMS (Relational Database Management System&#xff0c;关系…

k8s 认证基础

0x00 前言 要想研究一个东西是不是存在安全问题&#xff0c;那么就要知道这个东西是什么&#xff0c;怎么用的&#xff0c;如何认证&#xff0c;认证方式等问题&#xff0c;了解这些才能更好的去解释学习安全问题。 0x01 访问控制 首先是k8s用户k8s用户分为service account以…

涨点技巧:Yolov5/Yolov7引入CVPR2023 Demystify Transformers Convolutions ,提升小目标检测精度

Demystify Transformers & Convolutions in Modern Image Deep Networks 论文:https://arxiv.org/pdf/2211.05781.pdf 视觉转换器最近的成功激发了一系列具有新颖特征转换范例的视觉主干,这些范例报告了稳定的性能增益。尽管新颖的特征转换设计通常被认为是收益的来源,…

0302Prim算法-最小生成树-图-数据结构和算法(Java)

文章目录1 Prim算法1.1 概述1.1.1 算法描述1.1.2 数据结构1.1.3 横切边集合维护1.2 延时实现1.2.1 实现代码1.2.2 性能分析1.3 即时实现1.3.1 分析1.3.2 实现代码1.3.3 性能分析结语1 Prim算法 1.1 概述 1.1.1 算法描述 算法描述&#xff1a; 初始化最小生成树&#xff0c;只…

Java classLoader

一. 什么是类加载器 类加载器 classLoader 类加载器&#xff1a;负责将.class文件(存储在硬盘上的物理文件)加载到内存中&#xff0c;是类加载器把类的字节码文件加载到内存当中的。二. 类加载的过程 每个编写的”.java”拓展名类文件都存储着需要执行的程序逻辑&#xff0c;…

vue项目Agora声网实现一对一视频聊天Demo示例(Agora声网实战及agora-rtc-vue使用,新增在线预览地址)

最终效果 在线预览地址 一、声网简介---->请查看官网 二、声网注册---->请自行百度&#xff08;创建音视频连接需要在Agora注册属于您的appid&#xff09; 三、具体实现视频聊天步骤 1、 实现音视频通话基本逻辑 1、创建对象 调用 createClient 方法创建 AgoraRTCCli…

ELK 日志系统收集K8s中日志

容器特性给日志采集带来的困难 • K8s弹性伸缩性&#xff1a;导致不能预先确定采集的目标 • 容器隔离性&#xff1a;容器的文件系统与宿主机是隔离&#xff0c;导致日志采集器读取日志文件受阻。 日志按体现方式分类 应用程序日志记录体现方式分为两类&#xff1a; • 标准…

最大似然估计法和Zero Forcing算法的思考

文章目录一、Zero Forcing 算法思想二、MMSE三、MIMO检测中 Zero Forcing 算法比 Maximum Likelihood 差的思考本篇文章是学习了B站UP主 乐吧的数学 之后的笔记总结&#xff0c;老师讲的非常好&#xff0c;大家有兴趣的可以关注一波&#xff01;一、Zero Forcing 算法思想 那…

Linux应用编程(文件IO基础)

1.1、个简单的文件 IO 示例 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int main(void) {char buff[1024];int fd1, fd2;int ret;/* 打开源文件 src_file(只读方式) */fd1 open("./src_file",…

差分矩阵算法

前言&#xff1a;我们熟悉一维数组的前缀和和差分数组的相关操作和原理&#xff0c;但是对于二维数组也就是矩阵来说&#xff0c;它的差分和前缀和又会有什么不同之处呢&#xff1f;下面我们一起来研究&#xff0c; 1.二维数组的前缀和 首先&#xff0c;我们一般规定二维数组的…

【RocketMQ】主从同步实现原理

主从同步的实现逻辑主要在HAService中&#xff0c;在DefaultMessageStore的构造函数中&#xff0c;对HAService进行了实例化&#xff0c;并在start方法中&#xff0c;启动了HAService&#xff1a; public class DefaultMessageStore implements MessageStore {public DefaultM…

Vue2-黑马(六)

目录&#xff1a; &#xff08;1&#xff09;element-ui search搜索 &#xff08;2&#xff09;element ui Cascader级联选择器 &#xff08;3&#xff09;Router-路由配置 &#xff08;4&#xff09;Router-动态导入 &#xff08;1&#xff09;element-ui search搜索 我…