8.1Hadoop优化与发展
- Hadoop1.0的不足与局限
- 抽象层次低
- 表达能力有限
- 开发者自己管理作业之间的依赖关系
- 难以看到程序整体逻辑
- 执行迭代效率低
- 浪费资源
- 实时性差
- 针对Hadoop的改进与提升
- 在1.0中单一名称节点,存在单点失效问题,设计了HDFS HA提供名称节点热备份机制
- 单一命名空间无法实现资源隔离,设计HDFS联邦,管理多个命名空间
- 对于MapReduce资源管理效率低下,设计新的资源管理框架YARN
- Pig,处理大规模数据脚本语言,解决抽象层次低的问题
- Oozie,工作流和协作服务引擎,协助Hadoop运行不同的任务,解决没有提供依赖关系管理机制。
- Tez, 支持DAG作业的计算框架,对于作业操作进行分解和重组,解决不同MapReduce任务之间存在的重复操作。
- Kafka, 分布式发布订阅消息系统,一般为作为企业大数据分析平台的数据交换枢纽,实现各个组件之间不同数据类型的高效交换,解决Hadoop生态中各个组件和产品之间缺乏统一数据交换中介。
8.2HDFS2.0的新特性
增加了HDFS HA和HDFS联邦
HDFS HA
- 在HDFS1.0中存在一个第二名称节点,它的职责是周期性的从名称节点中获取命名空间镜像文件(FsImage)和修改日志(EditLog),进行合并后再发送给名称节点,替换掉原来的FsImage,以防止日志文件过大,同时在第二名称节点中也保存一份。,这样就可以进行冷备份了。
- 在HDFS2.0中为了解决单点问题采用HA架构,设置两个名称节点,其中一个处于活跃状态。也就是可以进行热备份了。两个名称节点的状态同步,可以借助一个共享系统来实现,NFS、QJM或Zookeeper,防止出现两个管家,使用Zookeeper进行管理。
HDFS联邦
- HDFS1.0中只有一个名称节点,不可以进行水平扩展,整体性能方面受限于单个名称节点吞吐量。HDFS HA解决了单点故障问题,但是没有解决扩展性、系统性能、隔离性问题。
- 在联邦设计中设计多个互相
独立
的名称节点,使得HDFS命名服务能够水平扩展,这些名称节点分别进行各自的命名空间和块管理,相互之间是联邦关系,不需要彼此协调。 - 在联邦中名称节点提供了命名空间和块管理功能,所有名称节点共享底层的数据节点存储资源。
- HDFS联邦的访问方式,可以采用客户端挂载表进行数据共享。
- 相比于1.0优势:
- HDFS集群可扩展性,各自分管一部分目录
- 性能更高
- 良好的隔离性
- 需要注意的是HDFS联邦不能够解决单点故障问题,估计是相互独立的原因,所以需要为每个名称节点部署一个后备节点。
8.3新一代资源管理调度框架
- MapReduce1.0采用Master/Slave架构设计,包括一个JobTracker和若干个TaskTracker,存在以下缺点:
- 存在单点故障
- JobTracker“大包大揽”导致任务过重(三大功能,资源管理、任务调度和任务监控)
- 容易出现内存溢出
- 资源划分不合理
- YARN(Yet Another Resource Negotiator)设计思路
- 基本思路就是放权,把原有功能进行拆分
- ResourceManager负责管理资源,处理客户端请求;启动和监控Application;监控NodeManager;资源分配与调度
- ApplicationMaster负责任务调度和监控,为应用程序申请资源,并且分配给内部;任务调度、监控与容错
- NodeManager负责执行原TaskTracker的任务,单个节点上的资源管理;处理来自ResourceManager的命令;处理来自ApplicationMaster的命令
- YARN中是以容器(Container)作为动态资源分配单位
- YARN的ResourceManager的组件和HDFS的名称节点部署在一个节点上面
- YARN的ApplicationMaster及NodeManager是和HDFS的数据节点部署在一起的
YARN工作流程
- 用户编写客户端应用程序,向YARN提交程序,包括ApplicationMaster程序、启动的命令、用户程序等
- YARN中的ResourceManager负责接收和处理来自客户端的请求。启动一个ApplicationMaster
- ApplicatioMaster被创建后首先向ResourceManager注册
- ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请资源
- ResourceManager以容器的形式向ApplicationMaster分配资源,一旦得到资源后会在容器里面与NodeManager进行通信。
- 当ApplicationMaster要求容器启动任务时他会为任务设置好运行环境,然后将任务启动命令写到一个脚本中,通过容器来运行此脚本来启动任务。
- 各个任务通过RPC协议向ApplicationMaster可以随时掌握各个任务运行状态,可以在任务失败时重启任务。
- 应用程序运行完成后,ApplicationMaster向ResourceManager的应用程序管理器注销并关闭自己。
YARN框架的优势相比于MapReduce1.0
- 大大减少了承担中心服务功能ResourceManager的资源消耗
- MapReduce是一个计算框架,又是一个资源管理调度框架,但是只能支持MapReduce编程模型。而YARN一个纯粹的资源调度框架,可以运行各种计算框架。
- YARN资源管理更加高效