问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Hadoop三大核心组件的架构思想和原理

创作时间:
作者:
@小白创作中心

Hadoop三大核心组件的架构思想和原理

引用
1
来源
1.
https://cloud.tencent.com/developer/article/1892603

Hadoop作为大数据处理领域的核心框架,其三大组件HDFS、MapReduce和Yarn在分布式存储和计算中扮演着重要角色。本文将从分布式文件存储、大数据计算架构以及资源调度框架三个方面,深入解析Hadoop的核心组件及其架构思想。

引子

大数据处理的核心在于如何存储和有效利用大规模服务器集群进行计算。Hadoop作为大数据处理领域的核心框架,其三大组件HDFS、MapReduce和Yarn在分布式存储和计算中扮演着重要角色。

HDFS分布式文件存储架构

HDFS(Hadoop Distributed File System)作为Hadoop的第一个产品,是分布式计算的基础。如果将大数据计算比作烹饪,那么数据就是食材,而Hadoop分布式文件系统HDFS就是烧菜的那口大锅。

HDFS可以将数千台服务器组成一个统一的文件存储系统,其中NameNode服务器充当文件控制块的角色,进行文件元数据管理,即记录文件名、访问权限、数据存储地址等信息,而真正的文件数据则存储在DataNode服务器上。

DataNode以块为单位存储数据,所有的块信息,比如块ID、块所在的服务器IP地址等,都记录在NameNode服务器上,而具体的块数据存储在DataNode服务器上。理论上,NameNode可以将所有DataNode服务器上的所有数据块都分配给一个文件,也就是说,一个文件可以使用所有服务器的硬盘存储空间。

此外,HDFS为了保证不会因为磁盘或者服务器损坏而导致文件损坏,还会对数据块进行复制,每个数据块都会存储在多台服务器上,甚至多个机架上。

MapReduce大数据计算架构

MapReduce是大数据计算的核心框架,其核心思想是对数据进行分片计算。MapReduce将计算过程分成了两个部分:一部分是map过程,每个服务器上会启动多个map进程,map优先读取本地数据进行计算,计算后输出一个<key,value>集合;另一部分是reduce部分,MapReduce在每个服务器上都会启动多个reduce进程,然后对所有map输出的<key,value>集合进行shuffle操作。所谓的shuffle就是将相同的key发送到同一个reduce进程中,在reduce中完成数据关联计算。

以经典的WordCount为例,即统计所有数据中相同单词的词频数据:

假设原始数据有两个数据块,MapReduce框架启动了两个map进程进行处理,它们分别读入数据。map函数会对输入数据进行分词处理,然后针对每个单词输出<单词,1>这样的<key,value>结果。然后MapReduce框架进行shuffle操作,相同的key发送给同一个reduce进程,reduce的输入就是<key,value的列表>这样的结构,即相同key的value合并成了一个列表。在这个示例中,这个value列表就是由很多个1组成的列表。reduce对这些1进行求和操作,就得到了每个单词的词频结果了。

示例代码如下:

在Hadoop 1中,MapReduce应用程序的启动过程主要是通过JobTracker和TaskTracker通信来完成。但是这种架构方案存在缺点:服务器集群资源调度管理和MapReduce执行过程耦合在一起,如果想在当前集群中运行其他计算任务,比如Spark或者Storm,就无法统一使用集群中的资源了。

Yarn资源调度框架

为了解决上述问题,Hadoop 2将Yarn从MapReduce中分离出来,成为一个独立的资源调度框架。Yarn的设计思路是将原JobTracker的功能进行拆分,并在一个集群上部署一个统一的资源调度框架YARN,在YARN之上可以部署各种计算框架。

Yarn包括两个部分:资源管理器(Resource Manager)和节点管理器(Node Manager)。ResourceManager进程负责整个集群的资源调度管理,通常部署在独立的服务器上;NodeManager进程负责具体服务器上的资源和任务管理,在集群的每一台计算服务器上都会启动,基本上跟HDFS的DataNode进程一起出现。

资源管理器又包括两个主要组件:调度器和应用程序管理器。调度器其实就是一个资源分配算法,根据应用程序(Client)提交的资源申请和当前服务器集群的资源状况进行资源分配。Yarn内置了几种资源调度算法,包括Fair Scheduler、Capacity Scheduler等,你也可以开发自己的资源调度算法供Yarn调用。Yarn进行资源分配的单位是容器(Container),每个容器包含了一定量的内存、CPU等计算资源,默认配置下,每个容器包含一个CPU核心。容器由NodeManager进程启动和管理,NodeManger进程会监控本节点上容器的运行状况并向ResourceManger进程汇报。

应用程序管理器负责应用程序的提交、监控应用程序运行状态等。应用程序启动后需要在集群中运行一个ApplicationMaster,ApplicationMaster也需要运行在容器里面。每个应用程序启动后都会先启动自己的ApplicationMaster,由ApplicationMaster根据应用程序的资源需求进一步向ResourceManager进程申请容器资源,得到容器以后就会分发自己的应用程序代码到容器上启动,进而开始分布式计算。

总结

本文简单介绍了Hadoop三大组件的架构思想和原理,对于一些非重点的内容并未详细展开介绍,读者可以根据需要进一步学习。需要注意的是,本文发布于2021年,部分内容可能已经过时,建议读者在学习时结合最新的技术发展进行参考。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号