Hadoop 简介

小小码农 2022年10月09日 991次浏览

Hadoop 介绍

Hadoop 是一个开源的分布式计算和存储框架,由 Apache 基金会开发和维护。

Hadoop 为庞大的计算机集群提供可靠的、可伸缩的应用层计算和存储支持,它允许使用简单的编程模型跨计算机群集分布式处理大型数据集,并且支持在单台计算机到几千台计算机之间进行扩展。

Hadoop 的作用非常简单,就是在多计算机集群环境中营造一个统一而稳定的存储和计算环境,并能为其他分布式应用服务提供平台支持。

也就是说, Hadoop 在某种程度上将多台计算机组织成了一台计算机(做同一件事),那么 HDFS 就相当于这台计算机的硬盘,而 MapReduce 就是这台计算机的 CPU 控制器。

Hadoop 使用 Java 开发,所以可以在多种不同硬件平台的计算机上部署和使用。

Hadoop 历史

2003 年和 2004 年,Google 公司先后发表了两篇著名的论文 GFS 和 MapReduce。

这两篇论文和 2006 年发表的 BigTable 成为了现在著名的"Google 三大论文"。

Doug Cutting 在受到了这些理论的影响后开始了 Hadoop 的开发。

Hadoop 包含了两大核心组件。在 Google 的论文中,GFS 是一个在庞大的计算机集群中运行的分布式文件系统,在 Hadoop 中 HDFS 实现了它的功能。MapReduce 是一个分布式计算的方式,Hadoop 用同名称的 MapReduce 框架实现了它的功能。我们会在之后的 MapReduce 章节中详细介绍它。 从 2008 年开始,Hadoop 作为 Apache 顶级项目存在。它与它的众多子项目广泛应用于包括 Yahoo、阿里巴巴、腾讯等大型网络服务企业,并被 IBM、Intel、Microsoft 等平台公司列为支持对象。

Hadoop 概念

参考
https://www.runoob.com/w3cnote/hadoop-intro.html

Hadoop 版本

Hadoop 1.x

第一代Hadoop,由分布式存储系统HDFS(Hadoop Distributed File System)和分布式计算框架MapReduce组成,其中HDFS由一个NN(NameNode)和多个DN(DateNode)组成,MapReduce由一个JobTracker和多个TaskTracker组成。

核心组件

  • HDFS:单个NN、单个SN(Secondary NameNode)、多个DN
  • MapReduce:包括三个部分:运行时环境(JobTracker和TaskTracker)、编程模型(MapReduce)、数据处理引擎(Map任务和Reduce任务)

问题

  • 单点故障
  • 水平扩展性差
  • MRv1(Hadoop 1.0版本MapReduce)扩展性差、低可靠性、资源利用率低、无法执行非MapReduce任务、无法支持多种计算框架

扩展性差和低可靠性
由于JobTracker同时兼备了集群资源的管理和作业的调度与控制两大功能,使得JobTracker负载过重,增加了JobTracker失效的风险,造成Hadoop集群的扩展性差和低可靠性

资源利用率低
MRv1采用了基于槽位(slot)的资源分配模型,需要为map任务和reduce任务预先配置tasktracker槽位,当一个任务用不完槽位对应的所有资源其他任务也无法使用,而且为map任务保留的slot无法用于reduce任务,这造成资源利用率低

无法执行非MapReduce任务
MRv1中资源管理器JobTracker、TaskTracker耦合高,导致MRv1无法执行非MapReduce任务。

Hadoop 2.x

2.0版本中引入了YARN作为通用资源调度平台后,Hadoop得以支持多种计算框架,如MapReduce、Spark、Storm等。

MRv1中任务是运行在Map slot和Reduce slot中的,计算节点上的Map slot资源和Reduce slot资源不能重用。而MRv2中任务是运行在Container中的,map任务结束后,相应container结束,空闲出来的资源可以让reduce使用。

MRv2(Hadoop 2.0版本MapReduce)中,重用了MRv1中的编程模型和数据处理引擎。但是运行时环境被重构了。JobTracker被拆分成了通用的资源调度平台YARN和负责各个计算框架的任务调度模型AM。

Hadoop2.0增加了HDFS HA(高可用)机制,解决了HDFS 1.0中的单点故障问题,通过HA进行Standby NameNode的热备份。

Hadoop2.0增加了HDFS Federation(联邦)水平扩展,支持多个NameNode同时运行,每一个NameNode分管一批目录,然后共享所有DataNode的存储资源,从而解决1.0当中单个NameNode节点内存受限问题。

核心组件

  • HDFS:双NameNode(Active NameNode、Standby NameNode)、DN

HDFS2.0中存在两个NameNode,为区分两者,将主NameNode称为Active NameNode,将备用NameNode称为Standy NameNode。两者通过Journal Node实现元数据同步。

  • YARN(Yet Another Resource Negotiator,资源调度):由ResourceManager(RM)、NodeManager(NM)、ApplicationMaster(AM)、Container四大组件(四大进程)组成

在Hadoop2.0当中增加了YARN框架,针对hadoop1.0中主JobTracker压力太大的不足,把JobTracker资源分配和作业控制分开,利用Resource Manager在NameNode上进行资源管理调度,利用ApplicationMaster进行任务管理和任务监控。由NodeManager替代TaskTracker进行具体任务的执行,因此MapReduce2.0只是一个计算框架。对比hadoop1.0中相关资源的调用全部给Yarn框架管理。

四大组件的作用
ResourceManager:
1、处理客户端请求
2、启动/监控ApplicationMaster
3、监控NodeManager
4、资源分配与调度

APPlicationMaster:
1、程序切分
2、为应用程序申请资源,并分配任务
3、任务监控与容错

NodeManager:
1、单个节点上资源管理
2、处理来自ResourceManager的命令
3、处理来自ApplicationMaster的命令

Container:
对任务运行环境的抽象,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关信息

YARN 工作流程
1:client连接RM提交作业,RM给client一个JobId(ApplicationManager和ResourceScheduler)
2:RM中的ApplicationManager连接一个NM,让NM创建一个AM处理客户端作业请求
3:AM连接RM中的ApplicationManager申请Nodemanager,
4:AM连接ResourceScheduler去给client的作业申请资源(cpu、内存、磁盘、网络)
5:AM连接NM,发送client job作业程序和申请的资源cpu、内存、磁盘、网络
6:NM启动Container进程运行job的不同任务
7:Container进程运行状态实时反馈给AM
8:AM反馈任务状态信息给RM中的ApplicationManager
9:client端可以连接RM或AM查询job的执行情况
注:NM启动后去RM上进行注册,会不断发送心跳,说明存活状态

Hadoop 3.x

Hadoop2.0之后版本就相对稳定,大部分实际生产环境中都使用的是2.0,Hadoop3.0主要增加了一些性能上的优化和支持:

  • Java运行环境升级为1.8,对低版本的java不再支持
  • HDFS3.0支持数据的擦除编码,调高存储空间的使用率
  • 一些默认端口的改变
  • 增加一些MapReduce的调优

Hadoop生态圈

参考
https://blog.csdn.net/centrl/article/details/124873086