HDFS架构及其副本放置策略

架构设计
在这里插入图片描述
一、block块
HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M
HDFS的Block大的原因是最小化寻道时间。把一个数据块设计的足够大,就能够使得数据传输的时间显著地大于寻找到Block所在时间。这样,传输一个由多个Block组成的文件的时间就取决于磁盘的传输速率
实际数据存在datanode的block里,block的映射(即Block Map)在namenode里
HDFS中的文件将会按块大小进行分解,并作为独立的单元进行存储

HDFS中一个块只存储一个文件的内容
例如:一碗水130ml 一个瓶子规格容量128ml
只能2个瓶子:第1个装满128ml 第二个装不满,实为2ml

(1)NameNode(NN)
NN:名称节点
存储: 文件系统的命名空间
a.文件名称
b.文件目录结构
c.文件属性(权限 创建时间 副本数)
d.文件对应的哪些块(副本块)–》块对应在哪些DN节点上
不会持久化存储这个映射关系,是通过集群的启动和运行时,DataNode定期发送blockReport给NameNode,以此NameNode在【内存】中动态维护这种映射关系
作用:管理文件系统的命名空间

(2)DateNode(DN)
用来存储数据块和校验数和以及读写数据
与NN通信的参数是dfs.heartbeat.interval 3秒 和 dfs.blockreport.intervalMsec 21600000ms=6小时

(3)Secondary NameNode(SNN)
作用: 定期合并NN节点的fsimage+editlog为新的fsimage,推送给NN,简称检查点

edits_0000000000000000404-0000000000000000404
edits_0000000000000000405-0000000000000000406 拷贝editlog
edits_inprogress_0000000000000000407 正在写的日志
fsimage_0000000000000000404       拷贝fsimage 
fsimage_0000000000000000404.md5
fsimage_0000000000000000406
fsimage_0000000000000000406.md5
edits_0000000000000000208-0000000000000000403
edits_0000000000000000405-0000000000000000406
fsimage_0000000000000000404 包含了过往的所有的editlog001-404
fsimage_0000000000000000404.md5
fsimage_0000000000000000406
fsimage_0000000000000000406.md5

1.滚动新的editlog文件 edits_inprogress_0000000000000000407
2.将edits_0000000000000000405-0000000000000000406
fsimage_0000000000000000404 拷贝到snn节点
3.合并为新的image fsimage_0000000000000000406
4.将检查点的fsimage_0000000000000000406文件推送给nn
5.滚动edits_inprogress_0000000000000000407 写满,就滚动到下一个editlog 比如edits_inprogress_0000000000000000408

在这里插入图片描述

二、副本数在这里插入图片描述
HDFS中副本的容错机制,把块打散分布在不同的节点,
生产上副本数dfs.replication一般也是官方默认参数: 3份
例如:块大小128m 副本数3份,一个文件260m,请问多少块,多少实际存储?
260%128=2…4m 3个块*3个副本=9个块 实际存储260m * 3 =780m

三、副本放置策略
在这里插入图片描述第一个副本: 提交节点为DN,自己写一份;否则为集群外提交,则随机挑选一个不太慢、cpu不太忙的节点上
第二个副本:放置在于第一个副本的不同机架的节点上
第三个副本: 与第二个副本相同机架的不同节点上
生产上考量副本数是否需要减少,从两方面一是:存储空间不够,二是:数据量太快太多
一般生产上副本数量是3分,历史数据要进行迁移,可迁移至阿里云的oss存储或者AWS的S3存储
代码上的命令执行:
hdfs dfs -ls hdfs://hadoop001:9000/
hdfs dfs -ls oss://hadoop001:9000/
hdfs dfs -ls s3://hadoop001:9000/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值