以下所有内容只是自己课程考试资料的复习整理
所有图片均出自课程PPT和张伟洋所著的《Hadoop大数据技术开发实践》,不是自己画的!!!
Hadoop
Hadoop整体架构对比
1.x Hadoop以HDFS和MapReduce为核心。1.x的MapReduce除了负责数据的计算以外,还负责集群作业的调度和资源管理,HDFS负责数据存储
2.x Hadoop以HDFS和YARN为核心。HDFS负责数据存储,YARN负责集群资源管理和统一调度。MapReduce只负责进行数据计算。YARN具有通用性,可以作为其他计算框架的资源管理系统(比如Spark、Storm)。
YARN架构和概念
基本架构
采用主从架构(Mater/Slave),主要由ResourcesManager、NodeManager、ApplicationMaster、Container等组成。
- ResourceManager:负责对集群资源统一管理和调度
- NodeManager:每个节点上的资源和任务管理器
- Task:具体执行某个任务,一个应用程序可能有多个任务。
- Container:是YARN中资源分配的基本单位,封装了CPU和内存资源的一个容器。
HDFS 架构和概念
基本架构
采用主从架构(M/S),主要由NameNode、DataNode、SecondaryNameNode组成。
- 数据块 Block:HDFS中的文件以数据块的形式存储,默认基本存储单位是128MB(1.x 为64MB)。如果文件本身小于128MB,则按照实际大小存储,不占用整个数据块。每个数据块默认3个副本
- NameNode:在HDFS中存储元数据(文件名称、大小、位置等信息)的节点。存储数据块到DataNode的映射信息。周期性接收DataNode的“心跳”信息和“块报告”。块报告包含了DataNode上所有数据块的信息列表。
- DataNode:实际存储数据的地方。客户端向DataNode写入或读取数据块。
- SecondaryNameNode:帮助NameNode管理元数据,他不是备份的NameNode,是一个辅助工具,帮助NameNode整理fsimage和edits信息。
写文件
- 客户端向NameNode发起写数据请求。将写入信息(元数据)告诉NameNode。
- NameNode将元数据记录到本地,验证客户端的权限。通过验证则告诉客户端能够存放文件的DataNode上的存储位置信息。(地图)
- 客户端根据返回信息(地图),向DataNode相应位置写入数据块。
- DataNode将数据块备份到其他DataNode上。
读文件
- 客户端向NameNode发起读数据请求
- NameNode告诉客户端组成该文件的数据块的位置信息列表(地图)
- 客户端根据信息(地图)从DataNode中读取文件数据。(NameNode不参与文件的传输)
机架感知策略
举例
- 第一个副本存在本地机架节点
- 第二个副本存在同一机架的另外一个节点上
- 第三个副本存在另外一个机架的节点上
(机架错误远远比节点错误少)
特点
- 数据块只存放在两个不同机架上
- HDFS尽量读取最近的副本
- 副本不是均匀分布在不同机架上的
优点
- 减少机架间的数据传输,提高操作效率
- 不损坏数据的可靠性和读取性能
MapReduce
基本概念
MapReduce是分布式计算框架,其设计思想是:从HDFS中获得输入数据,将大数据集分割成小数据集,多个节点并行计算小数据集,将计算结果进行汇总统计,得到最终计算结果。也就是Map 阶段、Partition & Shuffle 阶段、Reduce 阶段。
执行流程
- Client提交应用程序给ResourceManager。
- ResourceManager启动MRAppMaster(MapReduce中叫MRAppMaster,其是ApplicationMaster的实现),负责管理整个MapReduce应用程序的生命周期、任务资源申请、Container的启动与释放。
- MRAppMaster向ResourceManager申请资源,分配Container。
- 运行Task。
Zookeeper
基本概念
ZooKeeper是一个分布式应用程序协调服务,主要用于解决分布式集群中应用系统的一致性问题。他能提供类似文件系统的目录节点树方式的数据存储,主要用途是维护和监控所存数据的状态变化,以实现对集群的管理。
架构原理
由一组服务器节点组成:
- 有一个节点角色充当Leader,其他节点角色为Follower
- 当Client连接ZooKeeper集群并执行写请求时,请求首先发往Leader节点。
- Leader节点接收到数据变更请求时,首先将数据变更写入本地磁盘以供恢复使用,写完后数据变更再写入内存中以加快读取数据。
- 最后,Leader节点上的数据变更再同步到集群的其他Follower节点上。
- 若Leader失效,则从Follower中重新选举出一个Leader节点来处理Client请求。
Kafka
基本概念
Kafka是一个基于ZooKeeper的高吞吐量低延迟的分布式的发布与订阅消息系统,它可以实时处理大量消息数据以满足各种需求。它是一种消息中间件。
它包含了以下的一些基本概念:
- 消息(Message):Kafka中的写数据单元称为消息(一行数据,或者一条记录等)。消息可以分组传输以提高效率,每一组消息就是一个批次,分批传输可以减少网络开销。但批次越大,单位时间内处理的消息也就越大,这就涉及到了吞吐量和时间延迟之间的平衡关系。
- 服务器节点(Broker):Kafka集群包含一个或多个服务器节点,单个独立服务器节点称为Broker。
- 主题(Topic):每条发布到Kafka集群的消息都有一个类别,这个类别称为主题。
- 分区(Partition):为了使Kafka的吞吐率能够水平拓展,物理上把主题分成一个或多个分区。
- 生产者(Producer):生产者负责产生消息发送到Kafka的Broker中。(负责写入)
- 消费者(Consumer):消费者负责从Kafka的Broker上读取消息。消费者可以订阅一个或多个主题。(负责读取)
Kafka架构
一个典型Kafka集群包含一组生产者、一些Broker、一组消费者、一个ZooKeeper集群。生产者发送消息发送到Broker,消费者从Broker中读取数据,ZooKeeper用于管理和协调Broker。当集群中新增了Broker或有Broker失效,它会通知生产者和消费者。