博客 一文读懂什么是Hadoop?

一文读懂什么是Hadoop?

   花袋鼠   发表于 2021-11-04 11:34  746  0

01

引言


2011年的时候我们在百度搜索Hadoop相关的问题每天只有零星几个,2015年再去百度搜索Hadoop已经有800多万个问题,而如今已然已经过亿了,Hadoop已成为大数据必备的基础设施了。Hadoop被公认是一套行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力。几乎所有主流厂商都围绕Hadoop开发工具、开源软件、商业化工具和技术服务。近年大型IT公司,如EMC、Microsoft、Intel、Teradata、Cisco都明显增加了Hadoop方面的投入。那么到底什么是Hadoop?它有什么作用?它的基础架构是怎么样的?今天就Hadoop的这些基本概念来做一次简单的梳理。


02

Hadoop是什么东东


Hadoop是一个由Apache基金会所开发的分布式系统基础架构, 是一个存储系统+计算框架的软件框架。主要解决海量数据存储计算的问题,是大数据技术中的基石。Hadoop以一种可靠、高效、可伸缩的方式进行数据处理,用户可以在不了解分布式底层细节的情况下,开发分布式程序,用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。


03

Hadoop能解决什么问题


01

海量数据存储

HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(High throughput)来访问数据,适合那些有着超大数据集(large data set)的应用程序,它由n台运行着DataNode的机器组成和1台(另外一个standby)运行NameNode进程一起构成。每个DataNode 管理一部分数据,然后NameNode负责管理整个HDFS 集群的信息(存储元数据)。


02

资源管理,调度和分配

Apache Hadoop YARN(Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统和调度平台,可为上层应用提供统 一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨 大好处。


04

Hadoop组件架构是什么样的


看过了Hadoop 的基本介绍之后。我们来了解HDFS 和 YARN的核心架构和原理,先上HDFS框架图:

https://www.dtstack.com/bbs/uploads/article/20211104/d75c619a9bada7e4c311b8d4d9ce6883.jpg

看完上面的图之后,先来思考几个问题:

https://mmbiz.qpic.cn/mmbiz_svg/fWJhv9xMFTs2rpOWorfQ4GowTttVicXQbUatk8PLSdEw3icRdE7pZjy0QKx4GMUXdvEYSLygQlrPaGRjN5dcTIbib79DbzJJbPl/640?wx_fmt=svg&wxfrom=5&wx_lazy=1&wx_co=1

元数据信息是什么,NameNode是如何维护元数据的,元数据信息如何保障一致性?

NameNode维护了HDFS 集群的元数据信息,包括文件的目录树,每个文件对应的数据块列表,权限设置,副本数等等。

元数据信息存储在内存里,那么NameNode异常宕机情况下咋办?

NameNode对元数据的修改包含两个部分

  1. 内存数据修改

  2. 修改内存之后写一条EditLog

再来看两个概念FsImage 和 EditLog:

  • FsImage:FsImage是NameNode内存中元数据的镜像文件,是元数据的一个永久性checkpoint,包含了HDFS的所有目录和文件idnode的序列化信息,可以类比银行的账户余额,只有简单的信息。

  • EditLog:EditLog是用于衔接内存元数据和FsImage之间的操作日志,保存了自最后一次检查点之后,所有针对HDFS文件系统的操作,比如增加文件、重命名文件、删除目录等等,可以类比银行的账户流水,包括每一笔的记录,如果日积月累,流水信息可以非常大。

那么如果Editlog变的非常大之后,宕机之后需要读取Editlog进行恢复元数据,这是一个非常慢点过程。这个时候该StandbyNameNode 节点上场了。Standby 节点从JournalNode集合拉取Editlog,并定时将Editlog合并成FsImage. FsImage是一份合并之后的存量数据信息。同时将FsImage 上传到ActiveNode节点。

https://mmbiz.qpic.cn/mmbiz_svg/fWJhv9xMFTs2rpOWorfQ4GowTttVicXQbUatk8PLSdEw3icRdE7pZjy0QKx4GMUXdvEYSLygQlrPaGRjN5dcTIbib79DbzJJbPl/640?wx_fmt=svg&wxfrom=5&wx_lazy=1&wx_co=1

https://mmbiz.qpic.cn/mmbiz_svg/fWJhv9xMFTs2rpOWorfQ4GowTttVicXQbUatk8PLSdEw3icRdE7pZjy0QKx4GMUXdvEYSLygQlrPaGRjN5dcTIbib79DbzJJbPl/640?wx_fmt=svg&wxfrom=5&wx_lazy=1&wx_co=1

NameNode Active 和 standby 之间是如何切换并始终保持一个ActiveNode

我们可以在上面的HDFS框架图中看到,链接ZK集群和NameNode的组件ZKFC

  1. ZKFC 监控NameNode的监控状态

  2. ZKFC 利用ZK提供的主备节点选举来切换

  3. 通知和修改NameNode的状态

  4. 确认元数据同步完成之后对外提供服务

https://mmbiz.qpic.cn/mmbiz_svg/fWJhv9xMFTs2rpOWorfQ4GowTttVicXQbUatk8PLSdEw3icRdE7pZjy0QKx4GMUXdvEYSLygQlrPaGRjN5dcTIbib79DbzJJbPl/640?wx_fmt=svg&wxfrom=5&wx_lazy=1&wx_co=1


再来看YARN框架图:

https://www.dtstack.com/bbs/uploads/article/20211104/da0f97c7cc0740d037e831dd45c0632f.jpg

上图描述了YARN的一个任务的提交和资源分配流程,在整个过程中涉及到如下的组件:

  • ResourceManeger:负责所有资源的监控、分配和管理,并处理客户端请求,启动和监控AppMaster,NodeManager

  • NodeManager:单个节点上的资源管理和任务管理,处理ResourceManager,AppMaster 的命令

  • AppMaster:负责某个具体应用程序的调度和协调,为应用程序申请资源,并对任务进行监控

  • Container:YARN中的一个动态资源分配的概念,其拥有一定的内存,核数。

一个任务提交的整体流程:

(1)Client向YARN中提交应用程序,

其中包括ApplicationMaster程序、命令、用户程序,资源等。

(2)ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster。

(3)ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态

(4)ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。

(5)一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。

(6)NodeManager为任务设置好运行环境(包括环境变量、Jar包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

(7)各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。

(8)应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。

通过上面的内容,可以对Hadoop 的一些基本框架有一些简单的印象了。之后在使用的时候可以对照上面的结构图和Hadoop 官网或者社区进行深入理解。

0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群