hadoop(---mr---yarn)---知识点总结

本文介绍了大数据时代的特征,重点阐述了Hadoop的起源、发展、特点以及核心组件HDFS和MapReduce的工作原理。HDFS是分布式文件系统,通过块机制实现高容错性和高效性,而MapReduce则是一种分布式并行编程模型,用于处理大规模数据集。文章深入探讨了HDFS的读写流程和MapReduce的Map、Reduce函数及其执行流程,揭示了分布式计算的精髓。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

一、定义

1.大数据时代

        1)、三次信息化浪潮时间点以及形式  

        2)、人类社会数据产生方式经历阶段

        3)、大数据的特点

        4)、大数据的精髓

 2.hadoop简介

        1)、hadoop是什么,能干什么

        2)、hadoop的发展史

        3)、Hadoop的特点

        4)、Hadoop的核心技术、

        5)、hadoop安装

二、hadoop组件详细

    1、hdfs

        1)、什么是hdfs 

        2)、hdfs设计思想

        3)、块机制

        4)、hdfs体系结构

        5)、体系解析

        6)、检查点机制

        7)、读写流程

三、MapReduce

 1、MapReduce模型简介

        1)、分布式并行编程

        2)、MapReduce模型

        2)、Map和Reduce函数

  2、MapReduce体系结构

         2)、体系结构

        3)、工作流程

   2、shuffle 

        1)、Map端的shuffle过程

       2)、Reduce端的shuffle过程 

    3、shuffle map端源码


一、定义

1.大数据时代

        1)、三次信息化浪潮时间点以及形式  

          第一次:数字化  1980年左右,个人计算机诞生,社会生产力提高。

          第二次:网络化   1995年左右,互联网流行,门户网站诞生,信息量急剧增加。

           第三次:智能化    2010之后,物联网,云计算,大数据的产生,数据爆发

           数字化奠定基础,实现数据资源的获取和积累;网络化构造平台,促进数据资源的流通和汇聚;智能化展现能力,通过多源数据的融合分析呈现信息应用的类人智能,帮助人类更好认知事物和解决问题。

        2)、人类社会数据产生方式经历阶段

              阶段一:运营试系统阶段 数据被动存储在数据库中

              阶段二:用户原创内容阶段 web2.0 主动存储 

              阶段三:感知系统阶段 感知系统广应用

              截止到2012年,数据量已经从TB(1024GB=1TB)级别跃升到PB(1024TB=1PB)、EB(1024PB=1EB)乃至ZB(1024EB=1ZB)级别。国际数据公司(IDC)的研究结果表明,2008年全球产生的数据量为0.49ZB,2009年的数据量为0.8ZB,2010年增长为1.2ZB,2011年的数量更是高达1.82ZB,相当于全球每人产生200GB以上的数据。而到2012年为止,人类生产的所有印刷材料的数据量是200PB,全人类历史上说过的所有话的数据量大约是5EB。IBM的研究称,整个人类文明所获得的全部数据中,有90%是过去两年内产生的。而到了2020年,全世界所产生的数据规模将达到今天的44倍。

        3)、大数据的特点

           1:数据量大:产生的数据多,数据集大

           2:数据种类多:结构化数据,半结构化数据,非结构化数据

           3:处理速度快:产生数据速度快,要快速处理数据,防止数据失去实时性

           4:价值密度低:数据中只有极少数据有实际意义

        4)、大数据的精髓

      全样而非抽样,效率而非精确,相关而非因果

       大数据带给我们的三个颠覆性观念转变:是全部数据,而不是随机采样;是大体方向,而不是精确制导;是相关关系,而不是因果关系。

        ·1:.不是随机样本,而是全体数据:在大数据时代,我们可以分析更多的数据,有时候甚至可以处理和某个特别现象相关的所有数据,而不再依赖于随机采样(随机采样,以前我们通常把这看成是理所应当的限制,但高性能的数字技术让我们意识到,这其实是一种人为限制);

        2:不是精确性,而是混杂性:研究数据如此之多,以至于我们不再热衷于追求精确度;之前需要分析的数据很少,所以我们必须尽可能精确地量化我们的记录,随着规模的扩大,对精确度的痴迷将减弱;拥有了大数据,我们不再需要对一个现象刨根问底,只要掌握了大体的发展方向即可,适当忽略微观层面上的精确度,会让我们在宏观层面拥有更好的洞察力;

        3:不是因果关系,而是相关关系:我们不再热衷于找因果关系,寻找因果关系是人类长久以来的习惯,在大数据时代,我们无须再紧盯事物之间的因果关系,而应该寻找事物之间的相关关系;相关关系也许不能准确地告诉我们某件事情为何会发生,但是它会提醒我们这件事情正在发生。

 2.hadoop简介

        1)、hadoop是什么,能干什么

 Apache Hadoop是一个由Apache基金会所开发的分布式系统基础架构。

 Apache Hadoop项目为可靠的、可伸缩的分布式计算开发开源软件,用java语言编写的,可以在任何一个有JVM的机器上运行。

Hadoop实现了一个分布式文件系统,简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的硬件上;而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了POSIX的要求,可以以流的形式访问文件系统中的数据它很擅长存储大量的半结构化的数据集。数据可以随机存放,所以一个磁盘的失败并不会带来数据丢失。Hadoop也非常擅长分布式计算——快速地跨多台机器处理大型数据集合。

        2)、hadoop的发展史

    Hadoop由 Apache Software Foundation 公司于 2005 年秋天作为Lucene的子项目Nutch的一部分正式引入。它受到最先由 Google Lab 开发的 Map/Reduce 和 Google File System(GFS) 的启发。

HDFS的起源来自于2003年谷歌的一篇论文:关于分布式文件系统GFS

MapReduce起源于2004年谷歌的另外一篇论文:Mapreduce系统

2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中。

2008年Hadoop项目成为了apache旗下的顶级项目之一。

        3)、Hadoop的特点

     1:高可靠性:处理数据的能力比较稳定

     2:高效性:处理数据的速度快,针对于TB级别以上的数据集

     3:高可扩展性:集群节点可以扩展到千以上的数量

     4:高容错性:以多副本的形式存储数据,可以为失败的任务重启另外的节点

     5:成本低:可以运行在廉价的硬件上

注:

Hadoop是一个能够对大量数据进行分布式处理软件框架。 Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理。

Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理

Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。

Hadoop 还是可伸缩的,能够处理 PB 级数据。

此外,Hadoop 依赖于社区服务,因此它的成本比较低,任何人都可以使用。

Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点:

        4)、Hadoop的核心技术、

   提供了两个核心技术:

   HDFS:hadoop分布式文件系统

   MapReduce:并行计算框架

   除了两个核心模块还有其他几个模块:

   Hadoop Common:最基本的模块 原名(core)

   Hadoop YARN:资源调度和管理系统

   Hadoop Ozone:对象存储技术

   Hadoop Submarine: Hadoop机器学习引擎

   Hadoop2.x版本 四个模块:common、HDFS、MapReduce、Yarn

   Hadoop3.x版本 以上六个模块都有

注:

hadoop1.x 与hadoop2.x 架构变化分析

Hadoop2相比较于Hadoop1.x来说,HDFS的架构与MapReduce的都有较大的变化,且速度上和可用性上都有了很大的提高,Hadoop2中有两个重要的变更:

(1)HDFS的NameNode可以以集群的方式布署,增强了NameNodes的水平扩展能力和高可用性,分别是:HDFSFederation与HA;

(2)MapReduce将JobTracker中的资源管理及任务生命周期管理(包括定时触发及监控),拆分成两个独立的组件,并更名为YARN(Yet Another Resource Negotiator);

        5)、hadoop安装

请参照https://blog.youkuaiyun.com/Michael__One/article/details/86226193

二、hadoop组件详细

    1、hdfs

        1)、什么是hdfs 

1.简单介绍

     HDFS(Hadoop  Distributed  FileSystem),是Hadoop项目的两大核心之一,源自于Google于2003年10月发表的GFS论文,是对GFS的开源实现。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。

     HDFS在设计之初,就是要运行在通用硬件(commodity hardware)上,即廉价的大型服务器集群上,因此,在设计上就把硬件故障作为一种常态来考虑,可以保证在部分硬件发生故障的情况下,仍然能够保证文件系统的整体可用性和可靠性。
2.特点

     HDFS是一个高度容错性的系统,适合部署在廉价机器上的分布式文件系统

     HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用

     HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。

     HDFS也是一个易于扩展的分布式文件系统

3.优缺点

     优点:

             高容错性:数据存放多个副本,如有副本丢失,会自动复制回复

             适合批处理:移动计算而不是移动数据,减少流量消耗,但是数据位置要暴露给计算框架

             适合大数据处理:Pb级数据 百万规模以上的数据量,数千节点

             流式文件访问:一次写入,多次读取,保证数据一致性

             可构建在廉价机器上:通过副本策略,提高了容错

    缺点:

             不适合低延迟数据访问:HDFS的设计目标有一点是:处理大型数据集,高吞吐率。这势必要以高延迟为代价的。因此HDFS不适合处理一些用户要求时间比较短的低延迟应用请求。

              不适合小文件存取:一是因此存取大量小文件需要消耗大量的寻地时间(比如拷贝大量小文件与拷贝同等大小的一个大文件) 。二是因为namenode把元信息存储在内存中,一个节点的内存是有限的。一个block元信息的内存消耗大约是150 byte。而存储1亿个block和1亿个小文件都会消耗掉namenode 20GB内存,哪个适合?当然是1亿个block(大文件)更省内存。

              不适合并发写入、文件随机修改:HDFS上的文件只能有一个写者,也仅仅支持append操作,不支持多用户对同一文件的写操作,以及在文件任意位置进行修改。
 

        2)、hdfs设计思想

     现在想象一下这种情况:有四个文件 0.5TB的file1,1.2TB的file2,50GB的file3,100GB的file4;有7个服务器,每个服务器上有10个1TB的硬盘。

     在存储方式上,我们可以将这四个文件存储在同一个服务器上(当然大于1TB的文件需要切分),我们需要使用一个文件来记录这种存储的映射关系吧。用户是可以通过这种映射关系来找到节点硬盘相应的文件的。那么缺点也就暴露了出来:

     第一、负载不均衡。因为文件大小不一致,势必会导致有的节点磁盘的利用率高,有的节点磁盘利用率低。

     第二、网络瓶颈问题。一个过大的文件存储在一个节点磁盘上,当有并行处理时,每个线程都需要从这个节点磁盘上读取这个文件的内容,那么就会出现网络瓶颈,不利于分布式的数据处理。

     我们来看看HDFS的设计思想:以下图为例,来进行解释。

     HDFS将50G的文件file3切成多个Block(存储块),每一个Block的大小都是固定的,比如128MB它把这多个数据块以多副本的行式存储在各个节点上 ,再使用一个文件把哪个块存储在哪些节点上的映射关系存储起来。有了这样的映射关系,用户读取文件的时候就会很容易读取到。每个节点上都有这样的Block数据,它会分开网络瓶颈,利于分布式计算,解决了上面的第二个问题。因为每个块的大小是一样的,所以很容易实现负载均衡,解决了上面的第一个问题。

        3)、块机制

      在我们熟知的Windows、Linux等系统上,文件系统会将磁盘空间划分为每512字节一组,我们称之为"磁盘块",它是文件系统读写操作的最小单位。而文件系统的数据块(Block)一般是磁盘块的整数倍,即每次读写的数据量必须是磁盘块的整数倍。 

      HDFS同样引入了块(Block)的概念,块是HDFS系统当中的最小存储单位,在hadoop2.0(2.7.3?)中默认大小为128MB。在HDFS上的文件会被拆分成多个块,每个块作为独立的单元进行存储。多个块存放在不同的DataNode上,整个过程中 HDFS系统会保证一个块存储在一个数据节点上 。但值得注意的是 如果某文件大小或者文件的最后一个块没有到达128M,则不会占据整个块空间 。

     当然块大小可以在配置文件中hdfs-default.xml中进行修改(此值可以修改)

<property>
  <name>dfs.blocksize</name>
  <value>134217728</value>
  <description>默认块大小,以字节为单位。可以使用以下后缀(不区分大小写):k,m,g,t,p,e以重新指定大小(例如128k, 512m, 1g等)</description>
</property>
 
<property>
  <name>dfs.namenode.fs-limits.min-block-size</name>
  <value>1048576</value>
  <description>以字节为单位的最小块大小,由Namenode在创建时强制执行时间。这可以防止意外创建带有小块的文件可以降级的大小(以及许多块)的性能。</description>
</property>
 
<property>
    <name>dfs.namenode.fs-limits.max-blocks-per-file</name>
    <value>1048576</value>
    <description>每个文件的最大块数,由写入时的Namenode执行。这可以防止创建会降低性能的超大文件</description>
</property>

      HDFS中的NameNode会记录文件的各个块都存放在哪个dataNode上,这些信息一般也称为元信息(MetaInfo) 。元信息的存储位置一般由dfs.namenode.name.dir来指定。

<property>
  <name>dfs.namenode.name.dir</name>
  <value>file://${hadoop.tmp.dir}/dfs/name</value>
</property>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值