老规矩,先上官网链接:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
1.Hadoop Distribute FileSystem
(1)易于扩展的分布式文件系统
(2)运行在大量廉价机器上,提供容错机制
(3)为大量用户提供性能不错的文件存取服务
2.架构图
3.Namenode
(1)NameNode 是一个中心服务器,单一节点,负责管理文件系统的名字空间以及客户端对文件的访问。
(2)文件操作,Namenode负责文件元数据的操作,DataNode负责处理文件内容的读写请求,跟文件内容相关的数据流不经NameNode。只会询问它和那个DataNode联系,否则NameNode会成为系统的瓶颈。
(3)副本存放在那些DataNode由NameNode控制。根据全局情况作出块放置的决定。读取文件时,NameNode尽量先让用户读取最近的副本,降低带块消耗和读取时延。
(4)NameNode全权管理数据块的复制,它周期性地从集群中的每个DataNode接收心跳信号和块状态报告(BlockReport),接收到心跳信号以为这该DataNode节点工作正常。块状态报告包含了一个该DataNode所有的数据块列表。
4.DataNode
(1)一个数据块在DataNode以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
(2)DataNode启动后向Namenode注册,通过后,周期性的向NameNode报告所有的块信息。
(3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令,如果复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
(4)集群运行中可以安全加入和退出一些机器。
5.文件
可以创建,删除,移动或重命名文件,当文件创建,写入和关闭之后不能修改文件内容。
6.数据损坏处理
(1)当DataNode读取block的时候,它会计算checknum
(2)如果计算后的checksum,与block创建时值不一样,说明该block已经损坏
(3)client读取其他DataNode上的block
(3)NameNode标记该块已经损坏,然后复制block到预期设置的文件备份数
(4)DataNode在其文件创建后三周验证其checknum
7.Namenode启动过程
Namenode存放在内存和本地磁盘 (fsimage和edits)
格式化HDFS 目的就是生成fsimage
start Namenode 的时候会读取 fsimage
start DataNode *注册 *block report
创建目录 上传文件时都会写入edits
第二次启动HDFS
1.read [fsimage]
2.read [edits]
3.generate write fsimage[new]
*genearte edits[null]
4.start DataNode
8.secondaryNameNode辅助功能
辅助NameNode 定期合并fsimage和edits -> new fsimage
9.安全模式SafeMode
等待DataNode向NameNode发送block report
total blocks=99.999%/DataNode blocks 此时安全模式才会退出
这时候,可以查看文件系统的文件,不能改变文件系统的命名空间,即不能创建文件夹,不能上传文件,不能删除文件
手动进入安全模式
bin/hdfs dfsadmin -safemode enter
关闭安全模式
bin/hdfs dfsadmin -safemode leave