当前位置: 首页 > Web前端 > CSS

什么是Hadoop?你真的懂吗

时间:2023-03-30 17:33:54 CSS

2011年,我们每天都零星地在百度上搜索几个Hadoop相关的问题。2015年我们去百度搜索Hadoop的问题超过800万,现在已经突破1亿。Hadoop已经成为大数据的必备。基础设施已准备就绪。Hadoop是公认的一套行业大数据标准开源软件,在分布式环境下提供海量数据处理能力。几乎所有的主流厂商都围绕着Hadoop开发工具、开源软件、商业工具和技术服务展开。近年来,EMC、微软、英特尔、Teradata、思科等大型IT企业都大幅增加了对Hadoop的投入。那么Hadoop到底是什么?它有什么作用?它的基础设施是什么样的?今天,我们就来简单梳理一下Hadoop的这些基本概念。1.Hadoop是什么?Hadoop是由Apache基金会开发的分布式系统基础设施,是存储系统+计算框架的软件框架。主要解决海量数据的存储和计算问题,是大数据技术的基石。Hadoop以可靠、高效和可扩展的方式处理数据。用户可以在不知道分发的底层细节的情况下开发分布式程序。用户可以在Hadoop上轻松开发和运行处理海量数据的应用程序。.2、Hadoop可以解决什么问题?1、海量数据存储HDFS具有高容错的特点,被设计为部署在低成本(low-cost)的硬件上;并且它提供高吞吐量(Highthroughput)访问数据,适合有大数据集的应用,它由n台运行DataNode的机器和1台运行NameNode进程的机器(另一台standby)组成。每个DataNode管理一部分数据,NameNode负责管理整个HDFS集群的信息(存储元数据)。2、资源管理、调度和分配ApacheHadoopYARN(YetAnotherResourceNegotiator,另一个资源协调器)是一种新的Hadoop资源管理器,它是一个通用的资源管理系统和调度平台,可以提供统一的资源管理和调度,其介绍为集群在利用率、资源统一管理、数据共享等方面带来了巨大的好处。3、什么是Hadoop组件架构?看完了Hadoop的基本介绍。下面来了解一下HDFS和YARN的核心架构和原理。我们先看HDFS框架图:看完上图,我们思考几个问题:1、什么是元数据信息,NameNode是如何维护元数据的,元数据如何保证信息的一致性?NameNode维护着HDFS集群的元数据信息,包括文件的目录树、每个文件对应的数据块列表、权限设置、副本数等。元数据信息保存在内存中,那么NameNode异常宕机怎么办?NameNode对元数据的修改包括内存数据修改两部分。修改内存后,写一个EditLog,再看FsImage和EditLog这两个概念:FsImage:FsImage是NameNode内存中元数据的镜像文件,是元数据的永久检查点。包含所有HDFS目录和文件idnode的序列化信息,可以类比银行账户余额,只有简单的信息。EditLog:EditLog用于连接内存元数据和FsImage之间的操作日志。它保存了自上次检查点以来对HDFS文件系统的所有操作,如添加文件、重命名文件、删除目录等,可以类比银行账户流水,包括每条记录,如果随着时间的推移积累,流水信息可以非常大。所以如果Editlog变得非常大,crash后需要读取Editlog来恢复元数据,这是一个很慢的过程。这个时候就到了StandbyNameNode节点的播放时间了。Standby节点从JournalNode集合中拉取Editlog,并定期将Editlog合并到一个FsImage中。FsImage是合并后的股票数据信息。同时将FsImage上传到ActiveNode节点。2、如何在NameNode主备之间切换,始终保持一个ActiveNode?我们在上面的HDFS框架图中可以看到连接ZK集群和NameNode的组件ZKFC1,ZKFC监控NameNode2的监控状态,ZKFC利用ZK提供的主节点选举切换3,通知并修改NameNode4的状态,确认元数据同步完成后,对外提供服务再看YARN框架图:上图描述了YARN提交任务和资源分配的过程。整个过程涉及以下组件:ResourceManeger:负责所有资源的监控、分配和分配。管理和处理客户端请求,启动和监控AppMaster,NodeManagerNodeManager:单节点上的资源管理和任务管理,处理ResourceManager,AppMaster命令AppMaster:负责具体应用的调度和协调,为应用申请资源,并监控taskContainer:YARN中动态资源分配的概念,具有一定的内存和核数。一次任务提交的整体流程:(1)Client向YARN提交应用,包括ApplicationMaster程序、命令、用户程序、资源等。(2)ResourceManager为应用分配第一个Container,并与对应的NodeManager通信,询问它启动此容器中应用程序的ApplicationMaster。(3)ApplicationMaster先向ResourceManager注册,用户可以直接通过ResourceManager查看应用的运行状态,然后会为每个任务申请资源,监控其运行状态(4)ApplicationMaster采用轮询的方式发送给ResourceManager申请和接收资源。(5)ApplicationMaster申请资源后,与对应的NodeManager通信,要求其启动任务。(6)NodeManager为任务设置好运行环境(包括环境变量、Jar包、二进制程序等)后,将任务启动命令写入脚本,通过运行脚本启动任务。(7)每个任务通过RPC协议向ApplicationMaster报告自己的状态和进度,以便ApplicationMaster随时了解每个任务的运行状态,以便在任务失败时重新启动任务。在应用程序运行过程中,用户可以随时通过RPC向ApplicationMaster查询应用程序当前的运行状态。(8)应用程序运行完毕后,ApplicationMaster注销ResourceManager并关闭自身。通过以上内容,您可以对Hadoop的一些基本框架有一些简单的印象。后面在使用的时候,可以将上面的结构图与Hadoop官网或者社区进行对比,深入了解。