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

HDFS 核心原理

HDFS 核心原理

HDFS(Hadoop Distribute File System)是一个分布式文件系统

文件系统是操作系统提供的磁盘空间管理服务,只需要我们指定把文件放到哪儿,从哪个路径读取文件句可以了,不用关心文件在磁盘上是如何存放的

当文件所需空间大于本机磁盘空间时,如何处理呢?

一是加磁盘,但加到一定程度就有限制了

二是加机器,用远程共享目录的方式提供网络化的存储,这种方式可以理解为分布式文件系统的雏形,可以把不同文件放入不同的机器中,空间不足了可以继续加机器,突破了存储空间的限制

但这个方式有多个问题

(1)单机负载可能极高

例如某个文件是热门,很多用户经常读取这个文件,就使此文件所在机器的访问压力极高

(2)数据不安全

如果某个文件所在的机器出现故障,这个文件就不能访问了,可靠性很差

(3)文件整理困难

例如想把一些文件的存储位置进行调整,就需要看目标机器的空间是否够用,并且需要自己维护文件位置,如果机器非常多,操作就极为复杂

HDFS的解决思路

 

HDFS是个抽象层,底层依赖很多独立的服务器,对外提供统一的文件管理功能,对于用户来讲,感觉就想在操作一台机器,感受不到HDFS下面的多台服务器

例如用户访问HDFS中的 /a/b/c.mpg 这个文件,HDFS负责从底层相应服务器中读取,然后返回给用户,这样用户只需和HDFS打交道,不关心这个文件是怎么存储的


写文件示例

 

例如用户需要保存一个文件 /a/b/xxx.avi 

HDFS首先会把这个文件进行分割,例如分为4块,然后分别放到不同服务器上


这样做有个好处,不怕文件太大,并且读文件的压力不会全都集中在一台服务器上

但如果某台服务器坏了,文件就读不全了

HDFS为保证文件可靠性,会把每个文件块进行多个备份

块1 : A B C 
块2 : A B D
块3 : B C D 

块4 : A C D


这样文件的可靠性就大大增强了,即使某个服务器坏了,也可以完整读取文件

同时还带来一个很大的好处,就是增加了文件的并发访问能力,比如多个用户读取这个文件时,都要读块1,HDFS可以根据服务器的繁忙程度,选择从哪台服务器读块1

元数据的管理

HDFS中存了哪些文件?

文件被分成了哪些块?

每个块被放在哪台服务器上?

……

这些都叫做元数据,这些元数据被抽象为一个目录树,记录了这些复杂的对应关系

这些元数据由一个单独的模块进行管理,这个模块叫做 NameNode

存放文件块的真实服务器叫做 DataNode

所以用户访问HDFS的过程可以理解为:

用户 -> HDFS -> NameNode -> DataNode

HDFS 优点

(1)容量可以线性扩展

(2)有副本机制,存储可靠性高,吞吐量增大

(3)有了NameNode后,用户访问文件只需指定HDFS上的路径

转载于:https://www.cnblogs.com/jun1019/p/6260599.html

相关文章:

  • 正则表达式学习1
  • 第一章:TypeScript
  • 进制准换 base_convert()
  • yii框架rules规则
  • PWA桌面应用开发
  • php面试题 汇集2
  • 从底层了解Vue3
  • 六大设计原则(读书笔记)
  • BZOJ1588 营业额统计 (Splay)
  • 小团队的PM和开发方法
  • 第二个商业设想
  • 如何让.net 2003中的Panel正常实现Dock
  • innodb引擎redo文件维护
  • 清理
  • Xcode8.2 继续使用插件
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • express如何解决request entity too large问题
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Js基础——数据类型之Null和Undefined
  • JS字符串转数字方法总结
  • PAT A1050
  • Swift 中的尾递归和蹦床
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 编写符合Python风格的对象
  • 从零开始在ubuntu上搭建node开发环境
  • 大主子表关联的性能优化方法
  • 入口文件开始,分析Vue源码实现
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 王永庆:技术创新改变教育未来
  • 微信小程序--------语音识别(前端自己也能玩)
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #{} 和 ${}区别
  • #HarmonyOS:Web组件的使用
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (done) 两个矩阵 “相似” 是什么意思?
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (三) diretfbrc详解
  • (十六)串口UART
  • (顺序)容器的好伴侣 --- 容器适配器
  • (五)c52学习之旅-静态数码管
  • *1 计算机基础和操作系统基础及几大协议
  • *p++,*(p++),*++p,(*p)++区别?
  • . Flume面试题
  • .NET Standard 的管理策略
  • /proc/vmstat 详解
  • @EnableWebMvc介绍和使用详细demo
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [ JavaScript ] JSON方法
  • []我的函数库
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [ES-5.6.12] x-pack ssl