HDFS 是单台或集群伪分布式部署
NameNode 简称NN
SecondaryNameNode简称SNN
DataNode简称DN
NN、DN、SNN部署在同一台机器上
hdfs启动的命令脚本:sbin/start-dfs.sh:即将linux文件上传到hdfs存储里面,相当于windows上传文件到安装在电脑上的百度云盘上
命令位置:bin/hdfs dfs -ls /
1、block块(hadoop官网)以字节为单位,表示文件块的大小
参数:dfs.blocksize 值:134217728 官方的配置是128M ,不满128M也算是占用一个块的大小
例如
一个文件130M ,130/128=1…2M,即该文件有两个块:128M 2M
一个文件260M,260/128=2…4M,即该文件有3个块:128M 128M 4M
2、文件副本数
dfs.replication 1 / 3(正常生产上文件副本数是3个)
指的是一个块的复制数(数据冗余)
实际块数:块数 * 块数副本数
实际存储空间:文件大小 * 块数副本数
3、HDFS架构设计:主从架构
NN 主 名称节点
DN 从 数据节点
SNN 第二主 第二名称节点(可换成NN节点,但是转换需要时间,会使数据丢失)
(1)NN
NN是文件系统的命名空间(维护文件目录结构系统,负责统筹整个文件系统的映射关系)
它是存储以下数据的:
a.文件名称
b.文件目录结构
c.文件属性(创建时间、权限、副本数)
d.文件对应哪些数据块,数据块对应分布到哪些datanode节点上(映射关系)
注意:
blockmap(文件对应哪些数据块,数据块对应分布在哪些机器上)------映射关系反映
namenode节点不会持久化存储这种映射关系,集群在启动时和运行时,datanode定期发送blockreport 给namenode,以此namenode在内存中动态维护这种映射关系!
作用:管理文件系统的命名空间,维护文件系统树,以两种文件永久保存在磁盘上:
命名空间镜像文件fsimage
编辑日志editlog
(2)DN
DN是存储数据块和块的校验和(文件传输可能丢字节数,块可能损坏,使用块的校验和显示异常进程)
与NN通信: 通过netty
a.每隔3秒发送一个心跳包
b.每10次心跳发送一个blockReport
主要作用: 文件数据块的读写(读取和写录文件的数据块,上传文件时,写录数据块,查看文件时,读取数据块)
(3)SNN
存储:fsimage + editlog(定期备份保存NN的核心文件(目录树文件),但是数据可能会丢失)
作用:定期合并fsimage+editlog文件为新的fsimage,推送给NN,称为检查点checkpoint
参数:dfs.namenode.checkpoint.period:3600s(每1h检查备份一次)
fsimage:镜像文件 —读写操作记录形成的目录文件系统树
editlog: 操作日志 —读写的操作记录
client客户端是要写数据到第一个块,第一个块写进第二个块,第二个块写进第三个块…
如果文件是有两个块,一个块有3个副本数,一般是写完第一个块的副本数之后再写第二个块,以此类推
另外读写都需经过NN
假如:
fsimage:全量14:00
editlog:增量14:00-15:00
15:00 时的镜像文件为14:00fsimage + 14:00~15:00editlog 合并成一个新的image
15:00 fsimage :15:00 的操作记录存放在15:00以后的操作日志中
(? 说的有点不明不白,放图)
SNN合并新的fsimage镜像文件,将新的镜像文件推给namenode,namenode生成新的fsimage,editlog生成新的操作日志editlog。
4、副本放置策略
服务器机架rack:存放机器
数据是以块存储在datanode的节点上
第一个副本存储规则:
假设我提交文件的所在机器就是datanode节点上,那么第一个块就是存储在本节点上:就近原则;
如果不是datanode节点,就随机挑选一台磁盘不太慢的cpu不太繁忙的节点上。
第二个副本存储规则:跨机架
放置于第一个副本的不同的机架节点上。
第三个副本存储规则:
放置于与第二个副本相同的机架的不同的节点上。
第一个副本写完后复制给第二个副本,第二个副本写完后复制给第三个副本,第三个副本写完后反馈给第一个副本
HDFS架构图官网自己看
over✌
----------------------------------------------------------------未完待续-----------------------------------------------