Hadoop起源
Google公司发表了两篇论文:一篇论文是“The Google File System”,介绍如何实现分布式地存储海量数据;另一篇论文是“Mapreduce:Simplified Data Processing on Large Clusters”,介绍如何对分布式大规模数据进行处理。Doug Cutting在这两篇论文的启发下,基于OSS(Open Source software)的思想实现了这两篇论文中的原理,从而Hadoop诞生了。
Hadoop是什么?
一种开源的适合大数据的分布式存储和处理的平台
应用场景
- 搜索引擎:这也正是Doug Cutting设计Hadoop的初衷,为了针对大规模的网页快速建立索引
- 大数据存储:利用Hadoop的分布式存储能力,例如数据备份、数据仓库等
- 大数据处理:利用Hadoop的分布式处理能力,例如数据挖掘、数据分析等
- 科学研究:Hadoop是一种分布式的开源框架,对于分布式系统有很大程度地参考价值
三种模式
- 单机模式
- 伪分布模式
- 全分布模式
三大模块
HDFS(Hadoop Distributed File System)
Hadoop的核心模块之一,主要解决Hadoop的大数据存储问题,思想来源于Google的文件系统GFS
主要特点
1 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。默认存3份
2 运行在廉价的机器上
3 适合大数据的处理。HDFS默认会将文件分割成block,64M为1个block。然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中。如果小文件太多,那内存的负担会很重
可靠性机理
- 冗余副本策略,即所有数据都有副本,副本的数目可以在hdfs-site.xml中设置
- 机架策略,即HDFS的“机架感知”,一般在本机架存放一个副本,在其它机架再存放别的副本,这样可以防止机架失效时丢失数据,也可以提供带宽利用率
- 心跳机制,即Namenode周期性从Datanode接受心跳信号和快报告,没有按时发送心跳的Datanode会被标记为宕机,不会再给任何I/O请求,若是Datanode失效造成副本数量下降,并且低于预先设置的阈值,Namenode会检测出这些数据块,并在合适的时机进行重新复制
- 安全模式,Namenode启动时会先经过一个“安全模式”阶段
- 校验和,客户端获取数据通过检查校验和,发现数据块是否损坏,从而确定是否要读取副本
- 回收站,删除文件,会先到回收站/trash,其里面文件可以快速恢复
- 元数据保护,映像文件和事务日志是Namenode的核心数据,可以配置为拥有多个副本
- 快照,支持存储某个时间点的映像,需要时可以使数据重返这个时间点的状态
结构图示
372e56dc-340e-4332-89b1-624d447ec61c.jpgNameNode:是Master节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;存储的是fsimage+edits
SecondaryNameNode:是一个小弟,分担大哥namenode的工作量;是NameNode的冷备份;合并fsimage和fsedits然后再发给namenode;默认定时1小时一次
DataNode:Slave节点,奴隶,干活的。负责存储client发来的数据块block;执行数据块的读写操作
热备份:b是a的热备份,如果a坏掉。那么b马上运行代替a的工作
冷备份:b是a的冷备份,如果a坏掉。那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失
fsimage:元数据镜像文件(文件系统的目录树。)
edits:元数据的操作日志(针对文件系统做的修改操作记录)
存储图示
Namenode
- 管理文件系统的命名空间
- 记录 每个文件数据快在各个Datanode上的位置和副本信息
- 协调客户端对文件的访问
- 记录命名空间内的改动或者空间本省属性的改动
- Namenode 使用事务日志记录HDFS元数据的变化。使用映像文件存储文件系统的命名空间,包括文件映射,文件属性等
从社会学来看,Namenode是HDFS里面的管理者,发挥者管理、协调、操控的作用
Datanode
- 负责所在物理节点的存储管理
- 一次写入,多次读取(不修改)
- 文件由数据库组成,一般情况下,数据块的大小为64MB
- 数据尽量散步到各个节点
从社会学来看,Datanode是HDFS的工作者,发挥按着Namenode的命令干活,并且把干活的进展和问题反馈到Namenode的作用
YARN(Yet Another Resource Negotiator)
一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,在集群的利用率、资源统一管理和数据共享等方面很优秀,基本思想是将JobTracker的两个主要功能(资源管理和作业调度/监控)分离
工作图示
ResourceManager
整个集群只有一个,负责集群资源的统一管理和调度
- 处理客户端请求
- 启动/监控ApplicationMaster
- 监控NodeManager
- 资源分配与调度
NodeManager
整个集群有多个,负责单节点资源管理和使用
- 单个节点上的资源管理和任务管理
- 处理来自ResourceManager的命令
- 处理来自ApplicationMaster的命令
ApplicationMaster
每个应用只有一个,负责应用程序的管理
- 数据切分
- 为应用程序申请资源,并进一步分配给内部任务
- 任务监控与容错
Container
对任务运行环境的抽象,描述一系列信息
- 任务运行资源(节点、内存、CPU)
- 任务启动命令
- 任务运行环境
MapReduce
一个“分而治之”的软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集
工作图示
客户端:用来提交MapReduce作业
jobtracker:用来协调作业的运行
tasktracker:用来处理作业划分后的任务
HDFS:用来在其它实体间共享作业文件
工作环节
- 作业的提交
- 作业的初始化
- 任务的分配
- 任务的执行
- 进程和状态的更新
- 作业的完成
网友评论