《大数据架构师指南》
大数据本质
如何从海量的,多样化的,低价值密度的数据中,快速挖掘出其蕴含的有用价值,是大数据技术的使用。
大数据的基本特征:
- 海量化:数据量巨大
- 多样化:数据类型多样
- 快速化:要求快速处理
- 价值化:整体价值巨大,但其中干扰信息多,价值密度低
大数据带来的思维变革:
- 全样本:当前技术可以支撑海量的全量数据处理,很多场景也需要全量处理
- 概率化:运行混杂劣质数据,不追求精确性,用概率来表示事物发展的大方向
- 相关性:更关心相关关系,弱化因果关系
Hadoop框架
Hadoop 1.0
- HDFS(redundant,reliable storage)
- MapReduce(cluster resource management & data processing)
Hadoop 2.0
- HDFS(redundant,reliable storage)
- YARN(cluster resource management)
- MapReduce(data processing)
- Others(data processing)
HDFS
分布式文件系统
体系架构:
- Client:发送请求接收响应
- NameNode:元数据管理
- DataNode:真正的数据存储
NameNode:
负责管理文件系统的命名空间以及客户端对文件的访问。
NameNode将所有文件和文件夹的元数据保存在一个文件系统数中,包含一个文件包含哪些数据块,及这些数据块分布在哪些数据节点上。
元数据信息并不存储在硬盘上,而是在启动的时候又DataNode上报到NameNode的。
HDFS采用大一NameNode结构,大大简化了系统架构,使NameNode成为HDFS元数据的仲裁者和管理者。
用户数据不会流过NameNode,其只管理元数据。
DataNode
文件系统中真正存储数据的地方,负责处理客户端的读写请求。
DataName在NameNode统一调度下进行数据块(Block)的创建、删除和复制,并周期性的向NameNode汇报在本DataNode上存储的数据块信息。
客户端可以向DataNode请求写入或读取数据块。
数据块复制
HDFS的设计场景是“一次写入,多次读取”。实际使用时,客户端将文件一次性写入HDFS中,在写入过程中进行数据块的创建、写入。在写入完成后文件和数据块都将不再变化,HDFS再采用数据块复制,构造多副本的方式,实现数据可靠性。
3副本方式中,副本2放置到与原DataNode相同机架的另一节点,副本3放置到不同机架的其他节点上。
客户端读取时,HDFS将其引导到距其最近的节点上。
YARN
统一资源管理
体系架构
- Container:资源容器
- AM(Application Master):追踪管理用户提交的应用程序
- NM(Node Manager):管理本节点上的资源和容器
- RM(Resource Manager):资源调度,任务接收实施
Container
封装了节点的部分计算和IO资源,包括CPU、内存、磁盘、网络等。
可看作一个占用一定系统资源的进程,可以接收承载AM或Task的代码逻辑。
AM
用户程序的代码逻辑,会被封装入AM中,AM自身会占用一个Container,负责整个应用任务的启动调度和追踪,还可以向RM申请更多Container,执行子任务(Tasks)。
NM
管理每个节点上的资源和任务。定时向RM汇报本节点的资源使用情况和各个Container运行状态。同时接收来自AM的对其Container的启停请求。
RM
负责整个集群资源和任务的统一管理和调度。
MepReduce
分布式计算框架,一个Job被划分成Map和Reduce两个计算阶段。
Map阶段
- Read阶段:解析读入Key1/Value1
- Map阶段:Map函数处理,计算出新的Key2/Value2
- Collect阶段:将Key2/Value2写入环形内存缓冲区
- Spill阶段:溢写,缓冲区写满后,写入本地磁盘的临时文件
- Combine阶段:处理完所有数据后,将临时文件合并为一个最终的数据文件
Reduce阶段
- Shuffle阶段:Reduce Task从各个Map Task上远程拷贝数据,保存在本地内存或磁盘文件中
- Merge阶段:对内存和磁盘上的文件和数据进行合并
- Sort阶段:排序,将key相同的数据聚在一起
- Reduce阶段:将数据交给Reduce函数进行处理,得到Key3/Value3
- Write阶段:将计算结果写入HDFS
ZooKeeper
集群协调系统,核心是文件系统加通知机制。
- 客户端可以连接任一Server
- 只有Leader可以处理写请求,Follower会将写请求交给Leader处理
- Leader只有一个,Leader故障时,会重新选主
- 半数Server可用,则ZooKeeper集群整体对外服务就可用
- 半数server确认某个写事务,则事务提交,向客户端返回写成功
- zk默认只保证最终一致性,如客户端需要强一致性的最新数据,可以调用sync方法,强制同步获取。