20210110

大数据 | 大数据基础--系统之大数据计算框架实例:Hadoop数据管理

亲爱的读者朋友大家晚上好,上次我们介绍了:Hadoop的系统结构以及其比较重要的MapReduce程序的执行流程。今天分析Hadoop中数据管理的部分以及其它的关于Hadoop系统的一些细节问题也在此节进行总结~

Hadoop 系统结构

先来简单回顾一下Hadoop的系统结构

1610091653833

分布式文件系统--HDFS

文件管理系统有:GFS(Google File Sys)和HDFS(Hadoop Distributed File Sys)等。

  1. 存储的文件都大小都在GB和TB级别,并且不常更新。
  2. 我们通常是将大文件分片,然后将不同的文件分片存储到不同的机器上,每个chunk的大小一般在16~64MB之间。
  3. 多备份:每个文件存储两份或者三份1610094382376

HDFS相关术语

HDFS GFS MooseFS description
NameNode Master Master 整个文件系统的大脑,它提供整个文件系统的目录信 息,各个文件的分块信息,数据块的位置信息,并且 管理各个数据服务器。
DataNode ChunkServer ChunkServer 分布式文件系统中的每一个文件,都被切分成若务器 上,此服务器称之为数据服务器。
Block Chunk Chunk 每个文件都会被切分成若干个块(默认64MB) 每一 块都有连续的一段文件内容是存储的基本 单位。
Packet 客户端写文件的时候,不是一个字节一个字节写 入文 件系统的,而是累计到一定数量后,往文件个数据包。
Chunk Block(64KB) 在每一个数据包中,都会将数据切成更小的块 (512字节),每一个块配上一个奇偶校验码 (CRC),这样的块,就是传输块。
Secondary NameNode Metalogger 备用的主控服务器,在身后默默的拉取着主控服务器的 日志,等待主控服务器牺牲后被扶正。

HDFS核心功能

功能 说明
Namespace HDFS支持传统的层次型文件组织,与大多数其他文件系统类似,用户可以 创建目录,并在其间创建、删除、移动和重命名文件。
Shell命令 Hadoop包括一系列的类shell的命令,可直接和HDFS以及其他Hadoop支 持的文件系统进行交互。
数据复制 每个文件的block大小和replication因子都是可配置的。Replication因子可 以在文件创建的时候配置,以后也可以改变。HDFS中的文件是write-one, 并且 严格要求在任何时候只有一个writer。
机架感知 在大多数情况下,replication因子是3,HDFS的存放策略是将一个副本存 放 在本地机架上的节点,一个副本放在同一机架上的另一个节点,最后一 个副本影响到数据的可靠性和有效性。放在不同机架上的一个节点。机架的 错误远远比节点的错误少。
Editlog FSEditLog类是整个日志体系的核心,提供了一大堆方便的日志写入API, 以及日志的恢复存储等功能。
集群均衡 如果某个DataNode节点上的空闲空间低于特定的临界点,那么就会启动一 个计划自动地将数据从一个DataNode搬移到空闲的DataNode。
空间的回收 删除文件并没有立刻从HDFS中删除,HDFS将这个文件重命名,并转移 到/trash目录,用于恢复,/trash可设置保存时间。

HDFS结构可视化

1610094772984

HDFS系统架构图

1610094840603

文件读取流程

1610094884850
  • 1、使用HDFS Client,向远程的Namenode发起RPC请求;
  • 2、Namenode会视情况返回文件的部分或者全部block列表,对于每个block, Namenode都会返回有该block拷贝的datanode地址;
  • 3-4、HDFS Client 选取离客户端最接近的datanode来读取block;
  • 5、当读完列表的block后,如果文件读取还没有结束,客户端开发库会继续向Namenode 获取下一批的block列表。
  • 6、读取完当前block的数据后,关闭与当前的datanode连接,并为读取下一个block寻找 最佳的datanode; 注:读取完一个block都会进行checksum验证,如果读取datanode时出现错误,客户端会 通知Namenode,然后再从下一个拥有该block拷贝的datanode继续读。

文件写入流程

1610094966980
  • 1.HDFS Client 向远程的Namenode发起RPC请求;
  • 2.Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行 操作,成功则会为文件创建一个记录,否则会让客户端抛出异常;
  • 3.当客户端开始写入文件的时候,开发库会将文件切分成多个packets,并 在内部以"data queue"的形式管理这些packets,并向Namenode申请新 的blocks,获取用来存储replicas的合适的datanodes列表,列表的大小根 据在Namenode中对replication的设置而定。
  • 4.开始以pipeline(管道)的形式将packet写入所有的replicas中。开发库把 packet以流的方式写入第一个datanode,该datanode把该packet存储之后, 再将其传递给在此pipeline中的下一个datanode,直到最后一个datanode,这 种写数据的方式呈流水线的形式。
  • 5.最后一个datanode成功存储之后会返回一个ack packet,在pipeline里传递 至客户端,在客户端的开发库内部维护着"ack queue",成功收到datanode返 回的ack packet后会从"ack queue"移除相应的packet。
  • 6.如果传输过程中,有某个datanode出现了故障,那么当前的pipeline会被关 闭,出现故障的datanode会从当前的pipeline中移除,剩余的block会继续剩下 的datanode中继续以pipeline的形式传输,同时Namenode会分配一个新的 datanode,保持replicas设定的数量。

HDFS缺陷

  • 如果有多个数据中心,则~~
  • 当有低延迟数据访问请求,则~~
  • 当有大量的小文件,则~~
  • 当有多个数据写入者,则~~

总结

作为计算框架的简介,就介绍这么多了,从下一次开始,就按照之前的规划开始介绍一些特定的处理框架,敬请期待~