从Hadoop1.0到Hadoop2.0架构的优化和发展探索详解

简介: 从Hadoop1.0到Hadoop2.0架构的优化和发展探索详解

前言


本人大三软件工程大数据专业,在此领域本人有诸多不明确疑问,可能文章会有些许错误,望大家在评论区指正,本篇文章错误将会不断更正维护。


一、Hadoop1.0


Hadoop1.0即第一代Hadoop,由分布式存储系统HDFS和分布式计算框架MapReduce组成,其中HDFS由一个NameNode和多个DateNode组成,MapReduce由一个JobTracker和多个TaskTracker组成。


20201123114428569.png

1.1HDFS1.0


HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群包括一个名称节点和若干个数据节点。名称节点作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问。其中,master主节点称之为Namenode节点,而slave从节点称为DataNode节点。

20201123103233253.png


NameNode管理着整个文件系统,负责接收用户的操作请求

NameNode管理着整个文件系统的目录结构,所谓目录结构类似于我们Windows操作系统的体系结构

NameNode管理着整个文件系统的元数据信息,所谓元数据信息指定是除了数据本身之外涉及到文件自身的相关信息

NameNode保管着文件与block块序列之间的对应关系以及block块与DataNode节点之间的对应关系

对于第三点名称节点保存元数据:


(1).在磁盘上:Fslnage和EditLog


(2).在内存中:映射信息,即文件包含哪些块,每个块存储在哪个数据节点


NameNode DataNode
保存元数据 存储文件内容
元数据保存在内存中 文件内容保存在磁盘
保存文件,block,datanode之间的映射关系 维护了block id到datanode本地文件的映射关系


namenode有且只有一个,虽然可以通过SecondaryNameNode与NameNode进行数据同步备份,但是总会存在一定的延时,如果NameNode挂掉,但是如果有部份数据还没有同步到SecondaryNameNode上,还是可能会存在着数据丢失的问题。


20201123110114819.png


第二名称节点会定期与第一名称节点通信。


缺陷:

单点故障问题:NameNode含有我们用户存储文件的全部的元数据信息,当我们的NameNode无法在内存中加载全部元数据信息的时候,集群就面临崩溃。第二名称节点无法解决单点故障问题。

不可以水平扩展,不过可以纵向扩展增加硬盘,但是不方便不灵活。单台机器的NameNode必然有到达极限的地方。

系统整体性能受限于单个名称节点的吞吐量。

单个名称节点难以提供不同程序之间的隔离性

Secondaryname只有冷备份作用。


1.2MadReduce1.0


MapReduce来说,同样时一个主从结构,是由一个JobTracker(主)和多个TaskTracker(从)组成。

MapReduce1.0既是有一个计算框架,也是一个资源管理调度框架。

20201123111650990.png



可以看得出JobTracker相当于是一个资源管理调度器,必然要面对大量的任务处理。而且出现错误集群必然崩溃。


各个角色的功能:

20201123111803761.png

作业调度流程图:

20201123112023840.png


缺陷:


存在单点故障问题,一旦Master节点坏掉即JobTracker故障,其他节点不能再工作。

JobTacker工作过重,如果任务多时开销太大。

容易出现内存溢出,分配资源只考虑MapReduce任务数,不考虑CPU、内存。

资源划分不合理(强制划分为slot,包括Map slot和Reduce slot)


二、Hadoop2.0


相对于Hadoop1.0来说,2就好多,这也是毋庸置疑的,总不可能越更新越差吧。

我们来详细了解一下2版本究极加了哪些东西。

20201123114213408.png

2.1HDFS2.0


2.1.1HDFS HA


HDFS HA(High Availability)是为了解决单点故障问题而设计。

20201123120032986.jpg



JN:JounrnalNode日志节点,在学习期间一般使用3个节点来部署JN。


ZKFC:全称是ZooKeeper Failover Controller,这个一个单独的进程,其数量和NN数量一样,负责监控NN节点的健康状态,同时向ZK发送心跳表明它还在工作和NN的状态,如果NN挂了,就可以让ZK马上选举出新的NN(其实就是让standbyNN的状态切换称active),所以ZKFC是NN的一个守护进程,其一般会和其对应的NN部署在同一个节点上。


ZK:ZooKeeper,当一个activeNN挂掉以后,从standbyNN节点中选举新的NN来充当activeNN对外提供服务,一个是部署奇数台的。这里建议当你的集群规模是在50台一下的时候,ZK一般部署7个节点;50~100台时,ZK在9或者11个节点;100以上就部署11个节点以上吧。但并部署越多越好的,ZK进程越多需要计算的时间就越多,选举的时间就越长,所以合适就好。


HA集群设置了两个名称节点,“活跃(Active)”和“待命(Standby)”以至于不会落入单点故障。处于活跃状态的名称节点负责对外处理所有客户端的请求,而处于待命状态的名称节点则作为备用节点,保存了足够多的系统元数据,当名称节点出现故障时提供快速恢复能力。也就是说,在HDFS HA中,处于待命状态的名称节点提供了“热备份”,一旦活跃名称节点出现故障,就可以立即切换到待命名称节点,不会影响到系统的正常对外服务。


由于待命名称节点是活跃的“热备份”,因此活跃名称节点的状态信息必须实时同步到待命名称节点。两种名称节点的状态同步,可以借助于一个共享存储系统来实现,比如NFS(Network File System)、QJM(Quorum Journal Manager)或者Zookeeper。活跃名称节点将更新数据写入到共享存储系统,待命名称节点会一直监听该系统,一旦发现有新的写入,就立即从公共存储系统中读取这些数据并加载到自己的内存中,从而保证与活跃名称节点状态完全同步。此外,名称节点中保存了数据库(block)到实际存储位置的映射信息,即每个数据块是由哪个数据节点存储的。当一个数据节点加入HDFS集群时,它会把自己所包含的数据块列表报告给名称节点,此后会通过“心跳”的方式定期执行这种告知操作,以确保名称节点的块映射是最新的。


2.1.2HDFS Federation(联邦)


HDFS1.0采用单名称节点的设计,还存在可扩展性、性能和隔离性等问题。而HDFS联邦可以很好地解决上述三个方面的问题。


HDFS联邦采用多个相互独立的名称节点,使得HDFS的命名服务能够水平扩展,这些名称节点分别进行各自命名空间和块的管理,相互之间是联邦(Federation)关系,不需要批次协调。并且向后兼容

HDFS联邦中,所有名称节点会共享底层的数据节点存储资源,数据节点向所有名称节点汇报

属于同一个命名空间的块构成一个“块池”


20201123195719173.png


对于联邦中多个命名空间,可以采用客户端挂载表(Client Side Mount Table)方式进行数据共享和访问

客户可以访问不同的挂载点来访问不同的子命名空间

把各个命名空间挂载到全局“挂载表”(mount-table)中,实现数据全局共享

同样的命名空间挂载到个人的挂载表中,就称为应用程序课件的命名空间


20201123200231477.png

HDFS Federation设计可以解决单名称节点存在的以下几个问题:


HDFS集群扩展性。多个名称节点各自分管一部分目录,使得一个集群可以扩展到更多节点,不再像HDFS1.0中那样由于内存的限制制约文件存储数目

性能更高效。多个名称节点管理不同的数据。且同时对外提供服务,将为用户提供更好的读写吞吐率。

良好的隔离性。用户可根据需要将不同业务数据交由不同名称节点管理,这样不同业务之间影响很小。

需要注意的是,HDFS Federation并不能解决单点故障问题,也就是说,每个名称节点都存在在单点故障问题,需要为每个名称节点部署一个后备名称节点,以应对名称节点挂掉对业务产生的影响。


2.2YARN


YARN设计思路是将原JobTacker三大功能拆分


20201123202624542.png


20201123204250363.png


Hadoop2.0以后,MapReduce1.0中的资源管理调度功能,被单独分离出来形成了YARN,它是一个纯粹的资源管理调度框架,而不是一个计算框架。被剥离了资源管理调度功能的MapReduce就变成了MapReduce2.0,它是运行在YARN之上的一个纯粹的计算框架,不再自己负责资源调度管理服务,而是由YARN为其提供资源管理调度服务。


YARN作业调度流程

20201123201757409.png


2.2.1ResourceManager


  • 处理客户端请求
  • 启动/监控ApplicationMaster
  • 监控NodeManager
  • 资源分配与调度



ResourceManager 拥有系统所有资源分配的决定权,负责集群中所有应用程序的资源分配,拥有集群资源主要、全局视图。因此为用户提供公平的,基于容量的,本地化资源调度。根据程序的需求,调度优先级以及可用资源情况,动态分配特定节点运行应用程序。它与每个节点上的NodeManager和每一个应用程序的ApplicationMaster协调工作。


ResourceManager的主要职责在于调度,即在竞争的应用程序之间分配系统中的可用资源,并不关注每个应用程序的状态管理。


ResourceManager主要有两个组件:Scheduler和ApplicationManager:Scheduler是一个资源调度器,它主要负责协调集群中各个应用的资源分配,保障整个集群的运行效率。Scheduler的角色是一个纯调度器,它只负责调度Containers,不会关心应用程序监控及其运行状态等信息。同样,它也不能重启因应用失败或者硬件错误而运行失败的任务。


调度器被设计成一个可插拔的组件,YARN不仅自身提供了许多种直接可用的调度器,也应许用户根据自己的需求设计调度器。


容器(Container)作为动态资源分配单位,每个容器中都封装了一定数量的CPU、内存、磁盘等资源,从而限定每个应用程序可以使用的资源量。


2.2.2ApplicationMaster


  • 为应用程序申请资源,并分配给内部任务
  • 任务调度、监控与容错


ApplicationManager主要负责接收job的提交请求,为应用分配第一个Container来运行ApplicationMaster,还有就是负责监控ApplicationMaster,在遇到失败时重启ApplicationMaster运行的Container


2.2.3NodeManager


  • 单个节点上的资源管理
  • 处理来自ResourceManager的命令
  • 处理来自ApplicationMaster的命令


NodeManager是yarn节点的一个“工作进程”代理,管理hadoop集群中独立的计算节点,主要负责与ResourceManager通信,负责启动和管理应用程序的container的生命周期,监控它们的资源使用情况(cpu和内存),跟踪节点的监控状态,管理日志等。并报告给RM。


NodeManager在启动时,NodeManager向ResourceManager注册,然后发送心跳包来等待ResourceManager的指令,主要目的是管理resourcemanager分配给它的应用程序container。NodeManager只负责管理自身的Container,它并不知道运行在它上面应用的信息。在运行期,通过NodeManager和ResourceManager协同工作,这些信息会不断被更新并保障整个集群发挥出最佳状态


总结


Hadoop1.0主要存在以下不足:


抽象层次低,需要人工编码

表达能力有限

开发者自己管理作业之间的依赖关系

难以看到程序整体逻辑

执行迭代操作效率低

资源浪费

实时性差

Hadoop的优化与发展主要体现在两个方面:


一方面是Hadoop自身两大核心组件MapReduce和HDFS的架构设计改进

另一方面是Hadoop生态系统其它组件的不断丰富,加入了Pig、Tez、Spark和Kafka等新组件

目录
相关文章
|
2月前
|
弹性计算 运维 监控
阿里云云服务诊断工具:合作伙伴架构师的深度洞察与优化建议
作为阿里云的合作伙伴架构师,我深入体验了其云服务诊断工具,该工具通过实时监控与历史趋势分析,自动化检查并提供详细的诊断报告,极大提升了运维效率和系统稳定性,特别在处理ECS实例资源不可用等问题时表现突出。此外,它支持预防性维护,帮助识别潜在问题,减少业务中断。尽管如此,仍建议增强诊断效能、扩大云产品覆盖范围、提供自定义诊断选项、加强教育与培训资源、集成第三方工具,以进一步提升用户体验。
740 243
|
2月前
|
机器学习/深度学习 算法 数据可视化
基于深度混合架构的智能量化交易系统研究: 融合SSDA与LSTM自编码器的特征提取与决策优化方法
本文探讨了在量化交易中结合时序特征和静态特征的混合建模方法。通过整合堆叠稀疏降噪自编码器(SSDA)和基于LSTM的自编码器(LSTM-AE),构建了一个能够全面捕捉市场动态特性的交易系统。SSDA通过降噪技术提取股票数据的鲁棒表示,LSTM-AE则专注于捕捉市场的时序依赖关系。系统采用A2C算法进行强化学习,通过多维度的奖励计算机制,实现了在可接受的风险水平下最大化收益的目标。实验结果显示,该系统在不同波动特征的股票上表现出差异化的适应能力,特别是在存在明确市场趋势的情况下,决策准确性较高。
85 5
基于深度混合架构的智能量化交易系统研究: 融合SSDA与LSTM自编码器的特征提取与决策优化方法
|
1月前
|
消息中间件 监控 小程序
电竞陪玩系统架构优化设计,陪玩app如何提升系统稳定性,陪玩小程序平台的测试与监控
电竞陪玩系统架构涵盖前端(React/Vue)、后端(Spring Boot/php)、数据库(MySQL/MongoDB)、实时通信(WebSocket)及其他组件(Redis、RabbitMQ、Nginx)。通过模块化设计、微服务架构和云计算技术优化,提升系统性能与可靠性。同时,加强全面测试、实时监控及故障管理,确保系统稳定运行。
|
1月前
|
存储 弹性计算 架构师
老板点赞!技术人如何用架构优化打赢降本增效战?
大家好,我是小米,一个喜欢分享技术的小架构师。通过亲身经历,我将介绍如何通过架构优化帮助公司降本增效。两年前,我加入一家初创公司,面对成本高企的问题,通过弹性伸缩、微服务化和数据治理等手段,成功降低了40%的技术成本,提升了60%的系统响应速度。希望我的经验能给你启发!关注我的微信公众号“软件求生”,获取更多技术干货。
48 5
|
2月前
|
存储 机器学习/深度学习 人工智能
【AI系统】计算图优化架构
本文介绍了推理引擎转换中的图优化模块,涵盖算子融合、布局转换、算子替换及内存优化等技术,旨在提升模型推理效率。计算图优化技术通过减少计算冗余、提高计算效率和减少内存占用,显著改善模型在资源受限设备上的运行表现。文中详细探讨了离线优化模块面临的挑战及解决方案,包括结构冗余、精度冗余、算法冗余和读写冗余的处理方法。此外,文章还介绍了ONNX Runtime的图优化机制及其在实际应用中的实现,展示了如何通过图优化提高模型推理性能的具体示例。
76 4
【AI系统】计算图优化架构
|
2月前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
170 3
|
3月前
|
监控 Serverless 云计算
探索Serverless架构:开发实践与优化策略
本文深入探讨了Serverless架构的核心概念、开发实践及优化策略。Serverless让开发者无需管理服务器即可运行代码,具有成本效益、高可扩展性和提升开发效率等优势。文章还详细介绍了函数设计、安全性、监控及性能和成本优化的最佳实践。
|
3月前
|
弹性计算 运维 开发者
后端架构优化:微服务与容器化的协同进化
在现代软件开发中,后端架构的优化是提高系统性能和可维护性的关键。本文探讨了微服务架构与容器化技术如何相辅相成,共同推动后端系统的高效运行。通过分析两者的优势和挑战,我们提出了一系列最佳实践策略,旨在帮助开发者构建更加灵活、可扩展的后端服务。
|
3月前
|
消息中间件 运维 Cloud Native
云原生架构下的微服务优化策略####
本文深入探讨了云原生环境下微服务架构的优化路径,针对服务拆分、通信效率、资源管理及自动化运维等核心环节提出了具体的优化策略。通过案例分析与最佳实践分享,旨在为开发者提供一套系统性的解决方案,以应对日益复杂的业务需求和快速变化的技术挑战,助力企业在云端实现更高效、更稳定的服务部署与运营。 ####
|
3月前
|
存储 负载均衡 监控
如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
在数字化时代,构建高可靠性服务架构至关重要。本文探讨了如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
81 1