Hadoop的学习笔记
目录
Namenode如何管理元数据
namenode的主要职责:管理整个集群以及元数据的管理。
1.namenode通过管理Edits文件和Fslmage文件来实现管理元数据的目的。
2.Edits文件,相对比较小,修改起来速度较快,记录的是最近一段时间的元数据信息。
3.FsImage文件,相对较大,记录的是HDFS的所有元数据。
4.HDFS集群启动的时候,namenode会去加载FsImage文件和最近的那个Edits文件的元数据进内存。
Edits文件和FsImage文件的存储位置在:/export/data/hadoop/dfs/name/current
SecondaryNameNode如何辅助管理元数据
1.SecondaryNameNode会实时监听(间隔60秒)Edits文件的状态,当其(Edits文件)达到一定的阈值(1个小时或者100w次),SecondaryNameNode就会通知namenode禁用该Edits文件,然后创建1个新的Edits文件,继续往里面写入。
2.SecondaryNameNode会通过Http协议将namenode中的Edits文件和FsImage文件拉取到本地进行合并,形成新的FsImage文件,合并的全程,namenode不参与。
3.之后SecondaryNameNode会将合并后的新的FsImage文件推送给namenode,用来替代旧的FsImage文件。
4.namenode上会有大量的Edits文件和一堆的FsImage文件,这些文件不会立马被删除,而是在服务重启的时候,或者达到一定的阈值才会被删除。
HDFS的写数据流程
1.Client请求namenode,上传文件。
2.namenode接收到请求后,校验写的权限,然后告知Client是否可以写数据。
3.假设可以写数据,此时Client会将文件进行切块(默认:128mb/块)。
4.Client重新请求namenode,第1个Block的上传位置。
5.namenode返回第一个块的上传位置,即:datanode列表。
6.Client和最近的那个datanode建立连接,并依次和其他的datanode建立连接,形成传输管道(piepeline)。
7.采用数据报包(默认:64kb)的方式传输数据,并建立反向应答机制(ACK)。
8.依次传输,直到第1个Block块传输完毕。
9.第一个Block块传输完后,其他的Block块会重复以上步骤,直到所有的Block块传输完毕。
10.HDFS的写数据流程结束。
HDFS的读数据流程
1.Client请求namenode,读取文件数据。
2.namenode校验读的权限合法后,返回该文件的部分或者全部的Block块信息(即:这些块在哪些datanode节点上存储)。
3.Client连接这些datanode,并行的从中读取这些Block块的信息。
4.当上述的块信息读取完毕后,Client会再次请求namenode获取剩下的Block块信息,直到所有的块读取完毕。
5.按照块的标号,对读取到的数据做合并,获取最终结果文件,至此HDFS的读数据流程完毕。