一.构成
Hadoop主要四个构成部分:
- 基础核心:提供基础的通用功能
- HDFS:分布式存储
- MapReduce:分布式计算
- Yarn:资源分配(任务的执行方式)
1.HDFS的构成
主要分为三个节点:
- NameNode:主要存储数据的存放地址等元数据
- DataNode:只用来存储数据
- SecondaryNameNode:辅助DataNode,把元数据持久化到磁盘中
1. NameNode
功能:
存储数据的分布位置、数据的各种描述信息(如文件名、文件大小、文件所在目录、所有者名称、读写执行权限等)
读数据时,要先从NameNode获取文件的分布位置(在哪些DataNode上),然后再从DataNode上读数据(当然,这个过程已经由HDFS的Shell或API实现了)
处理客户端的读写请求.写数据时,先向NameNode提交要写的文件的信息,NameNode检查自己的记录表,以找到合适的DataNode(需要找多个,因为每个文件还要创建副本)来存储这些数据,然后指挥这些DataNode串成一串接收数据。如果某个DataNode在接收数据时罢工,则忽略掉它(忽略之后造成的副本数少于指定数量会在后期补加副本);如果所有选出的DataNode全挂掉(几率很低),则写入失败。
管理HDFS文件系统的命名空间.需要时,可以调用NameNode列出HDFS中的文件夹及文件(如执行 hdfs dfs -ls / 命令时)。
管理副本的配置和信息(默认三个副本)
元数据的存储位置
由配置文件hdfs-site.xml中的dfs.namenode.name.dir
指定
dfs.namenode.name.dir
的默认值是file://${hadoop.tmp.dir}/dfs/name
${hadoop.tmp.dir}
的默认值是tmp/hadoop-${user.name}
${user.name}是安装Hadoop的用户名
配置时可以在core-site.xml中修改${hadoop.tmp.dir}
持久化的元数据
元数据目录下的文件:
[root@izj6cj3wje0m1jxumjkuelz current]# pwd
/export/hadoop/tmp/dfs/name/current
[root@izj6cj3wje0m1jxumjkuelz current]# ls
edits_0000000000000000001-0000000000000000002 fsimage_0000000000000000057
edits_0000000000000000003-0000000000000000053 fsimage_0000000000000000057.md5
edits_0000000000000000054-0000000000000000055 fsimage_0000000000000000059
edits_0000000000000000056-0000000000000000057 fsimage_0000000000000000059.md5
edits_0000000000000000058-0000000000000000059 seen_txid
edits_inprogress_0000000000000000060 VERSION
由于需要快速查询,NameNode的元数据运行时是加载在内存中的,关闭时内存中的数据会持久化到硬盘中fsimages文件.同时HDFS集群也会将所有的操作都记录到edits文件中
内存元数据 == fsimage + edits
其他fsimage*.md5
是校验文件,用于校验fsimage的完整性
seen_txid
是hadoop的版本
VERSION
里存储的namespaceID:NameNode的唯一ID,clusterID:集群ID,NameNode和DataNode的集群ID应该一致,表明是一个集群
2.SecondaryNameNode
功能
- NameNode的热备节点,有故障时可以快速切换到SecondaryNameNode
- 周期性同步edits编辑日志,定期合并fsimage和edits到本地磁盘
生产环境中NameNode会长时间运行,几乎不关闭。而内存中的元数据是在NameNode关闭时进行持久化的。这样生产环境中内存元数据与持久化元数据差异就会越来越大,会导致生成大量的edits文件,NameNode重启速度变慢.
SecondaryNameNode会将NameNode中产生的fsimage和edits下载过来,执行合并生成新的fsimage,然后把新的fsimage再重新发回NameNode,这样NameNode中的持久化元数据就能与内存中的元数据一致或非常接近了,edits文件的数量大大减少
3.JournalNode
功能
- NameNode在文件系统被修改时,会向JournalNode写入操作日志(edits)
- SecondaryNameNode同步JournalNode的edits日志,使集群中的更新操作可以被共享和同步
- 可以被NameNode和SecondaryNameNode同时访问,用以支持NameNode高可用
4.DataNode
功能
- 负责存储数据块和数据块校验
- 处理客户端的读写请求
- 通过心跳机制定期向NameNode汇报运行状态和本地所有块的列表信息
- 在集群启动时DataNode项NameNode提供存储Block块的列表信息
Block数据块
- HDSF固定的最小的存储单元(默认128M,可配置修改)
- 写入到HDFS的文件会被切分成Block数据块(若文件大小小于数据块大小,则不会占用整个数据块)
- 默认配置下,每个block有三个副本
2.Yarn构成
主要组成
- ResourceManager
- NodeManager
1.ResourceManager
主节点只有一个,从节点可以有多个
功能
- 处理客户端请求
- 启动、管理、监控ApplicationMaster
- 监控NodeManger
- 资源的分配和调度
2.NodeManager
每个节点只有一个,和DataNode部署在同一台机器上且一一对应
功能
- 定期向ResourceManager汇报本机资源的使用状况
- 处理来自ResourceManager的作业请求,为作业分配Container
- 处理来自ApplicationMaster的请求,启动和停止Container
3.ApplicationMater
每个任务只有一个,负责任务的管理、资源的申请和任务调度
功能
- 和ResourceManager协商,为任务申请资源
- 和NodeManager通信,启动和停止任务
- 监控任务的运行状态和失败处理
4.Container
任务运行环境的抽象,只有在分配任务时才会抽象生成一个Container
功能
- 负责任务运行资源和环境的维护(节点、内存、CPU)
- 负责任务的启动