1 hadoop2.0内核
1.1 HDFS
分布式文件存储系统HDFS,提供高可用、高扩展性、高吞吐率的数据存储服务
高可用:NameNode通过zookeeper实现高可用
高扩展性:可以通过添加服务器来水平扩展hadoop集群
将文件切分成等大的数据块,存储到多台机器上,并且数据块是冗余存储,高容错性
可以将HDFS看成是一个容量巨大、高容错的磁盘
提供了移动计算,而非移动数据移动,只是将数据位置暴漏给计算框架,提高批处理效率
适用于海量数据的可靠性存储
数据归档,落地
缺点:
不适合低延时数据访问
不适合小文件存取,当小文件数量非常多的时候,元数据(文件位置、大小等)信息占用大量内存,寻道时间超过读取时间长
不适合并发写入、随机修改,一个文件只能有一个写,仅支持追加操作,不支持修改
架构:
NameNode Active 、NameNode Standby和DataNode
NameNode Active存储一些元数据信息(一个文件被分割成几个数据块,每一个数据块对应的DataNode的位置)
DataNode存储真正的数据块
NameNode Standby是NameNode Active的热备,当NameNode宕机之后,可以迅速切换到NameNode Standby
HDFS数据块:
文件会被默认切分成固定大小的数据块,可以配置,默认是64M
数据块如此之大,可以保证大部分时间花费在传输时间上,而不是寻道时间,确保高吞吐率
HDFS写流程:
客户端写入数据时,打开分布式文件系统,通知namenode创建一个文件(namenode先确定该文件不存在,并确定客户端有权限),之后客户端通过写入流将数据写入数据队列,DataStreamer负责处理数据队列,要求namenode分配适合的datanode来存储数据副本,每一个数据库默认复制三块,将数据写入第一个datanode,第一个datanode将数据块发送给第二个datanode,第二个数据块再给第三个,之后datanode告知数据写入成功
HDFS读流程:
客户端读取数据时,先去namenode获取元数据的位置,到对应的datanode进行IO读取
HDFS数据块部署策略:
一个文件分割成多个block,每一个block存储多份,首先将两个副本放置在同一个机架的上,再将第三个副本放置在不同机架上的节点
HDFS可靠性策略:
文件锁坏:副本冗余
网络或机器失败:DataNode定期向NameNode发送心跳信息
NameNode挂掉:主备热备
1.2 YARN
hadoop2.0新增的系统
资源管理系统YARN,负责集群资源的统一管理和调度
使得多种计算框架可以运行在一个集群中(计算框架:MapReduce、spark、storm)
良好的可扩展性、高可用
ResourceManager和NodeManager
ResourceManager:
集群资源的统一管理和调度
处理客户端请求
启动/监控ApplicationMaster,接收来自ApplicationMaster的资源申请,并且为其分配资源
监控NodeManager,接收来自NodeManager的资源和健康汇报
ApplicationMaster:
负责每一个应用程序的资源调度,资源申请,任务容错
NodeManager:
单个节点上的资源管理和任务管理
处理来自ResourceManager和ApplicationMaster的命令
NodeManager宕机后,ResourceManager会通知对应的ApplicationMaster
Container:
任务运行资源的封装,如内存、cpu
任务运行环境
1 client提交应用程序到ResourceManager上,提交的同时将ApplicationMaster相关信息告知ResourceManager
2 ResourceManager根据ApplicationMaster寻找到对应资源的NodeManager
3 NodeManager接收到RsourceManager命令后,将ApplicationMaster启动起来
4 ApplicationMaster提交资源信息给ResourceManager,要求ResourceManager分配资源
5 ApplicationMaster拿到资源后,与对应的NodeManager通信,要求启动一个Task
ResourceManager HA
ResourceManager通过Zookeeper解决单点故障,实现类了自动切换
NodeManager失败,ResourceManager将失败任务告知ApplicationMaster,ApplicationMaster处理
ApplicationMaster失败,ResourceManager重启
YARN资源调度特征
双层调度:ResourceManager将资源分配给ApplicationMaster,ApplicationMaster将资源进一步分配给Task
调度策略:资源预留,当Task资源不足时,预留资源给Task,直至资源充足
多类型资源调度:支持CPU、内存两种资源
1.3 MapReduce计算框架
分布式计算框架MapReduce
良好的可扩展性,高容错
适合海量数据的离线处理
计算过程分为两个Map阶段和Reduce阶段,Map阶段并行处理输入数据,Reduce阶段对Map阶段结果进行汇总
Shuffle连接Map和Reduce两个阶段,Map阶段将产生的结果写入到本地磁盘,reduce阶段从其读取结果
Map阶段由一定数量的Map Task组成:数据格式解析InputFormat、输入数据处理Mapper、数据分组Partitioner
Reduce阶段由一定数量的Reduce Task组成:数据远程拷贝、数据按照key排序、数据处理Reducer、数据输出格式OutputFormat
编程模型:
Map阶段
InputFormat (默认TextInputFormat),将分片数据解析成key/value对
Mapper
Combiner(local reducer),相当于本地reducer,与Reduce逻辑一致,优化计算效率
Partitioner,决定Map Task输出的每条数据交给哪个Reduce Task处理,默认实现为hash(key) mod R ,R为reduce Task的数量
Reduce阶段
Reducer
OutputFormat(默认TextInputFormat)
数据本地性
同一个机架共用一个交换机,不同机架之间交换信息需要跨越多个交换机进行通信
任务运行在它将处理的数据所在节点上,称为数据本地性,数据本地性可以避免节点或机架数据传输,提高效率
分类:同节点、同机架、其它