HDFS分布式文件系统

HDFS架构(分布式文件系统)

  • 易于扩展的分布式文件系统
  • 运行在大量的普通廉价机器上 提供容错机制
  • 为大量用户提供性能不错的文件存取服务

NameNode

  • NameNode是一个中心服务器,单一节点,负责管理文件系统的名字空间,以及客户端对文件的访问。
  • 文件操作 NameNode负责文件元数据的操作,DataNode负责处理文件的内容读写请求,跟文件相关的东西不会经过NameNode,只会询问它和哪个DataNode有联系。
  • 副本存放在哪些DataNode上由NameNode决定,读取文件的时候NameNode尽量让用户先读取最近的副本,降低块的消耗和读取延迟。
  • NameNode全权管理数据块的复制,周期性的接收从集群的每个DataNode传递过来的心跳信号和块状态报告。块状态报告包含了改DataNode上的所有的数据块的列表。

DataNode

  • 一个数据块在DataNode以文件的存储在磁盘上 ,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和以及时间戳。
  • DataNode启动后向NameNode注册,通过后周期性的向NameNode上报所有的块信息。
  • DataNode是每三秒心跳一次,心跳结果带有NameNode给DataNode的命令,如果超过十分钟NameNode没有收到DataNode的心跳,则认为该节点不可用。
  • 集群运行中可以安全的加入或者退出一些机器。
  • 文件大小
    文件被切分为块,默认大小为128M,以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件生成时指定。
    可以创建,删除,移动或者重命名文件,当文件的创建,写入,关闭之后不能修改文件中的内容了。

数据损坏处理

当DataNode读取block的时候,会计算checksum,如果计算后的checksum和创建block的时候不一样,说明该block已经损坏。客户端就会读取其他块上的数据,NameNode标记该块已经损坏,删除坏的块,然后复制其他好的block达到预期设置的文件的备份数,DataNode在其文件创建三周以后验证其checknum。

NameNode启动方式

NameNode

  • 内存
  • 本地磁盘
    • fsimage
    • edits 格式化HDFS,目的就是生成fsimage
      0-> format
      1-> fsimage
      2-> Start NameNode
    • read fsimage
      3-> Start DataNode
    • 注册
    • block report 4-> create dir /user/beifeng/tmp -> write [edits]
      5-> put files /user/beifeg/tmp(*-site.xml) -> write [edits]
      6-> delete file /user/beifeng/tmp/core-site.xml -> write [edits]

Namenode保存文件系统元数据镜像,namenode在内存及磁盘(fsimage和editslog)上分别存在一份元数据镜像文件,内存中元数据镜像保证了hdfs文件系统文件访问效率,磁盘上的元数据镜像保证了hdfs文件系统的安全性。

namenode在磁盘上的两类文件组成:

fsimage文件:保存文件系统至上次checkpoint为止目录和文件元数据。

edits文件:保存文件系统从上次checkpoint起对hdfs的所有操作记录日志信息。

  • 首此启动hdfs过程:

首次安装格式化(format)主要作用是在本地文件系统生成fsimage文件 启动namenode:

读取fsimage生成内存中元数据镜像。

启动datanode:

向namenode注册;

向namenode发送blockreport。

启动成功后,client可以对HDFS进行目录创建、文件上传、下载、查看、重命名等操作,更改namespace的操作将被记录在edits文件中。

  • 之后启动HDFS文件系统过程 启动namenode:

读取fsimage元数据镜像文件,加载到内存中。

读取editlog日志文件,加载到内存中,使当前内存中元数据信息与上次关闭系统时保持一致。然后在磁盘上生成一份同内存中元数据镜像相同的fsimage文件,同时生成一个新的的editlog文件用于记录以后的hdfs文件系统的更改。

启动datanode:

向namenode注册;

向namenode发送blockreport。

启动成功后,client可以对HDFS进行目录创建、文件上传、下载、查看、重命名等操作,更改namespace的操作将被记录在editlog文件中。

SecondaryNameNode

SecondaryNameNode的主要作用是用于合并fsimage和editlog文件。在没有SecondaryNameNode守护进程的情况下,从namenode启动开始至namenode关闭期间所有的HDFS更改操作都将记录到editlog文件,这样会造成巨大的editlog文件,所带来的直接危害就是下次启动namenode过程会非常漫长。

在启动SecondaryNameNode守护进程后,每当满足一定的触发条件(每3600s、文件数量增加100w等),SecondaryNameNode都会拷贝namenode的fsimage和editlog文件到自己的目录下,首先将fsimage加载到内存中,然后加载editlog文件到内存中合并fsimage和editlog文件为一个新的fsimage文件,然后将新的fsimage文件拷贝回namenode目录下。并且生成新的editlog文件用于记录DFS的更改。

  • 工作流程 Secondary namenode工作流程:

1)secondary通知namenode切换edits文件

2)secondary通过http请求从namenode获得fsimage和edits文件

3)secondary将fsimage载入内存,然后开始合并edits

4)secondary将新的fsimage发回给namenode

5)namenode用新的fsimage替换旧的fsimage

安全模式

在启动namenode至所有datanode启动完成前的阶段成为安全模式。在安全模式下,client只能读取部分HDFS文件信息,不允许client对HDFS的任何更改操作,比如创建目录、上传文件、删除文件、重命名文件等。

bin/hdfs dfsadmin -safemode <enter | leave | get | wait>

猜你喜欢

转载自my.oschina.net/u/3798913/blog/1785375