Hadoop学习:深度剖析HDFS原理

  在配置hbase集群将 hdfs 挂接到其它镜像盘时,有不少困惑的地方,结合以前的资料再次学习; 大数据底层技术的三大基石起源于Google在2006年之前的三篇论文GFS、Map-Reduce、 Bigtable,其中GFS、Map-Reduce技术直接支持了ApacheHadoop项目的诞生,Bigtable催生了NoSQL这个崭新的数据库领域,由于map-Reduce处理框架高延时的缺陷, Google在2009年后推出的Dremel促使了实时计算系统的兴起,以此引发大数据第二波技术浪潮,一些大数据公司纷纷推出自己的大数据查询分析产品,如: Cloudera 开源了大数据查询分析引擎 Impala 、 Hortonworks 开源了 Stinger、 Fackbook 开源了 Presto 、UC Berkeley AMPLAB实验室开发了 Spark 计算框架,所有这些技术的数据来源均基于hdsf, 对于 hdsf 最基本的不外乎就是其读写操作

  目录:

  hdfs 名词解释

  hdsf 架构

  NameNode(NN)

  Secondary NN

  hdfs 写文件

  hdfs 读文件

  block持续化结构

  HDFS名词解释:

  Block: 在HDFS中,每个文件都是采用的分块的方式存储,每个block放在不同的datanode上,每个block的标识是一个三元组( block id, numBytes,generationStamp ),其中block id是具有唯一性,具体分配是由namenode节点设置,然后再由datanode上建立block文件,同时建立对应block meta文件

  Packet: 在DFSclient与DataNode之间通信的过程中,发送和接受数据过程都是以一个packet为基础 的方式进行

  Chunk: 中文名字也可以称为块,但是为了与block区分,还是称之为chunk。在DFSClient与DataNode之间通信的过程中,由于文件采用的是基于块的方式来进行的,但是在发送数据的过程中是以packet的方式来进行的, 每个packet包含了多个chunk ,同时对于每个chunk进行checksum计算,生成checksum bytes

  小结:

  Packet结构与定义: Packet分为两类,一类是实际数据包,另一类是heatbeat包。一个Packet数据包的组成结构,如图所示

物联网

  上图中,一个Packet是由Header和Data两部分组成,其中Header部分包含了一个Packet的概要属性信息,如下表所示:

物联网

  Data部分是一个Packet的实际数据部分,主要包括一个4字节校验和(Checksum)与一个Chunk部分,Chunk部分最大为512字节

  在构建一个Packet的过程中,首先将字节流数据写入一个buffer缓冲区中,也就是从偏移量为25的位置(checksumStart)开始写Packet数据Chunk的Checksum部分,从偏移量为533的位置(dataStart)开始写Packet数据的Chunk Data部分,直到一个Packet创建完成为止。

  当写一个文件的最后一个Block的最后一个Packet时,如果一个Packet的大小未能达到最大长度,也就是上图对应的缓冲区中,Checksum与Chunk Data之间还保留了一段未被写过的缓冲区位置,在发送这个Packet之前,会检查Chunksum与Chunk Data之间的缓冲区是否为空白缓冲区(gap),如果有则将Chunk Data部分向前移动,使得Chunk Data 1与Chunk Checksum N相邻,然后才会被发送到DataNode节点

  hdsf架构:

  hdfs的构架图网上一堆,抓了一张表述比较清楚的图如下, 主要包含因类角色:Client、NameNode、SecondayNameNode、DataNode

物联网

  HDFS Client: 系统使用者,调用HDFS API操作文件;与 NN交互获取文件元数据 ;与DN交互进行数据读写, 注意: 写数据时文件 切分由Client完成

  Namenode: Master节点(也称元数据节点),是系统唯一的管理者。负责元数据的管理( 名称空间和数据块映射信息 );配置 副本策略 ;处理客户端请求

  Datanode: 数据存储节点(也称Slave节点), 存储实际的数据;执行 数据块的读写;汇报存储信息给NN

  Secondary NameNode: 小弟角色,分担大哥namenode的工作量;是NameNode的冷备份; 合并fsimage和fsedits然后再发给namenode, 注意: 在hadoop 2.x 版本,当启用 hdfs ha 时,将没有这一角色。(详见第二单)

  解释说明:

  hdfs构架原则:

  NameNode:

  NameNode是整个文件系统的管理节点,也是HDFS中最复杂的一个实体,它维护着HDFS文件系统中最重要的两个关系: