HDFS 和YARN 的基本概念
HDFS
分布式文件系统,主/从架构
- NameNode:负责管理元数据(文件名称,副本数量,文件位置,块大小)。HDFS 存储是以块存储 默认块大小 128MB,hadoop1 中默认的块大小是64MB。一个节点。
- DataNode:主要存储真正的数据,多节点。
- secondaryNamenode:辅助节点,用于合并两类文件。
- Fsimage, edits:作为元数据的镜像和操作的日志记录。
在HDFS第一次使用的时候需要对其进行格式化,目的是生成fsimage 和 edits 文件。
YARN
资源管理器:YARN为这些运行在操作系统上的任务分配资源,管理。
- 主节点(resourceManager):负责全部集群中的资源管理,和任务分配
- 从节点(nodeManager):负责每个机器上的资源管理
HDFS的优缺点
HDFS优点
- 高容错性:数据自动保存多个副本,副本丢失后,会自动恢复。
- 适合批处理:移动计算而非数据、数据位置暴露给计算框架。
- 适合大数据处理:GB、TB、甚至PB级数据、百万规模以上的文件数量,1000以上节点规模。
- 流式文件访问:一次性写入,多次读取;保证数据一致性。
- 可构建在廉价机器上:通过多副本提高可靠性,提供了容错和恢复机制。
HDFS缺点
- 低延迟数据访问:比如毫秒级、低延迟与高吞吐率。
- 小文件存取:占用NameNode大量内存,寻道时间超过读取时间。
- 并发写入、文件随机修改:一个文件只能有一个写者,仅支持append
HDFS的副本复制策略
HDFS读写数据流程
HDFS读数据流程
- 客户端通过向namenode请求下载文件 ,namenode 收到请求之后查询元数据信息,找到datanode数据块的信息。
- 客户端挑选一台就近的datanode,进行请求数据。
- datanode开始传输数据给客户端,是以packet 为单位进行读取。
- 客户端 接收packet 数据,先在本地缓存,最后写入到目标文件。
HDFS写数据流程
- 客户端向namenode请求上传文件,namenode检测该文件是否已存在,父目录是否存在,然后返回是否可以上传。
- 客户端请求上传第一个block,namenode返回三个节点(dn1,dn2,dn3)。
- 客户端向dn1请求上传数据,dn1收到请求后会调用dn2,dn2调用dn3,建立传输通道,dn1、dn2、dn3逐级应答。
- 客户端开始往dn1上传第一个block(先从磁盘读取放到一个本地内存缓存),以packet为单位。dn1收到一个block就会传给dn2,dn2传给dn3。dn1每传完一个packet会被放入一个应答队列等待应答。
- 当一个block传输完成之后,客户端再次向namenode请求上传第二、第三个block,重复上面的步骤(2-4步),直至文件上传完成。
NameNode与DataNode的工作机制
NameNode工作机制
- 第一次启动:第一次启动都需要格式化nameNode ,创建fsimage,edits. 第一次启动只需要加载fsiamge。
- 如果不是第一次启动: 直接加载edits ,fsimage镜像文件 ,合并成一个新的fsimage 文件,再创建edits 文件记录新的操作行为。
启动的过程中,会存在30秒钟等待时间 ,这个等待的时间就是安全模式。
DataNode工作机制
- 一个数据块在datanode上是以文件形式存储在磁盘上的,包括了两个文件,一个数据本身,一个是元数据包 包括数据块的长度,,数据块的校验和,由于HDFS上的数据是不允许被重复上传的所以在上传之前会对上传的数据进行检查 ,时间戳。
- DataNode启动后会向nameNode进行注册,通过后,会周期性的向namenode上报自己的datanode上的块信息。
- 心跳报告,每3秒钟向nameNode进行汇报,心跳的返回结果中带有NameNode 带给该datanode复制数据块,移动数据块的命令, 如果说超过了10分钟datanode没有响应 ,则就会认为这个datanode节点不可用,会选择其他的机器。
如果NameNode意外终止,secondaryNameNode的工作是什么?它是如何工作的?
- 并非NameNode的热备;
- 辅助NameNode,分担其工作量;
- 定期合并fsimage和edits,推送给NameNode;
- 在紧急情况下,可辅助恢复NameNode。
HDFS安全模式
在系统的正常操作期间,namenode会在内存中保留所有块位置的映射信息。在安全模式下,各个datanode会向namenode发送最新的块列表信息,namenode了解到足够多的块位置信息之后,即可高效运行文件系统。
如果满足“最小副本条件”,namenode会在30秒钟之后就退出安全模式。所谓的最小副本条件指的是在整个文件系统中99.9%的块满足最小副本级别(默认值:dfs.replication.min=1)。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以namenode不会进入安全模式。