Hadoop知识概要

Hadoop的HDFS提供了高容错、可扩展的分布式文件系统,适合存储大文件,通过NameNode和DataNode实现数据的分布式存储。文章详细介绍了HDFS的原理架构,包括NameNode、SecondaryNameNode的作用,以及数据存储、写入和读取流程。HDFS支持数据压缩,如gzip、snappy、lzo和bzip2等,并提供了多种文件存储格式,如textfile、SequenceFile、RCFile、ORCFile和Parquet。此外,文章还涵盖了MapReduce的shuffle过程、数据倾斜问题和优化策略,以及YARN的资源管理和Zookeeper在集群中的作用,如事务一致性保证和ZAB协议。
摘要由CSDN通过智能技术生成

一、HDFS

Hadoop中的分布式文件系统,高容错(数据库blcok备份),可扩展,适合存储大文件,不适合存储小文件,不适合处理低延时的数据(HBase更好),一次写入、多次读写,不支持多用户写入及任意修改文件。

1、原理架构

  • 1)NameNode:主节点,负责管理文件系统的命名空间,将HDFS的元数据存储在NameNode节点的内存中;负责响应客户端对文件的读写请求。

  • 2)DataNode:数据节点,主要负责数据的读写, 存储block以及block元数据到datanode本地磁盘(此处的元数据包括数据块的长度、块数据的校验和、时间戳);定期向NameNode发送心跳,超过10分钟节点不可用,6小时上报当前DataNode上的块状态。

  • 3)SecondaryNameNode:辅助节点,定期做checkpoint操作合并NameNode的fsimage及editlog,NameNode就有了最新的fsimage文件和更小的editslog文件,可减少恢复系统的时间每小时或每分钟editslog含有100万个事务,就创建一个checkpoint检查点。

心跳机制

集群的心跳机制,让集群中各节点形成一个整体,可以判断DataNode是否在线;知道各DataNode的存储情况;
集群刚开始启动时,99.9%的block没有达到最小副本数1,集群处于安全模式,涉及BlockReport;

首先,NameNode启动时会开一个ipc server
DataNode每3秒钟向NameNode发送一个心跳,心跳返回结果带有NameNode给该DataNode的命令;
每6小时向NameNode上报当前DataNode上的块状态报告,块状态报告包含了一个该 Datanode上所有数据块的列表;
超过10分钟没有收到某个DataNode 的心跳,则认为该DataNode节点不可用。

负载均衡:

  • 在机器之间磁盘利用率不平衡、DataNode节点出现故障、增添新的DataNode的时候可能造成不均衡;

  • 可以手动触发负载均衡: sbin/start-balancer.sh -t 5% #

  • 磁盘利用率最高的节点若比最少的节点,大于5%,触发均衡

2、SecondaryNameNode

引入原因:

  • 客户端对HDFS的增删重命名等操作,会保存再次namenode的editlog中(相当于binlog);系统出故障时,可从editlog进行恢复;

  • editlog日志大小,随时间越来越大,系统重启根据日志恢复的时候,会越来越长;

  • 为解决恢复系统时间长:设置检查点checkpoint,定期将namenode内存中元数据持久化保存到磁盘,形成fsimage文件,恢复系统时不再只依赖editlog日志。(先从fsimage恢复出元数据,再到回放editlog日志检查点之后记录);

  • 但对editlog日志文件的保存策略未改变,editlog日志依然不断增大

  • 为解决editlog大,引入部署在另外一节点secondarynamenode,定期做checkpoint操作,合并fsimage及editlog,nameNode就有了最新的fsimage文件和更小的edits文件。

执行过程:

  • 先请求NameNode,不干涉NameNode,让它继续写写edits日志)
  • 再GET请求,读取NameNode当前fsimage及edits;
  • 然后,读取fsimage到内存中,并回放执行edits中的每个操作,创建一个新的fsimage 文件,后缀为.ckpt
  • 最后PUT请求,将新的fsimage发送到原NameNode,原NameNode用新的fsimage替换旧的fsimage,

创建checkpoint两大条件:

  • SecondaryNameNode,每隔1小时创建一个检查点;
  • Secondary NameNode1分钟检查一次,从上一检查点开始,edits日志文件中是否已包括100万个事务,如果是,也会创建检查点;

NameNode与SecondaryNameNode 的区别与联系?

(1)区别,功能不同

  • 1)NameNode负责管理元数据,以及每一路径(文件)所对应的数据块信息。

  • 2)SecondaryNameNode,主要定期合并NameNode的fsimage及editlog

(2)联系:

  • 1)SecondaryNameNode中保存了一份,和namenode一致的镜像文件(fsimage)和编辑日志(edits)。

  • 2)在主namenode发生故障时(假设没有及时备份数据),可以从SecondaryNameNode恢复数据。

3、数据存储

(1)元数据管理

  • 元数据:关于文件或目录的描述信息,如文件所在路径、文件名称、文件类型等等,这些信息称为文件的元数据metadata

  • 命名空间:文件系统中,为了便于管理存储介质上的,给每个目录、目录中的文件、子目录都起了名字,这样形成的层级结构,称之为命名空间;

  • HDFS元数据:文件目录树、所有的文件(目录)名称、文件属性(生成时间、副本、权限)、每个文件的块列表、每个block块所在的datanode列表;

    • 每个文件、目录、block占用大概 150Byte字节的元数据 ;
    • 元数据metadata保存在NameNode内存中,所以HDFS适合存储大文件,不适合存储小文件

HDFS元数据信息以两种形式持久化保存:①编辑日志edits log 、②命名空间镜像文件fsimage

  • edits log:HDFS编辑日志文件,保存客户端对HDFS的所有更改记录,如增、删、重命名文件(目录),这些操作会修改HDFS目录树;NameNode会在编辑日志edit日志中记录下来;类似mysql的binlog。一旦系统出故障,可从editlog进行恢复
  • fsimage:HDFS元数据镜像文件,即将namenode内存中的数据落入磁盘生成的文件;保存了文件系统目录树信息以及文件、块、datanode的映射关系

分块存储

数据分块存储和副本的存放,是保证高可靠性和高性能的关键:

向HDFS上传文件,是按照128M为单位,切分成一个个block,分散的存储在集群的不同数据节点datanode上。
如果每个block只有一份的话,当block所在的节点宕机后,此block将无法访问,进而导致文件无法完整读取;
为保证数据的高可用及容错,HDFS设计成每个block共有三份,即三个副本
实际机房中,会有机架,每个机架上若干服务器

4、写数据流程

  • 请求上传——检查目录——可以上传

  • 查询Datanode信息——分配datanode

  • 建立数据流——根据管道写数据—— 循环写入其他block

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值