Hadoop概述
Hadoop:提供分布式的存储(一个文件被拆分成很多个块,并且以副本的方式存储在各个节点中)和计算,是一个分布式的系统基础架构:用户可以在不了解分布式底层细节的情况下进行使用。
主要模块包括:
- 分布式文件系统:HDFS实现将文件分布式存储在很多的服务器上
- 分布式计算框架:MapReduce实现在很多机器上分布式并行计算
- 分布式资源调度框架:YARN实现集群资源管理以及作业的调度
HDFS
工作机制:
将文件切分成指定大小(128M)的数据块并以多副本(默认3副本)的存储在多个机器上。
架构
HDFS为 Master/Slave 架构,主要分为 NameNode(Master)和DataNode(Slave) 。
- NameNode:
- 一个HDFS集群只有一个
- manages and executes file system namespace
- regulate access to files by clients
- determines the mapping of blocks to DataNodes
- DataNode:
- 一个集群多个DataNode
- HDFS exposes a file system namespace and allows user data to be stored in files.A file is split into one or more blocks and these blocks are stored in <u>a set of</u> DataNodes.
副本机制-图解
HDFS_REP.jpgHDFS写数据流程图
1.初始化FileSystem,客户端调用create()来创建文件
2.FileSystem用RPC调用元数据节点,在文件系统的命名空间中创建一个新的文件,元数据节点首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件。
3.FileSystem返回DFSOutputStream,客户端用于写数据,客户端开始写入数据。
4.DFSOutputStream将数据分成块,写入data queue。data queue由Data Streamer读取,并通知元数据节点分配数据节点,用来存储数据块(每块默认复制3块)。分配的数据节点放在一个pipeline里。Data Streamer将数据块写入pipeline中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点。
5.DFSOutputStream为发出去的数据块保存了ack queue,等待pipeline中的数据节点告知数据已经写入成功。
6.当客户端结束写入数据,则调用stream的close函数。此操作将所有的数据块写入pipeline中的数据节点,并等待ack queue返回成功。最后通知元数据节点写入完毕。
7.如果数据节点在写入的过程中失败,关闭pipeline,将ack queue中的数据块放入data queue的开始,当前的数据块在已经写入的数据节点中被元数据节点赋予新的标示,则错误节点重启后能够察觉其数据块是过时的,会被删除。失败的数据节点从pipeline中移除,另外的数据块则写入pipeline中的另外两个数据节点。元数据节点则被通知此数据块是复制块数不足,将来会再创建第三份备份。
HDFS_WRITE.pngHDFS读数据流程图
1.初始化FileSystem,然后客户端(client)用FileSystem的open()函数打开文件
2.FileSystem用RPC调用元数据节点,得到文件的数据块信息,对于每一个数据块,元数据节点返回保存数据块的数据节点的地址。
3.FileSystem返回FSDataInputStream给客户端,用来读取数据,客户端调用stream的read()函数开始读取数据。
4.DFSInputStream连接保存此文件第一个数据块的最近的数据节点,data从数据节点读到客户端(client)
5.当此数据块读取完毕时,DFSInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点。
6.当客户端读取完毕数据的时候,调用FSDataInputStream的close函数。
7.在读取数据的过程中,如果客户端在与数据节点通信出现错误,则尝试连接包含此数据块的下一个数据节点。
8.失败的数据节点将被记录,以后不再连接。
HDFS_READ.jpgMapReduce
Hadoop MapReduce is a software framework for easily writing applications which process vast amounts of data (multi-terabyte data-sets) in-parallel on large clusters (thousands of nodes) of commodity hardware in a reliable, fault-tolerant manner.
编程模型-图解
MAPREDUCE_PROCCESS.jpg如上图所示,MapReduce核心包括
- Split
- InputFormat
- OutputFormat
- Combiner(Map处理后先自身进行归并处理)
- Partitioner
YARN-Yet Another Resource Negotiator
是一个通用的资源管理系统,为上层应用提供统一的资源管理和调度。
架构图
YARN_AR.jpg- Master:ResourceManager (RM)
- 集群中同一时间对外提供服务的只有一个
- 处理来自客户端的请求:提交或终止任务
- 启动和监控 ApplicationMaster
- 监控NodeManager 分配资源
- ApplicationMaster (AM)
- 每个程序对应一个AM
- AM向RM申请资源用于在 NodeManager 上启动对应的TASK
- 为每个TASK 向RM 申请资源(container)
- 与NodeManager 通信 监控TASK
- Slave: NodeManager (NM)
- 集群中有多个
- 应用程序运行的节点
- 向ResourceManager发送心跳信息、任务的执行情况
- 接收来自ResourceManager的请求来启动任务
- 处理来自ApplicationMaster的命令
- Container: 任务运行的抽象容器
- 包括CPU,Memory..
- TASK运行载体
- 其实类似于Docker中的 Container
执行流程
YARN_PROCCESS.jpg- 客户端提交作业任务
- 与NN通信 分配container
- 在container上运行 AM
- AM注册到RM
- 获取到分配的可执行资源NN
- 在NN上启动container 并且执行TASK
网友评论