文章目录
Hadoop
支持原创
hadoop简介
hadoop的特点
- java开发的
- 高可靠(多副本)
- 高扩展(动态扩展节点)
- 高效(并行处理 PB级数据)
- 高容错(副本 HA)
- 低成本
hadoop版本演进
hadoop1.0(0.20x 0.21x 0.22x 1.x)
- NameNode没有HA
hadoop2.0(0.23x 2.x)
- 扩展性增强:提出了联邦机制(NameNode有各自的命名空间,实现数据访问的隔离和集群横向扩展)
- 资源管理框架Yarn:将JobTracker的资源管理和作业分配功能分开,分别由ResourceManager(资源分配)和ApplicationMaster(作业调度)实现
- 实现了HA:NameNode有了备用节点
hadoop2.0生态圈
核心内容
-
HDFS(Hadoop Distributed File System):hadoop分布式文件系统,提供高吞吐量的访问应用程序数据
-
Hadoop YARN(Hadoop Yet Another Resource Negotiator):作业调度和集群资源管理
-
Hadoop MapReduce:基于yarn的大数据集的并行处理系统
-
Hadoop Common:Hadoop的通用功能(序列化、Java RPC、持久化数据结构等功能)
子项目
- Ambari:部署、管理和监视Hadoop集群的开源框架(操作工具、API),使得hadoop集群的操作变得简化
- Hbase:基于HDFS的、天然可扩展的分布式列式存储数据库
- Hive:基于HDFS的分布式数据仓库系统,提供了类似SQL的HQL查询语言
- Mahout:机器学习和数据挖掘库
- Pig:高级数据流语言和执行环境、检索海量数据集
- Spark:快速、通用的计算引擎(ETL、离线批处理、实时流处理、机器学习和图计算)
- Sqoop:关系型数据库和Hadoop系统进行数据传输的工具
- Tez:从MR演化来的DAG计算框架,可作为MR/Pig/Hive等系统的底层数据处理引擎,天生融入Hadoop2.0中的YARN
- Zookeeper:分布式集群协调服务
Hadoop分布式文件系统:HDFS
HDFS简介
- HDFS(Hadoop Distributed File System):hadoop分布式文件系统,提供高吞吐量的访问应用程序数据
- 硬件错误
- 低成本部署导致硬件出现错误是常态而不是异常(HDFS可能由成百上千服务器构成,每台服务器存一部分数据,任一组件都可能失效)—错误检测和快速、自我恢复(核心架构目标)
- 流失的数据访问
- 一次写入,多次读取
- 多少情况下,数据分析都会涉及数据集的大部分数据(对HDFS,读取整个数据集要比读取一条记录更高效)
- 处理超大文件
- 存储百MB、TB、PB大小的文件
- 简单的一致性模型
- 一次写入,多次读取(一旦创建->写入->关闭,之后不许修改了)
- 移动计算比移动数据更经济
- 在靠近计算数据所存储的位置来进行计算是最理想的状态(特别在数据量特别巨大的时候)—消除网络拥堵,提高系统的整体吞吐量
- 即本地化策略
- 异构软硬件平台间的可移植性
- 平台间的迁移
HDFS体系架构
- 主从架构(Master/Slave)
- NameNode(元数据节点 master)
- open、close、rename文件或者目录
- FS的管理者,负责FS的NameSpace以及客户端对文件的访问
- 元数据保存在磁盘上的文件:image(命名空间镜像)+editlog(操作日志)
- 保存在内存中数据:每个文件对应的数据块,以及每个数据快分布位置(哪个dn上),不过这些数据不在磁盘,而在dn启动后上报nn,存在内存里
- 注意:namenode只存元数据的,真实数据全在dn
- DateNode(数据节点 slave)
- 在NN的统一调度下进行数据块的create、remove、copy
- 处理FS客户端的IO请求
- 周期性向nn汇报自己存储的数据块(block)信息
- 数据:分块存储的,3副本(1和2副本在同一机架的不同节点,3副本在不同机架的节点)
- client
- HDFS的客户端
- 先访问NN获取文件的元数据—之后真正的I/O操作是直接和DN交互的
HDFS数据复制
1.描述
- 注意:block默认128M(特殊:一个文件大20M不够128M,只会有一个块,只占20M磁盘空间)
- 一次写入的,对于同一文件任何时候都只有一个写操作
- NameNode处理所有块复制相关决策
- DN周期性的向NN汇报心跳证明自己在正常工作
- 副本位置
- 存放在机架上,采用的机架感知(让rack-aware)来提高数据的可靠性、可用性以及带宽利用率
- 不同机架的节点通过交换机通信
- DN在向NN注册的时候会告知所处rack的id
- 3副本(1和2副本在同一机架的不同节点,3副本在不同机架的节点)
- 副本选择
- 为了减低整体带宽消耗和读取延时,HDFS会尽量让程序读取离他最近的副本(本地化策略)
HDFS的存储策略
- 简介:根据数据的使用需求来定存储策略,做到既满足性能的同时又能低成本的存储(例如:需要归档的数据(或者偶尔计算下的数据)和需要即席查询的数据)
- 存储类型
- DISK-普通磁盘,存储
- SSD -SSD盘
- RAM_DISK 内存盘
- ARCHIVE -归档/压缩,不是实际的磁盘类型,而是数据被压缩存储
- 存储策略:存储策略允许不同的文件存储在不同的存储类型上,存储策略如下:
- Hot - 存储和计算都热。 如果是热快,那么复制的目标也是DISK(普通的磁盘)。
- Cold -用于有限计算的存储。 数据不再使用,或者需要归档的数据被移动到冷存储。如果数据块是冷的,则复制使用ARCHIVE.
- Warm -半冷半热。warm块的复制内容,部分放置在DISK,其它的在ARCHIVE.
- All_SSD - 所有数据存储在SSD.
- One_SSD - 一个复制在SSD,其它的在DISK.
- Lazy_Persist -只针对只有一个复制的数据块,它们被放在RAM_DISK,之后会被写入DISK
存储策略包括:
- Policy ID --策略ID
- Policy name --策略名称
- A list of storage types for block placement --块存放的有关存储类型(可以多个)
- A list of fallback storage types for file creation–如果创建失败的替代存储类型(可以多个)
- A list of fallback storage types for replication–如果复制失败的替代存储类型(可以多个)
HDFS技术要点回顾
- 技术特点
- 适合处理超大文件,GB、TB、PB级这种大文件
- 支持集群规模的动态扩展
- 适合流式数据的读写场景—一次写入,多次读取
- 高容错性,文件分块存储,并且数据块可以保存多个副本,实现负载均衡和容错恢复
- 对硬件要求低,能够运行在廉价的商用机器集群上—so设计上实现故障检测,快速自我恢复
- 不适合的场景
- 高效存储大量小文件(可以用TextInputFormat或者SequenceFile归档小文件)
- 低延时数据访问(Hbase改进)
- 多用户同时写入和任意修改文件
Hadoop统一资源管理框架YARN
概述
-
YARN:通用的资源管理平台,可为各类计算框架提供资源的管理和调度(例如:MR、Storm、Spark)
-
资源的统一管理和调度:集群中所有的资源(内存、CPU、磁盘、网络)抽象为Container。 在资源进行运算任务时,计算框架需要向yarn申请Container,yarn安装策略对资源进行调度,分配Container
-
资源隔离:yarn使用的Cgroup(轻量级的资源隔离机制)进行资源隔离(Cgroups是是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:cpu,memory,IO等等)的机制)
,避免了相互干扰,而且一旦Container使用的资源超过上限会被杀死 -
YARN=1个ResouceManager+多个NodeManager
RM管理NM上所有资源,并以Container(启动一个Container相当于启动一个进程)方式分配给ApplicationMaster或者AM切分的各Task
YARN体系架构
- YARN架构
- Master/Slave架构
- 主要由ResouceManager、NodeManger、ApplicationMaster、Container等几个组件组成
- ResourceManager(RM)
-
负责对各NM上的资源进行统一的管理和调度
-
给AM分配空闲的Container并监控其运行状态
-
RM由两个组件组成:Scheduler+Applications Manager
-
调度器Scheduler:调度器根据应用程序的资源需要进行资源分配(分配单位是container)—常见的调度器:FIFO、Capcity、Fair Scheduler
-
应用程序管理器(Applications Manager):负责整个系统中的所有应用程序,包括应用程序提交,与调度器协商资源以启动AM,监控AM运行状态并在失败的时候重新启动
- NodeManager(NM)
- NM是每个节点上的资源和任务管理器
- 定时向RM汇报本节点的资源使用状况和各Container的运行状态
- 接收并处理来自AM的Container启动/停止请求
- ApplicationMaster(AM)
- 用户提交的应用程序均包含一个AM,负责应用的监控,跟踪应用执行状态,启动失败任务
- Container
- Container封装了多维度的资源:CPU、内存、磁盘、网络
- YARN对资源的抽象
- AM向RM申请资源,返回的资源就是封装好的Container
- yarn为每个Task分配一个container
YARN应用工作流程
- 两个阶段
- 启动AM:上图步骤1~3
- 由AM创建应用程序,申请资源并监控其整个运行过程,直至运行完成:上图步骤4~7
- YARN工作流程
YARN资源调度模型
YARN提供了一个资源管理平台能够将集群中的资源进行管理,资源抽象为Container
- yarn采用双层资源调度模型
- RM中的资源调度器将container分配给各AM:资源分配过程是异步的。资源调度器将资源分配给一个应用程序后,不会立刻push给对应的AM,而是先放到一个缓冲区中,等待AM通过周期性的心跳主动来取
- AM领取到资源后再进一步分配给它内部的各个task
- YARN目前采用的资源分配算法
- FIFO Scheduler
- Capcity Scheduler
- Fair Scheduler
先按照作业的优先级高低、再按照到达时间的先后
对于Capacity调度器,有一个专门的队列用来运行小任务,但是为小任务专门设置一个队列会预先占用一定的集群资源,这就导致大任务的执行时间会落后于使用FIFO调度器时的时间
目标是:最大化吞吐量和集群利用率
在Fair调度器中,我们不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态的调整系统资源
YARN技术要点回顾
YARN提供了一个资源管理平台能够将集群中的资源进行管理,资源抽象为Container
- YARN使用了轻量级资源隔离机制Cgropus进行资源隔离以避免资源之间相互干扰,实现对CPU和内存两种资源的隔离
- YARN可以运行各自类型的计算框架,包括离线MR、DAG计算框架Tez、基于内存的Spark、实时计算Storm
- 支持FIFO、Fair、Capcity Scheduler
- 支持多租户资源调度,包括支持资源按比例分配、支持层级队列划分和资源抢占
Hadoop MapReduce
概述
1.流程
map->combine->shuffle and sort->reduce
MR的组件
-
split切片解释
-
各组件介绍
-
运行流程
MapReduce数据处理引擎
- MapReduce计算框架主要分为Map阶段和Reduce阶段
-
Map Task阶段
-
涉及排序:内存中->快速排序 磁盘上->归并排序
-
另外,为了减少磁盘Io和网络IO,往往会再map阶段加一个Conbiner组件(功能和Reducer一样哈)
-
Reduce Task阶段
-
涉及排序:内存中->堆排序 磁盘上->归并排序
Mapreduce版本对比
MRv1 | MRv2 | |
---|---|---|
编程模型 | 新旧API | 新旧API |
数据处理引擎 | Map Task/Reduce Task | Map Task/Reduce Task(重构优化) |
运行时环境 | 由(一个)JobTracker和若干TaskTracker构成:Jobtracker负责资源管理和所有祖业控制,而TaskTracker负责接收来自JobTracker的命令并执行它 | YARN(由ResourceManager和NodeManager构成)和MRAppMaster构成,YARN提供一个资源管理和调度的平台,而MRAppMaster作为运行在YARN资源管理平台上的一个应用,仅负责一个作业的管理 |
MapReduce技术要点回顾
Hadoop分布式集群管理系统Zookeeper
- Zookeeper是一个针对大型分布式系统的可靠协调系统(很重要的组件)
- 可以为HDFS、Hbase、MR、YARN、HIVE、Storm、Kafka等组件提供重要功能支撑
- 功能:为分布式系统提供可靠性、可扩展、分布式、可配置的协调机制。
Zookeeper体系架构
- 客户端可以连接到每个Server,每个Server数据完全相同
- 每个Flower和Leader有连接,接受Leader的数据更新操作,Server记录事务日志和快照到持久存储
- 过半Server可用,整个服务就可用
- Leader只有一个,宕机后会重新选出一个
Zookeeper基本特性
- 强一致性:Client不论连接哪个Server,展示的视图都一样
- 可靠性:简单、健壮、良好的性能,if Message被一台服务器接受,那么它可以被所有server接受
- 实时性:zookeeper保证client在一个时间间隔范围内get到server的update信息,或者server失效的信息
- 等待无关(Wait-Free):慢的或者失效的Client不得干预快速的Client的请求。使得每个Client都能有效的wait
- 原子性:update只会有success或者fail,没有中间status
- 顺序性:全局有序和偏序
Zookeeper数据模型
-
Zookeeper的数据模型基于树型结构的命名空间,与文件系统类似(File System+通知机制)
-
数据模型特点
- 分布式:数据节点叫Znode,client可以连接到每个Server,每一个server的数据完全相同
- znode可以是临时节点、持久节点。临时节点一旦创建znode,client与server失去联系,此znode自动删除
- zookeeper的客户端与服务器通信采用长连接,每个client和客户端by 心跳来保持连接,此状态叫做session,if znode是临时节点,session失效的化,znode自动删除
- Watcher(监控):znode可以被监控,if 此目录节点中存储的数据被修改,以及其子节点目录发生变化等,可以通知设置了监控的client,这是zookeeper的核心特性
- by监控功能可以实现配置的集中管理、集群管理、分布式锁等
Zookeeper在Hadoop中的应用举例
-
zookeeper在Yarn的应用
-
流程
- RM的作业信息存储在zookeeper的/rmstore下,Active RM向此目录写App信息
- RM启动的时候会通过向ZK的/rmstore目录下写一个Lock文件,写成功就是Active,失败就是Standby,Standby RM会一直监控此Lock是否存在,一旦消失就睡马上试图去创建,即争取成为Active RM
- 当Active RN挂掉,另一个Standby RM成为Active RM后。会从/rmstore读取相应的作业信息,重新构建作业的内存信息。 之后启动内部服务,开始接收NM的心跳,构建集群资源信息,并接收client提交job的请求等
Zookeeper技术要点回顾
1.zookeeper是针对大型分布式系统的可靠协调系统,可以为HDGFS、Hbase、MR、YARN、Hive等组件提供功能支撑
- HDFs HA的自动Failover、Hbase的Master选举
- 配置管理信息
- 统一命名服务
- 分布式同步操作
- 集群管理