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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高中数学网盘资料(每题有解析和知识点)

一、究极超能学习资源高中版 一数作为播放量过亿的哔站up实力非同一般 链接:https://pan.baidu.com/s/1xrcAlq6wj_LMYHcbxAKAWg 提取码:7MBW 复制这段内容打开「百度网盘APP 即可获取」 二、必刷题高考合订本(刷题必备) 链接&am…

MongoDB的基本操作

🌷数据库准备 🎈Mongoshell 1.在指定目录下创建mongodb文件夹、其子文件log和data以及mongodb.log cd /home/ubuntu mkdir -p mongodb/data mkdir -p mongodb/log touch mongodb/log/mongodb.log 执行mongodb命令启动mongdb服务 mongod --dbpath /h…

如何利用 OCR 和文档处理,快速提高供应商管理效率 ?

在当今瞬息万变的商业环境中,有效的供应商管理通常需要处理大量实物文档,这带来了巨大的挑战。手动提取供应商名称、编号和其他关键信息等关键细节非常耗时、容易出错,并且会降低整体效率。 为了应对这些挑战,组织正在逐步采用自…

ImportError: numpy.core.multiarray failed to import

ImportError: DLL load failed while importing _multiarray_umath: 找不到指定的模块。 Traceback (most recent call last): File "E:\python_code\Smart_store\test_20241021\test03.py", line 1, in <module> import cv2 File "E:\anaconda3\…

信息安全工程师(60)计算机病毒分析与防护

计算机病毒分析 介绍 计算机病毒是一种人为制造的程序&#xff0c;它通过不同的途径潜伏或寄生在存储媒体&#xff08;如磁盘、内存&#xff09;或程序里。当某种条件或时机成熟时&#xff0c;它会自生复制并传播&#xff0c;使计算机的资源受到不同程度的破坏。 定义&#xf…

7、Vue2(二) vueRouter3+axios+Vuex3

14.vue-router 3.x 路由安装的时候不是必须的&#xff0c;可以等到使用的时候再装&#xff0c;如果之前没有安装的话&#xff0c;可以再单独安装。之前的终端命令行不要关闭&#xff0c;再重新开一个&#xff0c;还需要再package.json文件的依赖中添加。 如果忘记之前是否有安…

PPT自动化:Python如何修改PPT文字和样式!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 使用 Python 修改 PPT 文本内容📝 遍历所有幻灯片和文本框📝 设置和修改文本样式📝 复制和保留文本样式⚓️ 相关链接 ⚓️📖 介绍 📖 在日常工作中,PPT 的文字内容和样式修改似乎是一项永无止境的…

向日葵密码提取

向日葵密码提取 首先可以通过tasklist /svc来找一下程序PID 通过procdump来提取内存中的数据&#xff0c;从而从中提取密码。例如fastcode部分可以找到设备识别码&#xff0c; 临时密码会放在一个<f>标签中。 工具化 可以把工具用python语言自动化来做&#xff0c;…

SSD-Pytorch环境搭建(二)

系列文章目录 SSD-Pytorch环境搭建&#xff08;一&#xff09; SSD-Pytorch环境搭建&#xff08;二&#xff09; 文章目录 系列文章目录前言一、训练步骤1、本文使用VOC格式进行训练。2、训练前将标签文件放在VOCdevkit文件夹下的VOC2007文件夹下的Annotation中。 3、训练前将…

自己掏耳朵怎么弄干净?清洁耳朵掏耳神器推荐!

耳屎是人体的分泌物之一&#xff0c;很多人选择用传统挖耳勺或者棉签进行掏耳&#xff0c;殊不知这种行为会将耳屎越捅越深&#xff0c;甚至还会捅穿鼓膜&#xff01;那么缺少别人帮助的情况下&#xff0c;自己掏耳朵怎么弄干净呢&#xff1f;现在小编就给大家分享一款掏耳神器…

家庭事务管理系统|基于java和vue的家庭事务管理系统设计与实现(源码+数据库+文档)

家庭事务管理系统 目录 基于java和vue的家庭事务管理系统 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xff0c;阿里云…

React综合指南(三)

#1024程序员节&#xff5c;征文# 41、hooks的使用有什么注意事项 在使用Hooks的过程中&#xff0c;需要注意的两点是&#xff1a; 不要在循环&#xff0c;条件或嵌套函数中调用Hook&#xff0c;必须始终在React函数的顶层使用Hook。这是因为React需要利用调用顺序来正确更新…

配置nginx服务通过ip访问多网站

文章目录 第一种方法第二种方法 先关闭防火墙 # systemctl stop firewalld # setenforce 0第一种方法 #mntui 第二种方法 # vim /etc/nginx/conf.d/test_ip.conf # cat /etc/nginx/conf.d/test_ip.conf server {listen 192.168.234.100:80;#server_nameroot /test/100;loca…

基于neo4j的体育运动员问答问答系统

你是不是也为毕业项目伤透了脑筋&#xff1f;我们为你准备了一个创新且实用的技术项目——基于neo4j的体育运动员问答系统。无论你是对图数据库技术感兴趣&#xff0c;还是想在自然语言处理方面有所突破&#xff0c;这套系统都能让你在答辩时脱颖而出&#xff01; &#x1f3a…

filebeat接入nginx和mysql获取日志

下载nginx &#xff08;1&#xff09; 直接下载 yum install nginx -y&#xff08;2&#xff09;查看状态启动 systemctl start nginx systemctl status nginx&#xff08;3&#xff09;配置文件检查 nginx -t&#xff08;4&#xff09;端口检查 netstat -tulpn | grep :80&am…

Mybatis 中<where>的用法注意事项(附Demo)

目录 前言1. 问题所示2. 基本知识 #1024程序员节 | 征文# 前言 对于Java的基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 先从实战问…

uniapp使用html2canvas时,页面内的image元素模糊

不废话很简单只需要将image改成img就行 改之前 改之后 原因可能是因为uniapp里面的image标签做了某种处理

基于Java+Springboot+Vue开发的酒店客房预订管理系统

项目简介 该项目是基于JavaSpringbootVue开发的酒店客房预订管理系统&#xff08;前后端分离&#xff09;&#xff0c;这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能&#xff0c;同时锻炼他们的项目设计与开发能力。通过学习基于Java…

监控易监测对象及指标之:Kafka中间件JMX监控指标解读

监控易作为一款功能强大的监控软件&#xff0c;旨在为企业提供全方位的IT系统监控服务。其中&#xff0c;针对Kafka中间件的JMX监控是监控易的重要功能之一。本文将详细解读监控易中Kafka的JMX监控指标&#xff0c;帮助企业更好地理解并运用这些数据进行系统性能调优和故障排查…

开启RefCell debug_refcell feature查看借用冲突位置

文章目录 背景分析解决方法 本文解决两个问题&#xff1a; 开启rust源码库中的feature开启debug_refcell feature的方法查看 borrow 借用冲突的位置 背景 使用 RefCell 来实现内部可变性是在 Rust 开发中常用的方式&#xff0c;但是当逻辑复杂起来&#xff0c;常常会有可变借…