Python+大数据学习笔记|Hadoop理论篇01

本文介绍了ApacheHadoop,一个开源的分布式处理框架,重点讲述了其起源、版本发展、核心模块(HDFS、MapReduce和YARN)、分布式与集群概念、以及Hadoop的基本架构,包括HDFS的文件存储、MapReduce的计算模型和YARN的资源管理。
摘要由CSDN通过智能技术生成

注:笔记中大量文字内容来源于Hadoop官方文档,内容大多为机翻。文中配图均为本人学习过程中参考老师教学阶段配图以及部分官网描述绘制,可能存在自身理解不到位与错漏之处。


Hadoop简介

Hadoop概述:

Apache Hadoop软件库是一个用Java语言实现的开源软件框架,它允许使用简单的编程模型在计算机集群之间分布式处理大型数据集,是一个存储和计算大规模数据的软件平台。

        由于Hadoop是使用JAVA语言编写的开源软件框架,所以在Linux上运行Hadoop需要下载JAVA。


 Hadoop的诞生:

        Hadoop起源于Apache Nutch项目。

        2004年左右,Doug Cutting受Google的论文启发,尝试实现了MapReduce计算框架,并于2006年将其分离出来,成为一套完整而独立的软件,该软件被命名为Hadoop。

谷歌的三篇相关论文:

《The Google file system》:谷歌分布式文件系统GFS
《MapReduce: Simplified Data Processing on Large Clusters》:谷歌分布式计算框架MapReduce
《Bigtable: A Distributed Storage System for Structured Data》:谷歌结构化数据存储系统

        广义上的Hadoop指的是Hadoop的生态圈,狭义上的Hadoop指的是Apache的开源框架,其核心为:HDFS、MapReduce和YARN。


Hadoop的版本:

Hadoop发行版本分为商业版和开源社区版:

               商业版: 指由第三方商业公司在社区版Hadoop基础上进行了一些修改、整合以及各个服务组件兼容性测试而发行的版本,如: cloudera的CDH等。

                开源社区版:指由Apache软件基金会维护的版本,是官方维护的版本体系,版本丰富,兼容性稍差。

Hadoop目前更新的版本有:

        1.x版本系列: hadoop的第二代开源版本,该版本基本已被淘汰        

                该版本的hadoop主要由HDFS和MapReduce组成。

                HDFS负责数据的存储,MapReduce负责计算和资源调度。

        2.x版本系列: 架构产生重大变化,引入了Yarn平台等许多新特性      

                该版本hadoop主要由HDFS(存储)和MapReduce(计算)和YARN(资源调度)三部分组成。

        3.x版本系列: 因为2版本的jdk1.7不更新,基于jdk1.8升级产生3版本  

                该版本hadoop主要由HDFS(存储)和MapReduce(计算)和YARN(资源调度)三部分组成。


分布式与集群

        分布式是多台服务器执行不同任务,最后把结果整合到一起,类似于工厂流水线,这样可以很大程度提升效率。

        大数据中分布式调度主要有:

                1.去中心化模式:各台服务器间遵循特定规范运行

                2.中心化模式:主从模式(Master And Slaves),由一个中心节点来统筹其他服务器。

        集群指一组独立的计算机系统构成的一多处理器系统,它们之间通过网络实现进程间的通信,让若干台计算机联合起来工作(服务),可以是并行的,也可以是做备份。如果客户端请求量(任务量)多,多个服务器同时处理不同请求(不同任务),如果请求量少,一台服务器干活,其他服务器做备份。


Hadoop的基本架构

        Hadoop有三个主要模块,分别是:HDFS、MapReduce和YARN。

HDFS: 分布式文件存储系统,可以在大型集群中跨机器存储大文件【海量数据的存储】。

MapReduce:在商用硬件的大型集群(数千个节点)上并行处理大量数据(多 TB 数据集)【海量数据的运算】。

YARN:资源调度器,调度程序负责将资源分配给受熟悉的容量、队列等约束的各种正在运行的应用程序。

        MapReduce计算需要的数据和产生的结果需要HDFS来进行存储,MapReduce的运行需要由Yarn集群来提供资源调度

HDFS:

NameNode:

        主节点,一个管理文件系统命名空间并管理客户端对文件访问的主服务器。执行文件系统命名空间操作,如打开、关闭和重命名文件和目录,确定块到DataNodes的映射。对文件系统名称空间或其属性的任何更改都由NameNode记录。

DataNodes:

        从节点,管理连接到运行节点的存储。负责提供来自文件系统客户端的读写请求。据NameNode的指令执行块创建、删除和复制。

SecondaryNameNode:

        通常运行在与主 NameNode 不同的机器上,因为它的内存需求与主 NameNode 的顺序相同。

        客户端(Client)会把数据切分为一个个的块(Block),主节点(NameNode)会向从节点(DataNode)发送指令,让DataNode执行块的增删改。用户的数据不会存储到NameNode中,NameNode主要用来存放元数据(Metadata),而数据会以block的形式存放在Datanode中。

HDFS写入数据的大致流程图

HDFS读取数据的大致流程图
HDFS中的Block(数据块):

        HDFS将每个文件都作为块序列进行存储,除了最后一个块,其余块大小一致,默认为128M,在append和hsync添加了对可变长度块的支持后,用户可以启动一个新块,无需将最后一个区块填充到配置的块大小。

        为了容错,HDFS会进行block的复制,所以block都有副本,默认副本数量为3个。当NameNode处于Safemode状态时,不会发生块的复制。

        文件的数据块大小和副本数量都可以进行配置。

客户端把复制因子(副本数量)为3的文件写入HDFS时的简单过程

该图参考Hadoop官网描述绘制,如有错误请指出,谢谢
HDFS的特点: 

        1.HDFS支持一次写入,多次读取,除了追加和截断外,无需修改。其支持把文件附加到文件末尾,但是不能在任意点进行更新。

        2.由于HDFS组件数量大,其发生故障的概率也很大,所以HDFS可以对硬件进行故障检测并快速自动恢复。

        3.HDFS支持大文件,典型文件大小从GB到TB,时效性较差。

        4.HDFS具有容错性和扩展性。

        5.HDFS可以在廉价的机器上运行

        6.支持类似Shell的命令直接与HDFS交互

        

        HDFS中的NameNode使用EditLog事务日志来记录元数据的每次更改(元数据是用于描述业务数据的数据)。整个文件系统命名空间,包括块到文件和文件系统属性的映射,都存储在名为 FsImage 的文件中。

        NameNode 在内存中保存整个文件系统名称空间和文件块映射的映像。当NameNode启动时,或者检查点被可配置的阈值触发时,它从磁盘读取FsImage和EditLog,将EditLog中的所有事务应用到FsImage的内存中表示,并将这个新版本刷新到磁盘上的新 FsImage。然后它可以截断旧的 EditLog,因为它的事务已应用于 FsImage。这个过程称为检查点。

        检查点的目的是通过拍摄文件系统元数据快照并将其保存到 FsImage 来确保 HDFS 具有文件系统元数据的一致视图。

        检查点可以在给定的时间间隔(dfs.namenode.checkpoint.period) 以秒表示(默认是1个小时),或者在累积给定数量的文件系统事务之后 ( dfs.namenode.checkpoint.txns)(默认为100w次事务数)。如果设置了这两个属性,则达到的第一个阈值将触发检查点。

元数据存储的大致流程

MapReduce:

        MapReduce作业通常将输入数据集拆分为独立的块,这些块由映射任务以完全并行的方式处理。该框架对映射的输出进行排序,然后将其输入到reduce任务中。通常,作业的输入和输出都存储在文件系统中。该框架负责调度任务、监视任务并重新执行失败的任务。通常,计算节点和存储节点是相同的,即MapReduce框架和Hadoop分布式文件系统在同一组节点上运行。

        MapReduce框架只对<key,value>对进行操作,也就是说,该框架将作业的输入视为一组<key,value>对,并生成一组<key,value>配对作为作业的输出。

MapReduce 作业的输入和输出类型:

(输入)<k1, v1> -> map -> <k2, v2> -> 组合 -> <k2, v2> -> reduce -> <k3, v3>(输出)

MapReduce的大致流程图

YARN:

该框架的职责包括执行配置解析和安装、生命周期管理(例如停止/启动/删除服务)、向上/向下调整服务组件、在 YARN 上滚动升级服务、监控服务的运行状况和准备情况等。

组成:

        ResourceManager:

                有两个主要组件Scheduler 和ApplicationsManager。

                Scheduler:

                        根据应用程序的资源需求执行其调度功能;它是基于资源容器的抽象概念来实现的,资源容器包含内存、CPU、磁盘、网络等元素。

                ApplicationsManager :

                        负责接受作业提交、协商第一个容器来执行应用程序特定的 ApplicationMaster 并提供在失败时重新启动 ApplicationMaster 容器的服务。每个应用程序的 ApplicationMaster 负责与 Scheduler 协商适当的资源容器,跟踪其状态并监控进度。

        NodeManager:

                是每台机器的框架代理,负责容器、监视其资源使用情况(CPU、内存、磁盘、网络)并将其报告给 ResourceManager/Scheduler。

                

                

YARN的大致流程图

  • 14
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值