Hadoop 学习(一)HDFS

(一)HDFS

分布式文件系统,用于大数据的存储。具有高容错性、高可靠性、高可扩展型和高吞吐量等特征。

1. HDFS架构

HDFSmaster/slave架构设计模式。一个HDFS集群有一个元数据节点(NameNode)和一些数据节点(DataNode)组成。NameNode是主节点,主要用来存储管理文件的元数据【元数据大小为150byte 8条元数据为1K】(文件名称、大小、存放路径 )和处理来自客户端的请求。DataNode是从节点,用来管理对应节点的数据存储。即文件存储在DataNode上。

2. 主要组件
Block

HDFS中的数据是以数据块的形式存储的。默认大小为128M。(如果一个数据块小于128M,则按照具体大小存储。并不占用整个块空间)

NN

存储元数据信息和接收客户端请求。

元数据:文件名、文件大小、文件存储位置等。系统元数据保存在fsimageedits中。

FsImae:系统映射文件,主要存储源数据信息。

Edits:操作日志文件。HDFS对文件的操作日志都保存在其中。

DN

按块存放数据。

周期性的向Name Node发送心跳,汇报数据存储情况

 

DN的工作机制

  1. 数据块在DN以文件的形式存储。包含两个文件,其中一个是文件本身,另外一个是文件的验证文件(长度,数据块、校验和、时间戳)
  2. DN启动后,向NN注册。周期性(1小时)的向NN汇报块情况。
  3. DNNN之间有心跳机制(3S)。如果NN超过一段时间(10M)没有收到DN的心跳,则认为机器不可用。
SNN

为了解决系统启动时间长的问题。协助Name Node实现工作。

 

元数据存在内存中,可以快读相应请求。担心断电丢失,所以在磁盘中有备份文件。FsImage

 

内存元数据修改,同步更新FsImage太慢(修改操作),引入Edits,只追加,效率很高

 

SNN作用:系统启动流程。系统启动,Name Node会加载FSimageEdits。得到完整的元数据信息之后,会写入FSimage中。如果系统两次启动时间较长,edits会比较大。合并fsimageedits会比较耗时。启动时间较长。所以,secondNameNode就是协助NamaNode提前合并FsImageEdits文件。

 

SNN工作流程:

  1. SNN求情NN是否需要checkPoint。返回是否需要的结果。
  2. SNN请求NN执行Checkpoint
  3. NN滚动正在写的Edits日志
  4. 通过Http get 方法将镜像文集FsImage和编译日志Edits拷贝到SNN
  5. SNN加载镜像文件和日志文件到内存并合并。生成fsImage.chkpoint
  6. 通过Http post FsImage.chkPoint 发送到NNNN重命名为FsImage并覆盖原有的文件。

 

触发Second Name Node一般是时间出发或者是Edits条数量到达阈值触发。

 

3. 文件的读写流程

(1) 读文件流程

  1. 客户端向NameNode发读文件请求。C->NN
  2. NameNode返回元数据列表(文件分多个Block,每个Block对应一个文件列表)
  3. 遍历每个Block,根据Block的元数据列表,选择最近节点发送的DataNode请求。建立连接。
  4. 获得数据后,关闭和DataNode的连接。处理下一个Block节点的下载。
  5. 关闭任务。

(2) 写文件流程

  1. 客户端向NamaNode发送写文件请求。C->NN
  2. NameNode验证权限,文件是否存在等。返回是否可以上传。
  3. 客户端循环处理每一块Block,向NN发送请求。获得当前Block的元数据列表。[ds1ds2ds3]
  4. 对当前Block,选择最近的DataNode ds1,使用FSDataOutPutStream建立连接,写入数据。
  5. 备份机制负责将写入的数据一步备份到其它节点上ds1 数据写入ds2ds2数据写入 ds3
  6. 完成所有Block写入后,关闭任务。
4. 知识点

(1) 网络拓扑:节点的计算

节点的距离:两个节点到达最近的共同祖先之和。

(2) HADOOP副本节点选择

第一个副本,如果客户端在节点上,就是当前节点,如果客户端不在节点上,第一个副本随意选择。

第二个副本是和第一个副本在同一机架,不同节点上。

第三个副本是和前两个不同机架,节点随机。

posted @ 2020-11-09 12:50  IT迷途小书童  阅读(168)  评论(0)    收藏  举报