hdfs文件系统架构详解
官方hdfs分布式介绍
NameNode *Namenode负责文件系统的namespace以及客户端文件访问 *NameNode负责文件元数据操作,DataNode负责文件内容的处理,跟文件有关的额数据不会经过NameNode *NameNode负责安排数据存在那台机器上,负责控制和调配最近的副本给用户读取(调节hdfs的balance属性,执行balance命令) For the common case, when the replication factor is three, HDFS’s placement policy is to put one replica on one node in the local rack, another on a different node in the local rack, and the last on a different node in a different rack. 通常,当备份数为3的时候,HDFS的分配策略会将一个放置在本地节点,另一个放在同一个机架的不同节点上,最后一个放置在不同机架的节点上 *NameNode管理数据块的复制,周期性地接收心跳包(3s/次 10分钟GG)和blockreport(1h/次) Datanode *一个块保存了两个文件1:元文件(长度,校验,时间戳) 2:数据文件 *可以随时安全加入退出机器 *周期性地发送心跳包(3s/次 10分钟GG)和blockreport(1h/次) datanode路径如下(由etc/hadoop/core-site.xml文件决定) data/tmp/dfs/data/current/BP-1645940924-127.0.1.1-1497948488160/current/finalized/ -rw-rw-r-- 1 cen cen 3589 6月 20 16:50 blk_1073741825 #(数据文件) -rw-rw-r-- 1 cen cen 39 6月 20 16:50 blk_1073741825_1001.meta #(元数据) !!!值得一提的是,文件一旦创建,不能修改文件内容 文件损坏处理 *datanode读取block的时候会计算checksum *与创建时候的checksum进行比对,若不一致则执行损坏处理 *让客户端读取其他datanode节点的数据 *NameNode标记此block已GG,用其他块数据覆盖本节点 *datanode每三周进行一次cehecksum工作 HDFS-NameNode存储在 *内存 *本地磁盘 1.fsimage(镜像文件) 2.edits(编辑日志) 第一次启动HDFS过程详解 0-> format (初始化文件系统) 1-> fsimage (生成镜像文件) 2-> Start NameNode (启动NameNode) *read fsimage (读取镜像文件) =======>>> SafeMode(进入HDFS文件系统的安全模式)<<<======= 3-> Start DataNode (启动DataNode) *注册 (向NameNode注册) *block report (向Namenode反馈块报告) 当 DataNodes blocks / total blocks = 99.999% =============>>> 30秒 CD 后退出安全模式<<<================ <<<安全模式期间,不能改变文件系统命名空间(元数据),如增 删 改,允许查看文件>>> 4-> create dir XXX (用户进行操作时候,内存中保存了修改,同时磁盘中修改了edits) 5-> put files XXX (同上) 6-> delete files XX (同上) 第二次启动HDFS 1-> NameNode *read fsimage (读取镜像文件) *read edits (读取编辑日志) *gen write fsimage (合并编辑日志,生成新的镜像文件,替换原来的文件) *gen write edits (生成空的编辑日志,替换原来的文件) 2-> DataNode ... ... ... SecondaryNameNode 功能:定时合并编辑日志和镜像文件,用于辅助NameNode 手动进入安全模式 bin/hdfs dfsadmin -safemode <enter | leave | get | wait> 进入 |离开 |查看状态|等待|