Hadoop-005-HDFS分布式文件存储原理
一、HDFS数据如何存储
分布式存储:每个服务器(节点)存储文件的一部分, 本文提到的part只是为方便理解, 指的文件部分数据, 并不是真实存在的概念
二、HDFS如何保证安全
问题1、文件大小不同,如何管理?
HDFS集群设定统一的管理单位: Block块, 它是HDFS集群最小的物理单位, 默认大小是256MB,支持修改, 文件分成3个Part,每个Part又分为3个Block块存入对应服务器

问题2、如何避免某个Block丢失或者损坏?
如上所示分为多个Block块存储, 如果任意一个Block块丢失就导致文件不完整了
Block块越多,损坏的几率就越大
通过配置多个副本可以解决, 给每个Block块设置2个副本(可修改),每个块都有2个副本备份在其它服务器上,大大提升了数据安全性; 如下图所示

三、Block的配置
1、如何配置HDFS数据块的副本数量
如果需要自定义这个属性,请修改每一台服务器的hdfs-site.xml文件,并设置此属性。这个属性默认是3,一般情况下无需主动配置
<property><name>dfs.replication</name><value>3</value>
</property>
除了配置文件外,可在上传文件的时候,临时决定被上传文件以多少个副本存储。
hadoop fs -D dfs.replication=2 -put test.txt /
如上命令,就可以在上传test.txt的时候,临时设置其副本数为2
对于已经存在HDFS的文件,修改dfs.replication属性不会生效,如果要修改已存在文件可以通过命令
hadoop fs -setrep [-R] 2 path
如上命令,指定path的内容将会被修改为2个副本存储。-R选项可选,使用-R表示对子目录也生效。
2、fsck命令检查文件的副本数
使用hdfs提供的fsck命令来检查文件的副本数
hdfs fsck path [-files [-blocks [-locations]]]fsck可以检查指定路径是否正常-files可以列出路径内的文件状态-files -blocks 输出文件块报告(有几个块,多少副本)-files -blocks -locations 输出每一个block的详情
3、调整Block块默认大小
hdfs默认设置为256MB一个,也就是1GB文件会被划分为4个block存储。
Block块大小可以在 hdfs-site.xml中配置如下属性参数调整:
<property><name>dfs.blocksize</name><value>268435456</value><description>设置HDFS块大小,单位是b,如上设置为256MB</description>
</property>
四、Namenode元数据
1、如何管理Block块
NameNode基于一批edits和一个fsimage文件的配合, 完成整个文件系统的管理和维护
edits文件,是一个流水账文件,记录了hdfs中的每一次操作,以及本次操作影响的文件其对应的block, 将全部的edits文件,合并为最终结果,即可得到一个FSImage文件。
合并元数据的事情就是SecondaryNameNode干的, 它会通过http从NameNode拉取数据(edits和fsimage)
然后合并完成后提供给NameNode使用。
1. 每次对HDFS的操作,均被edits文件记录
2. edits达到大小上限后,开启新的edits记录
3. 定期进行edits的合并操作
如当前没有fsimage文件, 将全部edits合并为第一个fsimage
如当前已存在fsimage文件,将全部edits和已存在的fsimage进行合并,形成新的fsimage
对于元数据的合并,是一个定时过程,基于以下只要有一个达到条件就执行。:
dfs.namenode.checkpoint.period,默认3600(秒)即1小时
dfs.namenode.checkpoint.txns,默认1000000,即100W次事务检查是否达到条件,默认60秒检查一次,基于:
dfs.namenode.checkpoint.check.period,默认60(秒),来决定
2、HDFS写入流程
1. 客户端向NameNode发起请求
2. NameNode审核权限、剩余空间后,满足条件允许写入,并告知客户端写入的DataNode地址
3. 客户端向指定的DataNode发送数据包
4. 被写入数据的DataNode同时完成数据副本的复制工作,将其接收的数据分发给其它DataNode
5. DataNode1复制给DataNode2,然后基于DataNode2复制给Datanode3和DataNode4
6. 写入完成客户端通知NameNode,NameNode做元数据记录工作

注意:
1.NameNode不负责数据写入,只负责元数据记录和权限审批
2.客户端直接向1台DataNode写数据,这个DataNode一般是离客户端最近(网络距离)的那一个
3.数据块副本的复制工作,由DataNode之间自行完成(构建一个PipLine,按顺序复制分发,如图1给2, 2给3和4)
3、HDFS读取流程
1.客户端向NameNode申请读取某文件
2.NameNode判断客户端权限等细节后,允许读取,并返回此文件的block列表
3.客户端拿到block列表后自行寻找DataNode读取即可

1.数据同样不通过NameNode提供
2.NameNode提供的block列表,会基于网络距离计算尽量提供离客户端最近的
这是因为1个block有3份,会尽量找离客户端最近的那一份让其读取
相关文章:
Hadoop-005-HDFS分布式文件存储原理
一、HDFS数据如何存储 分布式存储:每个服务器(节点)存储文件的一部分, 本文提到的part只是为方便理解, 指的文件部分数据, 并不是真实存在的概念 #mermaid-svg-qjJMG6r2bzRNcWkF {font-family:"trebuchet ms",verdana,arial,sans-s…...
【多线程入门篇】 创建线程以及线程的属性
大家好呀 我是浪前 今天给大家讲解的是创建线程以及线程的属性 祝愿所有点赞关注的人,身体健康,一夜暴富,升职加薪迎娶白富美!!! 点我领取迎娶白富美大礼包 🍓多线程编程: 前言: 我们为什么不用多进程?…...
三十四、Python基础语法(文件操作-上)
一、介绍 文件:可以储存在长期储存设备上的一段数据,在计算机储存的数据都是二进制的形式储存的,我们用软件打开文件不是看见0和1是因为软件会自动将二进制数据进行转换。 二、文件操作 1.打开文件 打开文件:文件是在硬盘中储…...
【大咖云集,院士出席 | ACM独立出版】第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024,11月15-17日)--冬季主会场
第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024)--冬季主会场 2024 4th International Conference on Big Data, Artificial Intelligence and Risk Management 官方信息 会议官网:www.icbar.net 2024 4th International Conference on Big Data, Art…...
03 Oracle进程秘籍:深度解析Oracle后台进程体系
文章目录 Oracle进程秘籍:深度解析Oracle后台进程体系一、Oracle后台进程概览1.1 DBWn(Database Writer Process)1.2 LGWR(Log Writer Process)1.3 SMON(System Monitor Process)1.4 PMON&#…...
AndroidStudio通过Bundle进行数据传递
作者:CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境:AndroidStudio 目录 1.新建活动 2.修改页面布局 代码: 效果: 3.新建类ResultActivity并继承AppCompatActivity 4.新建布局文件activity_result.xml 代…...
Linux篇(文件管理命令)
目录 一、Linux下文件命名规则 1. 可以使用哪些字符 2. 文件名的长度 3. 文件名的大小写 4. Linux文件扩展名 二、目录创建与删除 1. 目录创建 1.1. mkdir创建目录 1.2. mkdir -p 递归创建目录 1.3. 使用mkdir同时创建多个目录 2. 目录删除(必须是空目录&…...
大数据新视界 -- 大数据大厂之 Impala 性能优化:数据存储分区的艺术与实践(下)(2/30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
【数据结构】B树
B树(B-Tree)是一种自平衡的多叉搜索树,广泛应用于数据库系统和文件系统中,以便高效地进行数据存储和检索。它的设计目标是减少磁盘I/O操作,使得在大量数据的情况下依然能够进行快速的查找、插入和删除操作。 B树的特点…...
Docker 容器网络模式详解
Docker 容器网络模式详解 1.1 引言 1.1.1 Docker 网络简介 Docker 是一个开源的应用容器引擎,它允许开发者将应用和依赖打包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器采用沙箱机制,彼此…...
吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)4.11
目录 第四门课 卷积神经网络(Convolutional Neural Networks)第四周 特殊应用:人脸识别和神经风格转换(Special applications: Face recognition &Neural style transfer)4.11 一维到三维推广(1D and 3…...
小游戏开发,出现了降本增效的技术?
中国经济下行大周期下,要说受影响程度较小的,非游戏行业莫属了。 小游戏的快速增长主要得益于其便捷的使用方式和轻量化的特点。小游戏通常无需下载,即点即玩,适合在碎片时间内进行娱乐,这种特性吸引了大量用户。此外…...
(4)Java 编程基础概览:Java中的输入输出操作与代码注释详解
目录 1. 控制台输出操作2. 控制台输入操作代码解释:3. 代码注释3.1 单行注释3.2 多行注释3.3 文档注释3.4 注释的重要性3.5 注意事项在Java编程语言中,输入与输出(I/O)操作扮演着举足轻重的角色。它们允许程序与外界环境进行数据的交互,无论是从用户处获取信息,还是向用户…...
Git使用指南
目录 工作机制基本框架:流程图 基本命令分支操作远程仓库本地仓库关联远程仓库 参考 工作机制 基本框架: Workspace:开发者工作区,也就是你当前写代码的目录,它一般保持的是最新仓库代码。Index / Stage:暂存区,最早…...
【linux】再谈网络基础(一)
1. 再谈 "协议" 协议是一种 "约定",在读写数据时, 都是按 "字符串" 的方式来发送接收的. 但是这里我们会遇到一些问题: 如何确保从网上读取的数据是否是完整的,区分缓冲区中的由不同客户端发来的数据 2. 网…...
Unknown at rule @tailwindscss(unknownAtRules)
一、前言 整合 tailwindcss 后,发现指令提示警告 Unknown at rule tailwindscss(unknownAtRules),其实是 vscode 无法识别 tailwindscss 指令,不影响使用,但是对于我这种有编程洁癖的人来说,有点膈应。 二、解决方案…...
IDEA - 快速去除 mapper.xml 黄色警告线和背景色----简化版
1.打开设置 2.去掉黄色警告线设置 3.去掉背景色设置 4.示范图...
高级 SQL 技巧详解
文章目录 高级 SQL 技巧详解一、引言二、窗口函数1、窗口函数的使用1.1、RANK() 函数示例1.2、常用窗口函数 三、公共表表达式(CTE)2、CTE 的使用2.1、CTE 示例 四、索引优化3、索引的创建与优化3.1、创建索引3.2、索引类型与注意事项 五、事务管理4、事…...
移除元素(java)
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作: 更改…...
【Linux】shell脚本:检测文件是否存在,如存在则删除
通常,可以使用[ -f <file> ]来检查文件是否存在,使用rm <file>来删除文件。 以下是一个示例脚本,用于检测一个文件是否存在,并在存在时删除它: #!/bin/bash # 定义要检查的文件路径 file_path"/…...
HP-Socket技术债务管理会议决策记录:选项、理由与结果
HP-Socket技术债务管理会议决策记录:选项、理由与结果 【免费下载链接】HP-Socket High Performance TCP/UDP/HTTP Communication Component 项目地址: https://gitcode.com/gh_mirrors/hp/HP-Socket 作为一款高性能TCP/UDP/HTTP通信组件库,HP-So…...
RPA-Python与pytest-microsoftgraph-python-sdk集成:pytest-microsoftgraph-python-sdk测试自动化
RPA-Python与pytest-microsoftgraph-python-sdk集成:pytest-microsoftgraph-python-sdk测试自动化 【免费下载链接】RPA-Python Python package for doing RPA 项目地址: https://gitcode.com/gh_mirrors/rp/RPA-Python RPA-Python是一款强大的Python RPA工具…...
RWKV7-1.5B-g1a参数详解:为何默认top_p=0.3更适合中文生成?语言分布实证
RWKV7-1.5B-g1a参数详解:为何默认top_p0.3更适合中文生成?语言分布实证 1. 模型概述 rwkv7-1.5B-g1a是基于RWKV-7架构的多语言文本生成模型,特别适合中文场景下的基础问答、文案续写和简短总结任务。作为1.5B参数量的轻量级模型,…...
Nunchaku FLUX.1-dev 结合Transformer架构:提升图像生成一致性与细节
Nunchaku FLUX.1-dev 结合Transformer架构:提升图像生成一致性与细节 最近在尝试各种文生图模型时,我发现了一个挺有意思的现象:很多模型在处理简单描述时表现不错,但一旦遇到包含多个对象、复杂关系或者长段描述的提示词&#x…...
MFCMouseEffect:把桌面输入反馈这件事,做成一个真正可扩展的引擎
MFCMouseEffect:把桌面输入反馈这件事,做成一个真正可扩展的引擎 很多录屏、教程、演示和桌面工具,功能本身已经足够好,但一到“用户看你怎么操作”这一步,体验就会突然掉下来。 为什么? 因为点击不够明…...
Cursor最新版0.44.11配置DeepSeek-R1模型保姆级教程(含报错解决方案)
Cursor 0.44.11深度适配DeepSeek-R1模型全流程指南 当技术爱好者第一次在Cursor中尝试调用DeepSeek-R1模型时,往往会遇到各种"水土不服"的情况。就像刚拿到新相机的摄影师需要调整镜头焦距一样,我们需要对Cursor进行精确配置才能充分发挥这个强…...
从国科大NLP课程笔记出发:手把手教你用Python复现CYK句法分析算法
从理论到实践:用Python实现CYK句法分析算法的完整指南 在自然语言处理领域,句法分析是理解句子结构的关键步骤。CYK算法作为一种经典的句法分析技术,因其简洁高效的特点,成为许多NLP工程师工具箱中的必备武器。本文将带你从零开始…...
Redis管理效率革命:AnotherRedisDesktopManager实战指南
Redis管理效率革命:AnotherRedisDesktopManager实战指南 【免费下载链接】AnotherRedisDesktopManager qishibo/AnotherRedisDesktopManager: Another Redis Desktop Manager 是一款跨平台的Redis桌面管理工具,提供图形用户界面,支持连接到Re…...
DXVK解决方案:基于Vulkan的Direct3D兼容层性能优化指南
DXVK解决方案:基于Vulkan的Direct3D兼容层性能优化指南 【免费下载链接】dxvk Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk DXVK是一个基于Vulkan的Direct3D 8/9/10/11实现层…...
别再拍脑袋定权重了!多目标规划中权重和ε值确定的3种科学方法
多目标规划中权重与约束值的科学确定方法:从理论到实践 1. 多目标规划的核心挑战与参数确定的重要性 在现实世界的决策场景中,我们很少遇到仅需优化单一目标的简单问题。无论是产品设计、资源分配还是投资组合管理,决策者往往需要同时考虑多个…...
