当前位置: 首页 > news >正文

hadoop_hdfs详解

HDFS秒懂

  • HDFS定义
  • HDFS优缺点
    • 优点
    • 缺点
  • HDFS组成架构
    • NameNode
    • DataNode
    • Secondary NameNode
    • Client
  • NameNode工作机制
    • 元数据的存储
    • 启动流程
    • 工作流程
  • Secondary NameNode工作机制
    • checkpoint
    • 工作流程
  • DataNode工作机制
    • 工作流程
    • 数据完整性
  • 文件块大小
    • 块太小的缺点
    • 块太大的缺点
  • 文件写入流程
  • 机架感知
    • 作用
    • 策略
  • 文件读取流程
  • HDFS的shell操作

HDFS定义

HDFS(Hadoop Distributed File System)是一个分布式的文件系统,用户存储文件,通过目录树来定位文件,适合一次写入,多次读出的场景,不支持文件的修改

HDFS优缺点

优点

  1. 高容错性:数据保存在多个副本,某一个副本数据丢失后,可以自动恢复
  2. 适合处理大数据:数据规模可达到GB、TB级,能够处理百万规模的文件数量
  3. 可构建在廉价的机器上:通过多副本机制,提高可靠性

缺点

  1. 不适合低延时数据访问:毫秒级的存储是做不到的
  2. 无法高效的对大量小文件进行存储:小文件的寻址时间会超过读取时间
  3. 不支持并发写入和文件随机修改:一个文件只能一个写,不允许多个线程同时写;仅支持数据追加,不支持文件修改

HDFS组成架构

NameNode

NN,Master,它是一个主管、管理者

  1. 保存HDFS上所有文件的元数据
  2. 维护副本数
  3. 管理数据块(block)的映射信息
  4. 处理客户端请求

DataNode

DN,就是Slave,数据节点

  1. 存储数据块
  2. 执行对数据块的操作

Secondary NameNode

2NN,不是NN的热备

  1. 辅助NameNode分担工作量, 定期进行checkpoint
  2. 紧急情况下,可辅助恢复NameNode

Client

客户端

  1. 通过命令管理和访问HDFS
  2. 文件切分与合并

NameNode工作机制

元数据的存储

  • 元数据存储在fsiamge文件和edits文件中
    在这里插入图片描述

  • 了解NameNode的文件
    在这里插入图片描述

1、fsimage:NameNode内存中元数据序列化后形成的文件,元数据的快照文件fsimage文件的产生:1)第一次格式化NN时,此时会创建NN的工作目录,在目录中生成一个fsimage_000...000文件2)当NN在启动时,NN会将所有的edits文件和fsiamge文件加载到内存合并得到最新的元数据,将元数据持久化到磁盘生成新的fsimage文件3)如果启用了2NN,2NN也会辅助NN合并元数据,并将合并后的元数据发送给NN
查看faimage文件:语法:hdfs oiv -p 文件类型 -i 镜像文件 -o 转换后文件输出路径实例:hdfs oiv -p XML -i fsimage_0000000005067017090 -o /opt/fsimage.xml
2、fsimage_xxx.md5:是对应文件的md5值文件,用来保证fsimage的一致性
3、edits:记录客户端更新元数据信息的每一步操作txid:每次更新元数据的写操作命令会被分解为若干步,每一步都会有一个id,这个id称为txid,也叫事务id
edits文件的产生:NN在启动之后,每次更新元数据的操作,都会将命令记录到edits_inprogress文件中,当达到指定条件之后,会进行滚动生成edits_txid文件,同时生成新的edits_inprogress文件来记录新的操作,等edits_inprogress文件再次满足条件后继续滚动,以此循环
edits_inprogress的滚动条件:1)操作次数:默认txid达到100万次,会自动滚动生成edits文件,参数可配置2)时间:默认每2分钟文件自动滚动生成edits文件,时间可配置3)重启:当NN被重启的时候,也会自动触发edits_inprogress的滚动4)手动执行滚动:通过命令hdfs dfsadmin -rollEdits强制滚动edits_inprogress
查看edits文件:语法:hdfs oev -p 文件类型 -i编辑日志 -o 转换后文件输出路径实例:hdfs oev -p XML -i edits_0000000005067128882-0000000005067142023 -o /opt/edits.xml
4、edits_inprogress:正在使用的编辑日志文件
5、seen_txid:文件保存的是一个数字,是edits记录里txid的最后一个数字

在这里插入图片描述

6、VERSION:记录的是NameNode的集群信息

在这里插入图片描述

namespaceID : 文件系统的唯一标识符,管理一组blockpoolID
clusterID:    集群ID
cTime:        NameNode存储系统的创建时间
storageType:  说明该存储目录包含的是NameNode的数据结构
blockpoolID:  针对每一个NamespaceID所对应的blockpool的ID
layoutVersion:HDFS永久性数据结构的版本信息每次格式化NN,会产生一个VERSION文件,重新生成clusterID和blockpoolID,blockpoolID会被DN领取,生成一个同名的目录,每次DN启动时,
会将这个同名目录中的块上报给NN,DN在第一次启动时,如果没有VERSION信息,会向配置文件中配置的NN发起请求,生成VERSION,加入到集群

启动流程

  • 加载fsimage
    在这里插入图片描述
    fsimage文件记录了自最后一次检查点之前HDFS文件系统中所有目录和文件的序列化信息

  • 加载edits
    在这里插入图片描述
    edits文件记录了最后一次检查点之后所有针对HDFS文件系统的操作,加载了这两个文件后确保了数据的完整性和一致性

  • 记录checkpoint在这里插入图片描述
    在NN启动时,edits_inprogress文件会回滚,也会再生成一个新的fsimage文件,这样在本次启动之前的所有数据都被保存,记录本次检查点,以便更新新的操作

  • 安全模式
    在这里插入图片描述
    在加载完fsimage和edits文件后,NN开始监听DN请求,在这个过程期间,NN一直运行在安全模式,在安全模式下只能进行有限的读操作,不能对hdfs文件系统做任何修改,各个DN会向NN上报最新的块信息,在整个系统中99.9%的块满足至少有一个副本,NN会在30秒后退出安全模式

    # 基本语法
    hdfs dfsadmin -safenode get     (功能描述:查看安全模式状态)
    hdfs dfsadmin -safenode enter  	(功能描述:进入安全模式状态)
    hdfs dfsadmin -safemode leave	(功能描述:离开安全模式状态)
    hdfs dfsadmin -safemode wait	(功能描述:等待安全模式状态,hdfs接收的命令会等待,待离开安全模式后依次执行)
    

工作流程

在这里插入图片描述

Secondary NameNode工作机制

checkpoint

checkpoint是一种HDFS元数据的备份机制,元数据信息依据触发条件被定期写入持久化存储

  • checkpoint 默认触发条件
  1. 每隔1小时触发一次
  2. edits产生了100万次的操作记录

工作流程

在这里插入图片描述

DataNode工作机制

工作流程

  1. DataNode启动后向NameNode注册,通过后,每1小时向NameNode上报所有的块信息
  2. 每3秒一次心跳,心跳返回结果带有NameNode给该DataNode的命令
  3. 如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用

数据完整性

  1. 一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳
  2. 当DataNode读取Block的时候,它会计算CheckSum(校验和)
  3. 如果计算后的CheckSum,与Block创建时值不一样,说明Block已经损坏
  4. Client会复制其他DataNode上的Block
  5. DataNode在其文件创建后周期验证CheckSum

文件块大小

  • HDFS中的文件存储在物理上是分块存储(block),Hadoop1.x默认大小是64M,Hadoop2.x默认大小是128M

块的大小设置基于最佳传输损耗理论!在一次传输中,寻址时间占用总传输时间的1%时,本次传输的损耗最小,为最佳性价比传输!目前硬件的发展条件,普通磁盘写的速率大概为100M/S, 寻址时间一般为10ms!一次传输时间就是1s,所以块的最佳大小为100M,块的大小最好为2的n次方,所以最接近的就是128M,如果磁盘的传输速率很快,例如是300M/S,那么块大小就可以调整到 256M,可以通过dfs.blocksize参数进行设置。

块太小的缺点

  1. 同样大小的文件在存储时,块太小会占用更多的NN的元数据空间
  2. 在进行读写操作时,DFS存储了大量的小文件,会消耗额外的寻址时间

块太大的缺点

  1. 块太大,在读取块内某一部分数据场景时,需要将整个块下载后再读取内容,会带来更多额外的网络消耗,不够灵活
  2. 在上传文件时,一旦发生故障,需要将整个块文件重新上传,那么之前上传文件的资源开销就会浪费
  • 默认块大小为128M,128M指的是每个块最多存储128M的数据,如果当前块存储的数据不满128M,那么存了多少数据,就占用多少的磁盘空间!
  • 一个块只属于一个文件!

文件写入流程

在这里插入图片描述

  • 流程详细说明

流程5:客户端根据返回的DN节点,请求建立传输通道,客户端向最近的DN节点发起通道建立请求,由这个DN节点依次向通道中的距离当前节点距离最近的下一个节点发送建立通道请求,各个节点发送响应,通道建立成功

流程7:客户端每读取64K的数据会封装为一个packet(数据包),每个packet为64K,由若干个chunks组成,每个chunks是512B,还会包含一个checksum(校验和),封装成功的packet会放到一个叫做dataQuene的队列中,按顺序发送到通道里第一个DN节点,节点收到packet之后,再送到通道的下一个节点,发送过之后的packet会被放入到ackQuene队列里,当所有的DN节点返回了成功的ack确认消息,这个packet会在ackquene队列中删除。一旦发生错误,ackQuene队列里的小包会回滚到dataQuene,在原始通道里把坏的节点剔除掉,再重新建立一个新的通道继续传输。

ACK (Acknowledge Character)即是确认字符,在数据通信中,接收方发给发送方的一种传输类控制字符。表示发来的数据已确认接收无误。在 pipeline 管道传输数据的过程中,传输的反方向会进行ACK校验,确保数据传输安全

流程8:第一个块传输完成后,DN向NN上报块的消息,只要有一个DN节点上报块信息,NN就认为这个块已经传输完成,通道关闭,开始下一个块的传输,重复3-8的流程

副本数如果暂时不满足条件,之后NN会自动检查,维护副本数

机架感知

机架感知是一种能够识别集群中各个节点所属机架,并在任务调度和数据块副本放置时利用这些信息来优化数据传输和任务执行效率

作用

  1. 提高数据传输效率
  2. 增强容错能力
  3. 优化任务调度

策略

  1. 第一个副本放在本地机架的一个DN节点
  2. 第二个副本放在本地机架的另一个DN节点(本地机架的网络拓扑距离最多为2,速度快)
  3. 第三个副本放在其他机架的一个DN节点(考虑安全性)
  4. 更多的副本,放置在相对空闲的其他DN节点上

文件读取流程

在这里插入图片描述

流程3:NN将文件所对应block的存储地址放入一个队列,客户端从队列中依次按每一个block对应地址来取出数据,也是按照packet进行读取,读取的时候可以多个DN一起读取

流程4:读取完一个block之后,会对这个block进行一次checksum验证,验证这个block的数据总量是否正确。如果不一致,说明这个block已损坏,客户端会通知NN,再从其他节点上读取该block,NN收到消息会重新备份一次,并发指令给这个DN将这个坏的block删掉

HDFS的shell操作

bin/hadoop fs command
OR
bin/hdfs dfs command# hadoop fs :  既可以对本地文件系统进行操作还可以操作分布式文件系统
# hdfs dfs :   只能操作分布式文件系统
  • 常用命令实例
# 查看文件目录
hadoop fs -ls

在这里插入图片描述

# 创建目录
hadoop fs -mkdir

在这里插入图片描述

# 删除文件或目录
hadoop fs -rm

在这里插入图片描述

# 移动或更名文件
hadoop fs -mv

在这里插入图片描述

相关文章:

hadoop_hdfs详解

HDFS秒懂 HDFS定义HDFS优缺点优点缺点 HDFS组成架构NameNodeDataNodeSecondary NameNodeClient NameNode工作机制元数据的存储启动流程工作流程 Secondary NameNode工作机制checkpoint工作流程 DataNode工作机制工作流程数据完整性 文件块大小块太小的缺点块太大的缺点 文件写入…...

【Linux】Linux命令行与环境变量

1.命令行 前⾯写C语⾔时,很少关注过 main 函数的参数,也没有考虑过 main 为什么会有参 数。 实际上在C语⾔中, main 函数⼀共有三个参数,在命令⾏部分先关注前两个参数: 1. argc:表示 main 函数接收到参…...

改变函数调用上下文:apply与call方法详解及实例

目录 改变函数调用上下文:apply与call方法详解及实例 一、什么是 apply 方法? 1、apply 语法 2、apply 示例 二、什么是 call 方法? 1、call 语法 2、call 示例 三、apply 和 call 的共同与差异 1、apply 和 call 的共同点 2、apply…...

k8s中的微服务

一、什么是微服务 用控制器来完成集群的工作负载,那么应用如何暴漏出去?需要通过微服务暴漏出去后才能被访问 Service是一组提供相同服务的Pod对外开放的接口。 借助Service,应用可以实现服务发现和负载均衡。 service默认只支持4层负载均…...

树莓派--AI视觉小车智能机器人--1.树莓派系统烧入及WiFi设置并进入jupyterlab

一、Raspberry Pi 系统烧入 使用树莓派,我们是需要有操作系统的。默认情况下,树莓派会在插入的SD卡上查找操作系统。这需要一台电脑将存储设备映像为引导设备,并将存储设备插入该电脑。大多数树莓派用户选择microSD卡作为引导设备。 1.1 下载…...

MacOS安装BurpSuite

文章目录 一、下载地址二、下载注册机三、安装教程四、启动burpsuit五、免责声明 一、下载地址 https://portswigger-cdn.net/burp/releases/download?productpro&version2024.7.1&typeMacOsx二、下载注册机 https://github.com/NepoloHebo/BurpSuite-BurpLoaderKey…...

【AI工具大全】《史上最全的AI工具合集》

一.AI编程类工具 1.CodeArts Snap CodeArts Snap是华为云研发的智能开发助手,覆盖软件开发全生命周期,提供代码生成、研发知识问答、智能协同等功能。通过自然语言编程,它能自动生成代码、解释代码逻辑、提供调试与检查,提升开发效率和软件质量。 2.ModelArts ModelArt…...

qt继承结构

一、 继承结构 所有的窗口类均继承自QWidget类,因此QWidget类本身包含窗口的特性。QWidget对象本身既可以作为独立窗口,又可以作为组件(子窗口)。 通过构造函数可以创建以上两种形态的QWidget: // 参数1:使…...

【HCIA复习作业】综合拓扑实验(已施工完)

一、实验要求 1.学校内部的HTTP客户端可以正常通过域名www.baidu.com访问到百度网络中的HTTP服务器 2.学校网络内部网段基于192.168.1.0/24划分,PC1可以正常访问3.3.3.0/24网段,但是Pc2不允许 3.学校内部路由使用静态路由,R1和R2之间两条链路…...

网络基础知识:交换机关键知识解析

了解交换机的关键知识对网络工程师至关重要。 以下是交换机的基础知识解析,包括其基本概念、工作原理和关键技术点: 01-交换机的基本概念 交换机是一种网络设备,用于在局域网(LAN)中连接多个设备,如计算机…...

基于System.js的微前端实现(插件化)

目录​​​​​​​ 写在前面 一、微前端相关知识 (一)概念 (二) 优势 (三) 缺点 (四)应用场景 (五)现有框架 1. qiankun 2. single-spa 3. SystemJ…...

MedSAM2调试安装与使用记录

目录 前言一、环境准备多版本cuda切换切换cuda版本二 安装CUDNN2.1 检查cudnn 二、使用步骤1.安装虚拟环境2.测试Gradio3.推理 总结 前言 我们在解读完MedSAM之后,迫不及待想尝尝这个技术带来的福音,因此验证下是否真的那么6。这不,新鲜的使…...

Linux 进程终止和进程等待

目录 0.前言 1. 进程终止 1.1 进程退出的场景 1.2 进程常见退出方法 1.2.1 正常退出 1.2.2 异常退出 2. 进程等待 2.1 进程等待的重要性 2.2 进程等待的方法 2.2.1 wait() 方法 2.2.2 waitpid() 方法 2.3 获取子进程 status 2.4 阻塞等待和非阻塞等待 2.4.1 阻塞等待 2.4.2 非阻…...

如何查看默认网关地址:详细步骤

在日常的网络配置与故障排查中,了解并正确查看默认网关地址是一项基础且至关重要的技能。默认网关是连接本地网络与外部网络(如互联网)的关键节点,它扮演着数据包转发的重要角色。无论是家庭网络、办公室网络还是更复杂的网络环境…...

什么是方法的返回值?方法有哪几种类型?静态方法为什么不能调用非静态成员?静态方法和实例方法有何不同?

什么是方法的返回值?方法有哪几种类型? 方法的返回值 是指我们获取到的某个方法体中的代码执行后产生的结果!(前提是该方法可能产生结果)。返回值的作用是接收出结果,使得它可以用于其他的操作! 我们可以…...

Qt开发——Qt项目打包、整合以及生成安装包保姆级教程(Windows系统)

目录 Windows下打包Qt项目 1.Qt系统环境变量的配置 2.打包 3.打包整合为一个.exe文件 4.生成安装包 做完了一个Qt项目之后,要干嘛呢,很显然要打包给别人,让别人也能使用这个软件,本期我们就来学习Qt打包,本期内容分…...

大数据-180 Elasticsearch - 原理剖析 索引写入与近实时搜索

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...

大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...

【Java后端】之 ThreadLocal 详解

想象一下,你有一个工具箱,里面放着各种工具。在多人共用这个工具箱的时候,很容易出现混乱,比如有人拿走了你的锤子,或者你找不到合适的螺丝刀。为了避免这种情况,最好的办法就是每个人都有自己独立的工具箱…...

2.链表(代码随想录——python版本)

2.链表(代码随想录——python版本) 链表的概念: 链表是由指针串联在一起的线性结构,一个节点(node)由两部分组成: 数据域——用来存储数据;指针域——用来指向下一个节点&#xf…...

6个解决“由于找不到vcruntime140_1.dll无法继续执行代码”问题的方法

vcruntime140_1.dll丢失的问题在Windows操作系统中相对常见,它通常与Microsoft Visual C Redistributable有关。本文将详细解读vcruntime140_1.dll丢失的原因、解决方法以及预防措施,帮助用户更好地应对这一问题。 一,vcruntime140_1.dll文件…...

常用数据库获取表,视图,列,索引信息

一、分页获取数据库用户的所有表 (1)、Oracle,OceanBase(Oracle内核版),DM 使用ALL_TABLES,需要添加当前用户作为查询条件 select a3.* from (select a2.* from (select a1.*, rownum rn1 from ( select t1.table_name, t2.comments fro…...

架构设计笔记-16-嵌入式系统架构设计理论与实践

目录 知识要点 嵌入式微处理器 存储器(memory) 内(外)总线逻辑 嵌入式操作系统(Embedded Operating System,EOS) 通用中间件 嵌入式中间件的一般架构 典型嵌入式中间件系统 案例分析 1…...

SpringSecurity使用介绍

1、SpringSecurity 1.1 SpringSecurity简介 Spring Security是基于Spring的安全框架,提供了包含认证和授权的落地方案;Spring Security底层充分利用了Spring IOC和AOP功能,为企业应用系统提供了声明式安全访问控制解决方案;SpringSecurity可…...

# Js 回调函数

Js 回调函数 文章目录 Js 回调函数回调函数的定义和使用回调函数的常见用途异步操作事件处理 回调函数的优点和缺点优点缺点 回调地狱解决回调地狱的方法使用 Promise使用 async/await 应用函数式编程中的回调函数高阶函数函数柯里化 异步编程中的回调函数回调函数的错误处理传…...

COOLSHELL文章:从Code Review 谈如何做技术【阅读笔记】

从Code Review 谈如何做技术原文链接:https://coolshell.cn/articles/11432.html#google_vignette 工程师需要有责任心和修养,不是做出来就了事,而是要做漂亮。 这也是山寨和工业的区别,只以做出来为标准是劳动密集型的装配生产线…...

3.1.1 ReactOS系统中二叉树创建一个MEMORY_AREA节点

二叉树中创建一个MEMORY_AREA节点: 二叉树中创建一个MEMORY_AREA节点: MmCreateMemoryArea() 参数AddressSpace是MADDRESS SPACE结构指针,所指向的数据结构代表着一个进程的用 户空间。 参数BaseAddress是个指针,用来给定和返回内…...

三、Linux 安装全攻略

Linux 安装全攻略 在当今的科技时代,Linux 操作系统以其稳定性、安全性和高度的可定制性而备受青睐。本文将详细介绍 Linux 的安装过程,包括关键步骤和下载资源获取方式,帮助你顺利踏上 Linux 之旅。 一、为什么选择 Linux Linux 有许多优…...

Ansible自动化工具

一、Ansible概述 1.1 什么是Ansible Ansible 是一个开源的自动化工具,用于配置管理、应用程序部署和任务自动化。它让你可以通过编写简单的 YAML 文件(剧本,Playbooks),轻松管理和配置多个服务器。Ansible 的特点是无…...

Flutter Container组件

Over the past few years, I’ve been fortunate to collaborate with interior designers, and there’s a distinct flair to their approach to crafting captivating interiors. It’s not just about arranging furniture randomly; they meticulously plan layouts, sele…...