NameNode(NN)
基于内存存储
只存在内存中
持久化
NameNode主要功能:
接受客户端的读写服务
收集DataNode汇报的Block列表信息
NameNode保存metadata信息包括
文件owership和permissions
文件大小,时间
(Block列表:Block偏移量),位置信息
Block每副本位置(由DataNode上报)
NameNode持久化
NameNode的metadate信息在启动后会加载到内存
metadata存储到磁盘文件名为”fsimage”
Block的位置信息不会保存到fsimage
edits记录对metadata的操作日志。。。redis
Block的副本放置策略
第一个副本:放置在上传文件的DN;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。
第二个副本:放置在于第一个副本不同的 机架的节点上。
第三个副本:与第二个副本相同机架的节点。
更多副本:随机节点
DataNode(DN)
本地磁盘目录存储数据(Block),文件形式
同时存储Block的元数据信息文件
启动DN时会向NN汇报block信息
通过向NN发送心跳保持与其联系(3秒一次),如果NN 10分钟没有收到DN的心跳,则认为其已经lost,并copy其上的block到其它DN
SecondaryNameNode(SNN)
它不是NN的备份(但可以做备份),它的主要工作是帮助NN合并edits log,减少NN启动时间。
SNN执行合并时机
根据配置文件设置的时间间隔fs.checkpoint.period 默认3600秒
• 根据配置文件设置edits log大小 fs.checkpoint.size 规定edits文件的最大值默认是64MB
SNN合并流程
HDFS写流程
Client:
切分文件Block
按Block线性和NN获取DN列表(副本数)
验证DN列表后以更小的单位流式传输数据
各节点,两两通信确定可用
Block传输结束后:
DN向NN汇报Block信息
DN向Client汇报完成
Client向NN汇报完成
获取下一个Block存放的DN列表
。。。。。。
最终Client汇报完成
NN会在写流程更新文件状态
HDFS读流程
Client:
和NN获取一部分Block副本位置列表
线性和DN获取Block,最终合并为一个文件
在Block副本列表中按距离择优选取
HDFS文件权限 POSIX
与Linux文件权限类似
r: read; w:write; x:execute
权限x对于文件忽略,对于文件夹表示是否允许访问其内容
如果Linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个文件在HDFS中owner就是zhangsan。
HDFS的权限目的:阻止好人错错事,而不是阻止坏人做坏事。HDFS相信,你告诉我你是谁,我就认为你是谁。
HDFS缺点
低延迟数据访问
比如毫秒级
低延迟与高吞吐率
小文件存取
占用NameNode 大量内存
寻道时间超过读取时间
并发写入、文件随机修改
一个文件只能有一个写者
仅支持append
安全模式
namenode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。
一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志。
此刻namenode运行在安全模式。即namenode的文件系统对于客服端来说是只读的。(显示目录,显示文件内容等。写、删除、重命名都会失败)。
在此阶段Namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的, 在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束
当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是由namenode维护的,而是以块列表形式存储在datanode中。
集群角色
namenode
数据元数据
内存存储,不会有磁盘交换
持久化(fsimage,eidts log)
不会持久化block的位置信息
block:偏移量,因为block不可以调整大小,hdfs,不支持修改文件
偏移量不会改变
datanode
block块
磁盘
面向文件,大小一样,不能调整
副本数,调整,(备份,高可用,容错/可以调整很多个,为了计算向数据移动)
SN
NN&DN
心跳机制
DN向NN汇报block信息
安全模式
写
线性上传block
先和NN通信,元数据,获取第一个block的节点信息(3副本,选择机制)
和DN通信:pipeline:C和1stDN有socket,1stDN和2edDN有socket。。。。
小片传输:4K,C给1stDN,1stDN同时本机缓存,瞬间放入下游socket中
当block传输完毕:block自身的网络I/O时间,时间线重叠的艺术
DN会向NN汇报自己新增的block
C向NN汇报blockX传输完成给我下一个block节点信息
全部传输完成,NN更新元数据状态可用
读
线性读取block,不会有并发,只有一个网卡
距离:择优选取同机架,同节点
NN每次只给一部分block信息