NameNode(NN):
接受客户端的读写服务,
保存metadate信息:
文件owership 和 permissions
文件包含哪些块
Block保存在哪个DataNode(由DataNode启动时上报)
NameNode 的metadate 信息在启动后会加载到内存中
metadate存储到磁盘的文件名为“fsimage”
Block的位置信息不会保存到fsimage
edits记录对metadate的操作日志
SecondaryNameNode(SNN):
主要工作是帮助NN合并edits log,减少NN启动时间
SNN执行合并时机
根据配置文件设置的时间间隔fs.checkpoint.period 默认3600秒
根据配置文件设置edits log大小 fs.checkpoint.size规定edits文件的最大值,默认是64MB
它也可以备份NameNode的一部分数据,但不是实时的备份所有的数据。
存储数据(Block)
启动DN线程的时候会向NN汇报block信息
通过向NN发送心跳保持与其联系(3秒一次),如果NN10分钟都没有收到DN的心跳,则认为其已经lost,并copy其上的block到其他DN。(这个地方的copy是copy其他DN上与其相同的block)
Block的副本放置策略
第一个副本:放置在上传文件的DN,如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。
第二个副本:放置在与第一个副本不同的机架的节点上
第三个副本:与第二个副本相同机架的几点上
更多副本:随机节点
HDFS读流程
HDFS 写流程
HDFS文件权限
与linux 文件权限类似
r:read w:write x : execute,权限x对于文件忽略,对于文件夹表示是否允许访问其内容
如果linux系统用户lh使用hadoop命令创建一个文件,那么这个文件在HDFS中owner就是lh。
HDFS的权限目的:阻止好人做错事,而不是阻止坏人做坏事。HDFS相信,你告诉我你是谁,我就认为你是谁。
HDFS 安全模式
namenode 启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。
一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志。
此刻namenode运行在安全模式。即namenode的文件系统对于客户端来说只是只读的。(显示目录,显示文件内容等。写,删除,重命名等操作都会失败)。
在此阶段NamenNode手机各个DataNode的报告,当数据块达到最小副本数以上时,会被认为是安全的,在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束。
当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是由NameNode维护的,而是以块列表的形式存储在DataNode中.