本文共计876字,预计阅读时长五分钟
一、本质
HDFS(Hadoop Distributed File System)是一种适合运行在通用硬件上的分布式文件系统
二、HDFS解决了什么问题
1.海量数据存储和吞吐
2.write-once-read-many存取模式(无数据一致性问题)
3.高度容错
4.处理非结构化数据
三、系统架构
1. NameNode
1)作用
•管理着文件系统命名空间
•在内存中存储元数据
-文件名目录名及它们之间的层级关系
-文件目录的所有者及其权限
-每个文件块的名及文件有哪些块组成
•保存文件,block,datanode之间的映射关系
2)单点问题
•全Hadoop系统只有一个NameNode
3)两种解决方案
•将hadoop元数据写入到本地文件系统的同时,再实时同步到一个远程挂载的网络文件系统
•运行一个secondaryNameNode
2. SecondaryNameNode
1)作用
•元信息持久化到磁盘
-存放元信息的文件是fsimage
-存放对元信息的操作的文件是edits
•定时到NameNode去获取edit logs,并更新到fsimage[Secondary NameNode自己的fsimage]
•一旦它有了新的fsimage文件,它将其拷贝回NameNode中。
• NameNode在下次重启时会使用这个新的fsimage文件,从而减少重启的时间。
3. DataNode
1)作用
•负责存储数据块,负责为系统客户端提供数据块的读写服务
•根据NameNode的指示进行创建、删除和复制等操作
•心跳机制,定期报告文件块列表信息
• DataNode之间进行通信,块的副本处理
2) block
• HDFS读写的基本单位
• HDFS默认数据块大小64MB,一般磁盘块是512B
•块增大可以减少寻址时间,降低寻址时间/文件传输时间
•块过大会导致整体任务数量过小,降低作业处理速度
四、三个策略
1.机架感知策略(Block副本的放置策略)
•第一个副本,在客户端相同的节点(如果客户端是集群外的一台机器,就随机算节
点,但是系统会避免挑选太满或者太忙的节点)
•第二个副本,放在不同机架(随机选择)的节点
•第三个副本,放在与第二个副本同机架但是不同节点上。
2.数据完整性校验
1)校验和
检测损坏数据的常用方法是在第一次进行系统时计算数据的校验和,在通道传输过程中,如果新生成的校验和不完全匹配原始的校验和,那么数据就会被认为是被损坏的。
2)数据块检测程序DataBlockScanner
在DataNode节点上开启一个后台线程,来定期验证存储在它上所有块,这个是防止物理介质出现损减情况而造成的数据损坏。
3.容错-可靠性措施
1)故障检测
- DataNode
•心跳包(检测是否宕机)
•快报告(安全模式下检测)
•数据完整性检测(校验和比较)
- NameNode
•日志文件
•镜像文件
2)空间回收机制
- Trash目录
五、HDFS和MapReduce
六、HDFS的局限
1.存储小文件(不建议)
2.大量随机读(不建议)
3.需要对文件修改(不支持)
4.多用户写入(不支持)
以上.
如果觉得本文对你有帮助,可以帮忙点个赞表示支持吗,谢谢!
如果有任何意见和建议,也欢迎再下方留言~
关注这个公众号,每天22:00会有三道大数据面试题准时推送给你哦~
本文来自企鹅号 - 每天学点java干货媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文来自企鹅号 - 每天学点java干货媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。