20210110
大数据 | 大数据基础--系统之大数据计算框架实例:Hadoop数据管理
亲爱的读者朋友大家晚上好,上次我们介绍了:Hadoop的系统结构以及其比较重要的MapReduce程序的执行流程。今天分析Hadoop中数据管理的部分以及其它的关于Hadoop系统的一些细节问题也在此节进行总结~
Hadoop 系统结构
先来简单回顾一下Hadoop的系统结构
分布式文件系统--HDFS
文件管理系统有:GFS(Google File Sys)和HDFS(Hadoop Distributed File Sys)等。
- 存储的文件都大小都在GB和TB级别,并且不常更新。
- 我们通常是将大文件分片,然后将不同的文件分片存储到不同的机器上,每个chunk的大小一般在16~64MB之间。
- 多备份:每个文件存储两份或者三份
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结构可视化
HDFS系统架构图
文件读取流程
- 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继续读。
文件写入流程
- 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缺陷
- 如果有多个数据中心,则~~
- 当有低延迟数据访问请求,则~~
- 当有大量的小文件,则~~
- 当有多个数据写入者,则~~
总结
作为计算框架的简介,就介绍这么多了,从下一次开始,就按照之前的规划开始介绍一些特定的处理框架,敬请期待~