大数据技术与应用复习资料

一、题型

1、选择题(10题×2分,共20分)

2、简答题(6题×8分,共48分)

3、分析题(2题×11分,共22分)

4、论述题(共10分)

二、考点

1、第一章

(1)三次信息化浪潮(标志及解决问题)
(2)信息科技为大数据时代提供的技术支撑
(3)大数据的定义和特点
(4)大数据的影响(如4个范式,3个转变等)
(5)大数据计算模式
(6)云计算和物联网(概念)
(7)大数据与云计算和物联网的关系
(8)IaaS、PaaS、SaaS(具体内容)

2、第二章

(1)Hadoop的特性
(2)Hadoop生态系统(各个组件的功能)

3、第三章

(1)大数据块的优势
(2)名称节点和数据节点(主要功能)
(3)HDFS体系结构(概述及局限性)
(4)HDFS存储原理(数据存取策略)

4、第四章

(1)HBase简介
(2)HBase与传统关系数据库的对比分析
(3)表和Region
(4)Region的定位(HBase三层结构)
(5)HBase运行机制(Region、Store、HLog)

5、第七章

(1)MapReduce概述
(2)MapReduce体系结构(功能/作用)
(3)MapReduce适用的前提条件
(4)MapReduce工作流程
(5)MapReduce算法思想(分析题)

6、第十章

(1)Spark简介(特点)
(2)Spark(优点)与Hadoop(缺点)的对比
(3)Spark生态系统(各组件及应用场景,表10-1)
(4)Spark运行基本流程
(5)RDD的设计与运行原理(分区概念、依赖关系)

第一章 大数据概论

一、三次信息化浪潮

信息化浪潮发生时间标志解决的问题代表企业
第一次1980年前后PC信息处理Intel、AMD、IBM、苹果、微软、联想、戴尔、惠普等
第二次1995年前后互联网信息传输雅虎、谷歌、阿里巴巴、百度、腾讯等
第三次2010年前后大数据、云计算和物联网信息爆炸亚马逊、谷歌、IBM、VMware、阿里云等

二、信息科技为大数据时代提供的技术支撑

1、存储设备容量不断增加

2、CPU处理能力大幅提升

3、网络带宽不断增加

三、大数据的定义和特点

大数据的4个V,或者说是大数据的4个特点,包含4个层面:

  • 数据量大(Volume)

  • 数据类型繁多(Variety)

  • 处理速度快(Velocity)

  • 价值密度低(Value)

四、大数据的影响

1、对科学研究的影响

  • 第一种范式:实验科学

  • 第二种范式:理论科学

  • 第三种范式:计算科学

  • 第四种范式:数据密集型科学

2、对思维方式的影响

  • 全样而非抽样

  • 效率而非精确

  • 相关而非因果

五、大数据计算模式

大数据计算模式解决问题代表产品
批处理计算针对大规模数据的批量处理MapReduce、Spark等
流计算针对流数据的实时计算Storm、S4、Flume、Streams、Puma、银河流数据处理平台等
图计算针对大规模图结构数据的处理Pregel、GraphX、Giraph、PowerGraph、Hama、GoldenOrb等
查询分析计算大规模数据的存储管理和查询分析Dremel、Hive、Cassandra、Impala等

六、云计算和物联网

云计算实现了通过网络提供可伸缩的、廉价的分布式计算机能力,用户只需要在具备网络接入条件的地方,就可以随时随地获得所需的各种IT资源。

物联网是物物相连的互联网,是互联网的延伸,它利用局部网络或互联网等通信技术把传感器、控制器、机器、人类和物等通过新的方式连在一起,形成人与物、物与物相连,实现信息化和远程管理控制。

七、大数据与云计算和物联网的关系

1、区别

  • 大数据侧重于海量数据的存储、处理与分析,海量数据中发现价值,服务于生产和生活;

  • 云计算本质上皆在整合和优化各种IT资源并通过网络已服务的方法,廉价地提供给用户;

  • 物联网的发展目标是实现呜呜向量,应用创新是物联网的核心

2、联系

从整体来看,大数据、云计算和物联网这三者是相辅相成的:

  • 大数据根植于云计算,大数据分析的很多技术都来自于云计算,云计算的分布式存储和管理系统提供了海量数据的存储和管理能力,没有这些云计算技术作为支撑,大数据分析就无从谈起。

  • 物联网的传感器源源不断的产生大量数据,构成了大数据的重要数据来源,物联网需要借助于云计算和大数据技术,实现物联网大数据的存储、分析和处理。

八、IaaS、PaaS、SaaS

1、基础设施即服务 (IaaS)

包含云 IT 的基本构建块,通常提供对联网功能、计算机(虚拟或专用硬件)以及数据存储空间的访问。基础设施即服务提供最高等级的灵活性和对 IT 资源的管理控制,其机制与现今众多 IT 部门和开发人员所熟悉的现有 IT 资源最为接近。

2、平台即服务 (PaaS):

消除了组织对底层基础设施的管理需要,可以将更多精力放在应用程序的部署和管理上面。有助于提高效率,不用操心资源购置、容量规划、软件维护、补丁安装或与应用程序运行有关的任何无差别的繁重工作。

3、软件即服务 (SaaS)

提供了一种完善的产品,其运行和管理皆由服务提供商负责。一般指的是终端用户应用程序。使用 SaaS 产品时,不用知道服务的维护和底层基础设施的管理,只需要考虑怎样使用 SaaS 软件。

第二章 大数据处理架构Hadoop

一、Hadoop的特性

  • 高可靠性。采用冗余数据存储方式,即使一个副本发生故障,其他副本也可以保证正常对外提供服务。

  • 高效性。作为并行分布式计算平台,Hadoop采用分布式存储和分布式处理两大核心技术,能够高效地处理PB级数据。

  • 高可扩展性。Hadoop的设计目标是可以高效稳定地运行在廉价的计算机集群上,可以扩展到数以千计的计算机节点上。

  • 高容错性。采用沉余数据存储方式,自动保存数据的多个副本,并且能够自动将失败的任务进行重新分配。

  • 成本低。Hadoop采用廉价的计算机集群,成本比较低,普通用户也很容易用自己的PC搭建Hadoop运行环境。

  • 运行在Linux平台上。Hadoop是基于Java语言开发的,可以较好地运行在Linux平台上。

  • 支持多种编程语言。Hadoop上的应用程序也可以使用其他语言编写,如C++。

二、Hadoop生态系统

  • HDFS是Hadoop项目的两个核心之一,是针对谷歌文件系统的开源实现,具有处理超大数据、流式处理、可以运行在廉价商用服务器上等优点。

  • HBase是一个提高可靠性、高性能、可伸缩、实时读写、分布式的列式数据库,一般采用HDFS作为其底层数据存储。

  • MapReduce是针对谷歌MapReduce的开源实现,MapReduce是一种编程模型,用于大规模数据集的并行运算。

  • Hive是一个基于Hadoop的数据仓库工具,可以用于对Hadoop文件中的数据集进行数据整理、特殊查询和分布存储。

  • Pig是一种数据流语言和运行环境,适合于使用Hadoop和MapReducce平台上查询大型半结构化数据集。

  • Mahout是Apache软件基金会旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。

  • Zookepper是针对谷歌Chubby的一个开源实现,是高效和可靠的协同工作系统,提供分布式锁之类的基本服务,用于构建分布式应用,减轻分布式应用程序所承担的协调任务。

  • Flume是Cloudera提供的一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理并写到各种数据接受方的能力。

  • Sqoop可以改进数据的互操作性,主要用来在Hadoop配合关系数据库之间交换数据。

  • Apache Ambari是一种基于Web的工具,支持Apache Hadoop集群的安装、部署、配置和管理。

第三章 分布式文件系统HDFS

一、块

在传统的文件系统中,为了提高磁盘读写效率,一般以数据块为单位,不以字节为单位。HDFS中的块,默认一个块大小为64MB,而HDFS中的文件会被拆分成多个块,每个块作为独立的单元进行存储。HDFS在块的大小的设计上明显要大于普通文件系统。

HDFS采用抽象的块概念可以带来以下几个明显的好处:

  • 支持大规模文件存储。文件以块为单位进行存储,一个大规模文件可以被分拆成若干个文件块,不同的文件块可以被分发到不同的节点上,因此一个文件的大小不会受到单个节点的存储容量的限制,可以远远大于网络中任意节点的存储容量。

  • 简化系统设计。首先,大大简化了存储管理,因为文件块大小是固定的,这样就可以很容易计算出一个节点可以存储多少文件块;其次,方便了元数据的管理,元数据不需要和文件块一起存储,可以由其他系统负责管理元数据。

  • 适合数据备份。每个文件块都可以冗余存储到多个节点上,大大提高了系统的容错性和可用性。

二、名称节点和数据节点(功能)

  • 名称节点负责管理分布式文件系统系统的命名空间,记录分布式文件系统中的每个文件中各个块所在的数据节点的位置信息;

  • 数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或者是名称节点的调度来进行数据的存储和检索,并向名称节点定期发送自己所存储的块的列表。

三、HDFS体系结构

1、简介

HDFS支持流数据读取和处理超大规模文件,并能够运行在由廉价的普通机器组成的集群上。

2、优势

  • 兼容廉价的硬件设备

  • 流数据读写

  • 大数据集

  • 简单的文件模型

  • 强大的跨平台兼容性

3、局限性

  • 命名空间的限制。名称节点是保存在内存中的,因此名称节点能够容纳对象(文件、块)的个数会受到内存空间大小的限制。

  • 性能的瓶颈。整个分布式文件系统的吞吐量受限于单个名称节点的吞吐量。

  • 隔离问题。由于集群中只有一个名称节点,只有一个命名空间,因此无法对不同应用程序进行隔离。

  • 集群的可用性。一旦这个唯一的名称节点发生故障,会导致整个集群变得不可用。

四、HDFS存储原理

1、数据冗余存储

作为一个分布式文件系统,为了保证系统的容错性和可用性,HDFS采用了多副本方式对数据进行冗余存储,通常一个数据块的多个副本会被分布到不同的数据节点上。

  • 加快数据传输速度。当多个客户端需要同时访问同一个文件时,可以让各个客户端分别从不同的数据块副本中读取数据,这就大大加快了数据传输速度

  • 容易检查数据错误。HDFS的数据节点之间通过网络传输数据,采用多个副本可以很容易判断数据传输是否出错

  • 保证数据的可靠性。即使某个数据节点出现故障失效,也不会造成数据丢失

2、数据存储策略

(1)数据存放
  • 如果是在集群内发起写操作请求,则把第一个副本放置在发起写操作请求的数据节点上,实现就近写入数据。如果是来自集群外部的写操作请求,则从集群内部挑选一台磁盘不太满、CPU不太忙的数据节点,作为第一个副本的存放地

  • 第二个副本会被放置在与第一个副本不同的机架的数据节点上

  • 第三个副本会被放置在与第一个副本相同的机架的其他节点上

  • 如果还有更多的副本,则继续从集群中随机选择数据节点进行存放

(2)数据读取
  • 当客户端读取数据时,从名称节点获得数据块不同副本的存放位置列表,列表中包含了副本所在的数据节点

  • 调用API来确定客户端和这些数据节点所属的机架

  • 当发现某个数据块副本对应的机架D和客户端对应的机架D相同时,就优先选择该副本读取数据

  • 如果没有发现,就随机选择一个副本读取数据

(3)数据复制

HDFS的数据复制采用了流水线复制的策略,大大提高了数据复制过程的效率。

当客户端要往HDFS中写入一个文件时,首先被写入本地,并被切分成若干个块,每个块的大小由HDFS的设定值决定。

每个块都向HDFS集群中的名称节点发起写请求名称节点会根据系统中各个数据节点的使用情况,选择一个数据节点列表返回给客户端,然后客户端就把数据首先写入列表中的第一个数据节点,同时把列表传给第一个数据节点,当第一个数据节点接收到4KB数据时,写入本地,并且向列表中的第二个数据节点发起连接请求,把自己已经接收到的4KB数据和列表传给第二个数据节点,当第二个数据节点接收到4KB数据时,写入本地,并且向列表中的第三个数据节点发起连接请求,依次类推,列表中的多个数据节点形成一条数据复制的流水线。最后,当文件写完的时候,数据复制也同时完成。

3、数据错误与恢复(了解)

(1)名称节点出错

名称节点保存了所有的元数据信息,其中最核心的两大数据结构是FsImage和EditLog,如果这两个文件发生损坏,那么整个HDFS实例将失效。Hadoop采用两种机制来确保名称节点的安全:

  • 第一,把名称节点上的元数据信息同步存储到其他文件系统(比如远程挂载的网络文件系统NFS)中;

  • 第二,运行一个第二名称节点,当名称节点宕机以后,可以把第二名称节点作为一种弥补措施,利用第二名称节点中的元数据信息进行系统恢复。

但从前面对第二名称节点的介绍中可以看出,这样做仍然会丢失部分数据。因此,一般会把上述两种方式结合使用,当名称节点发生宕机时,首先到远程挂载的网络文件系统中获取备份的元数据信息,放到第二名称节点上进行恢复,并把第二名称节点作为名称节点来使用。

(2)数据节点出错

每个数据节点会定期向名称节点发送“心跳”信息,向名称节点报告自己的状态。当数据节点发生故障,或者网络发生断网时,名称节点就无法收到来自一些数据节点的“心跳”信息,这时这些数据节点就会被标记为“宕机”,节点上面的所有数据都会被标记为“不可读”,名称节点不会再给它们发送任何I/O请求。这时,有可能出现一种情形,即由于一些数据节点的不可用,会导致一些数据块的副本数量小于冗余因子。名称节点会定期检查这种情况,一旦发现某个数据块的副本数量小于冗余因子,就会启动数据冗余复制,为它生成新的副本。HDFS与其他分布式文件系统的最大区别就是可以调整冗余数据的位置。

(3)数据出错

网络传输和磁盘错误等因素都会造成数据错误。客户端在读取到数据后,会采用MD5和SHA-1对数据块进行校验,以确定读取到正确的数据。在文件被创建时,客户端就会对每一个文件块进行信息摘录,并把这些信息写入同一个路径的隐藏文件里面。当客户端读取文件的时候,会先读取该信息文件,然后利用该信息文件对每个读取的数据块进行校验,如果校验出错,客户端就会请求到另外一个数据节点读取该文件块,并且向名称节点报告这个文件块有错误,名称节点会定期检查并且重新复制这个块。

第四章 分布式数据库HBase

一、HBase简介

HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌BigTable的开源实现,主要用来存储非结构化和半结构化的松散数据。HBase的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列元素组成的数据表。

HBase实际上是一个稀疏、多维、持久化存储的映射表,采用行键、列族、列限定符、时间戳进行索引,每个值都是未经解释的字符串(字符数组)。

二、HBase与传统关系数据库的对比分析

  • 数据类型

    • 关系数据库采用关系模型,具有丰富的数据类型和存储方式

    • HBase则采用了更加简单的数据模型,它把数据存储为未经解释的字符串

  • 数据操作

    • 关系数据库中包含了丰富的操作,其中会涉及复杂的多表连接,通常是借助于多个表之间的主外键关联来实现的

    • HBase操作则不存在复杂的表与表之间的关系,只有简单的插入、查询、删除、清空等

  • 存储模式

    • 关系数据库是基于行模式存储的,元组或行会被连续地存储在磁盘页中

    • HBase是基于列存储的,每个列族都由几个文件保存,不同列族的文件是分离的

  • 数据索引

    • 关系数据库通常可以针对不同列构建复杂的多个索引,以提高数据访问性能

    • HBase只有一个索引行键,HBase中的所有访问方法,或者通过行键访问,或者通过行键扫描,从而使得整个系统不会慢下来

  • 数据维护

    • 在关系数据库中,更新操作会用最新的当前值去替换记录中原来的旧值,旧值被覆盖后就不会存在

    • HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留

  • 可伸缩性

    • 关系数据库很难实现横向扩展,纵向扩展的空间也比较有限

    • HBase等分布式数据库能够轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩

  • 相对于关系数据库来说,HBase也有自身的局限性,如HBase不支持事务,因此无法实现跨行的原子性。

三、HBase的实现原理

1、功能组件

  • 库函数,链接到每个客户端

  • 一个Master主服务器,主要负责表和Region的管理

  • 许多个Region服务器,HBase最核心的模块,复制维护分配给自己的Region,并响应用户的读写请求

2、表和Region

在一个HBase中存储了许多表,表内包含的行数可能非常大,无法存储在一台机器上,因此需要分区。

一个HBase表会被划分成多个Region(根据行键的值),Region包含位于某个值域区间内的所有数据,是负载均衡和数据分发的基本单位,它们会被分发到不同的Region服务器上。

初始时,每个表只包含一个Region,随着数据的不断插入,Region会持续增大,当一个Region中包含的行数量达到一个阈值时,就会被自动等分成两个新的Region。随着表中行的数量继续增加,就会分裂出越来越多的Region。

3、Region的定位

通过构建的映射表(.META.表),映射表的每个条目(或每行)包含两项内容,一个是Region标识符,另一个是Region服务器标识,这个条目就表示Region和Region服务器之间的对应关系,从而就可以知道某个Region被保存在哪个Region服务器中。

4、HBase的三层结构

层次名称作用
第一层Zookeeper文件记录了-ROOT-表的位置信息
第二层-ROOT-表记录了.META.表的Region位置信息
第三层.META.表记录了用户数据表的Region位置信息

※ -ROOT-表只能有一个Region。通过-ROOT-表,就可以访问.META.表中的数据

※ .META.表可以有多个Region,保存了HBase中所有用户数据表的Region位置信息

四、HBase的运行机制

1、HBase系统架构

  • 客户端:客户端包含访问HBase的接口,同时在缓存中维护着已经访问过的Region位置信息,用来加快后续数据访问过程

  • Zookeeper服务器:Zookeeper可以帮助选举出一个Master作为集群的总管,并保证在任何时刻总有唯一一个Master在运行,这就避免了Master的“单点失效”问题

  • Master:主服务器Master主要负责表和Region的管理工作:管理用户对表的增加、删除、修改、查询等操作;实现不同Region服务器之间的负载均衡;在Region分裂或合并后,负责重新调整Region的分布;对发生故障失效的Region服务器上的Region进行迁移

  • Region服务器:Region服务器是HBase中最核心的模块,负责维护分配给自己的Region,并响应用户的读写请求

2、Region服务器工作原理

Region服务器内部管理一系列Region对象和一个HLog文件,其中,HLog是磁盘上面的记录文件,它记录着所有的更新操作。每个Region对象又是由多个Store组成的,每个Store对象了表中的一个列族的存储。每个Store又包含了MemStore和若干个StoreFile,其中,MemStore是在内存中的缓存,保存最近更新的数据;StoreFile是磁盘中的文件,采取B+树结构,方便快速读取。

(1)用户读写数据的过程
  • 写入数据时,首先被写人到MemStore和HLog中,当操作写入HLog之后,commit()调用才会将其返回给客户端

  • 读取数据时,Region服务器会首先访问MemStore缓存,如果不在缓存中,则到磁盘上面的StoreFile中寻找

(2)缓存的更新
  • 系统定期把MemStore缓存写入StoreFile文件中,然后在HLog中写入一个标记,表示缓存中的内容已被写入StoreFile中

  • 每次启动Region服务器时检查HLog,若更新了,则把更新写入MemStore,然后刷新缓存,写入StoreFile,删除旧HLog文件

(3)StoreFile的合并

每次MemStore缓存的刷新操作都会在磁盘上生成一个新的StoreFile文件,所以每个Store就会存在多个StoreFile文件。为了减少查找时间,系统一般会调用Store.compact()把多个StoreFile文件合并成一个大文件。

3、Store工作原理

每个Store对应了表中的一个列族的存储。每个Store包括一个MenStore缓存和若干个StoreFile文件。MenStore是排序的内存缓冲区,当用户写入数据时,系统首先把数据放入MenStore缓存,当MemStore缓存满时,就会刷新到磁盘中的一个StoreFile文件中,当单个StoreFile文件大小超过一定阈值时,就会触发文件分裂操作。

4、HLog工作原理

HBase系统为每个Region服务器配置了一个HLog文件,它是一种预写式日志(Write Ahead Log),用户更新数据必须首先写入日志后,才能写入MemStore缓存,直到MemStore缓存内容对应的日志已经写入磁盘,该缓存内容才能被刷写到磁盘。

第七章 MapReduce

一、概述

1、分布式并行编程

分布式并行编程与传统的程序开发方式有很大的区别。传统的程序都是以单指令、单数据流的方式顺序执行,虽然这种方式比较符合人类的思维习惯,但是这种程序的性能受到单台机器性能的限制,可扩展性较差。分布式并行程序可以运行在由大量计算机构成的集群上,从而可以充分利用集群的并行处理能力,同时通过向集群中增加新的计算节点,就可以很容易地实现集群计算能力的扩充。

2、MapReduce模型

MapReduce将复杂的、运行于大规模集群上的并行计算过程高度地抽象到两个函数:Map和Reduce,这两个函数及其核心思想都源自函数式编程语言。

在MapReduce中,一个存储在分布式文件系统中的大规模数据集会被切分成许多独立的小数据块,可以被多个Map任务并行处理。MapReduce框架会为每个Map任务输入一个数据子集,Map任务生成的结果会继续作为Reduce任务的输人,最终由Reduce任务输出最后结果,并写人分布式文件系统。

MapReduce设计的一个理念就是“计算向数据靠拢“,在一个集群中,只要有可能,MapReduce框架就会将Map程序就近地在HDFS数据所在的节点运行,即将计算节点和存储节点放在一起运行,从而减少了节点间的数据移动开销。

3、Map和Reduce函数

MapReduce模型的核心是Map函数和Reduce函数,二者都是由应用程序开发者负责具体实现的。MapReduce编程之所以比较容易,是因为程序员只要关注如何实现Map和Reduce函数,而不需要处理并行编程中的其他各种复杂问题,如分布式存储、工作调度、负载均衡、容错处理网络通信等,这些问题都会由MapReduce框架负责处理。

※ 试述MapReduce和Hadoop的关系

谷歌公司最先提出了分布式并行编程模型MapReduce, Hadoop MapReduce是它的开源实现。谷歌的MapReduce运行在分布式文件系统GFS上,与谷歌类似,HadoopMapReduce运行在分布式文件系统HDFS上。相对而言,HadoopMapReduce 要比谷歌MapReduce 的使用门槛低很多,程序员即使没有任何分布式程序开发经验,也可以很轻松地开发出分布式程序并部署到计算机集群中。

二、MapReduce体系结构

  • Client:MapReduce程序通过Client提交到JobTracker,也可通过Client提供的API查看作业运行状态

  • JobTracker:复制资源监控和作业调度

  • TaskTracker:周期性通过“心跳”将本节点上资源的使用情况和任务运行进度汇报给JobTracker,同时接收JobTracker发送过来的命令并执行相应操作

  • Task:分为Map Task和Reduce Task,均由TaskTracker启动

三、MapReduce适用的前提条件

待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。

四、MapReduce工作流程

1、工作流程与执行阶段

  • 使用InputFormat模块做Map前的预处理,然后将输人文件切分为逻辑上的多个InputSplit,每个InputSplit并没有对文件进行实际切割,只是记录了要处理的数据的位置和长度。

  • 通过RecordReader(RR)根据InputSplit中的信息来处理InputSplit中的具体记录,加载数据并转换为适合Map任务读取的键值对,输入给Map任务。

  • Map任务根据用户自定义的映射规则,输出一系列的<key,value>作为中间结果。

  • 为了让Reduce可以并行处理Map的结果,需要对Map的输出进行一定的分区、排序、合并、归并等操作,得到<key,value--list>形式的中间结果,再交给对应的Reduce进行处理,这个过程将无序的<key,value>处理成有序的<key,value--list>,称为Shuffle。

  • Reduce以一系列<key,value-Iist>中间结果作为输入,执行用户定义的逻辑,输出结果给OutputFormat模块。

  • OutputFormat模块会验证输出目录是否已经存在以及输出结果类型是否符合配置文件中的配置类型,如果都满足,就输出Reduce的结果到分布式文件系统。

2、Shuffle过程

分为两端,总体上是将键值对有序化。

  • Map端

    • 输入数据和执行Map任务:Map任务的输入数据一般保存在分布式文件系统(如GFS或HDFS)的文件块中,这些文件块的格式是任意的可以是文档,也可以是二进制格式的。Map任务接受<key,value>作为输入后,按一定的映射规则转换成一批<key,value>进行输出。

    • 写入缓存:每个Map任务都会被分配一个缓存,Map的输出结果不是立即写入磁盘,而是首先写入缓存。在缓存中积累一定数量的Ma即输出结果以后,再一次性批量写人磁盘,这样可以大大减少对磁盘I/O的影响。需要注意的是,在写入缓存之前,key与value值都会被序列化成字节数组。

    • 溢写(分区、排序、合并)

      • 溢写的过程通常是由另外一个单独的后台线程来完成的,不会影响Map结果往缓存写入,但是为了保证Map结果能够不停地持续写入缓存,不受溢写过程的影响,就必须让缓存中一直有可用的空间,不能等到全部占满才启动溢写过程,所以一般会设置一个溢写比例。

      • 在溢写到磁盘之前,缓存中的数据首先会被分区(Partition)。缓存中的数据是<key,value>形式的键值对,这些键值对最终需要交给不同的Reduce任务进行并行处理。MapReduce通过Partitioner接口对这些键值对进行分区,默认采用的分区方式是采用Hash函数对key进行哈希后再用Reduce任务的数量进行取模,可以表示成hash(key)mod R,其中R表示Reduce任务的数量,这样把Map输出结果均匀地分配给这R个Reduce任务去并行处理。MapReduce也允许用户通过重载Partitioner接口来自定义分区方式。

      • 对于每个分区内的所有键值对,后台线程会根据key对它们进行内存排序(Sort),排序是MapReduce的默认操作。排序结束后,还包含一个可选的合并(Combine)操作。如果用户事先没有定义Combiner函数,就不用进行合并操作。如果用户事先定义了Combiner函数,则这个时候会执行合并操作,从而减少需要溢写到磁盘的数据量。

      • 合并是指将那些具有相同key的<key,value>的value加起来。比如,有两个键值对<“xmu” 1>和<“xmu” 1>,经过合并操作以后就可以得到一个键值对<“xmu” 2>,减少了键值对的数量。不过,并非所有场合都可以使用Combiner,因为Combiner的输出是Reduce任务的输入,Combiner绝不能改变Reduce任务最终的计算结果,一般而言,累加、最大值等场景可以使用合并操作。

      • 经过分区、排序以及可能发生的合并操作之后,这些缓存中的键值对就可以被写入磁盘,并清空缓存。每次溢写操作都会在磁盘中生成一个新的溢写文件,写人溢写文件中的所有键值对都是经过分区和排序的。

    • 文件归并:归并是指对于具有相同key的键值对被归并成一个新的键值对。对于若干个具有相同key的键值对<k1,v1>,<k1,v2>......<k1,vn>会被归并成一个新的键值对<k1,<v1,v2,...,yn>>,另外,进行文件归并时,如果磁盘中已经生成的溢写文件的数量超过参数min.num.spills.for.combine的值时(默认值是3,用户可以修改这个值),那么,就可以再次运行Combiner,对数据进行合并操作,从而减少写入磁盘的数据量。但是,如果磁盘中只有一两个溢写文件时,执行合并操作就会“得不偿失”,因为执行合并操作本身也需要代价,因此不会运行Combiner。

  • Reduce端

    • 领取数据:Map端的Shuffle过程结束后,所有Map输出结果都保存在Map机器的本地磁盘上,Reduce任务需要把这些数据“领取”(Fetch)回来存放到自己所在机器的本地磁盘上。因此,在每个Reduce任务真正开始之前,它大部分时间都在从Map端把属于自己处理的那些分区的数据“领取”过来每个Reduce任务会不断地通过RPC向JobTracker询问Map任务是否已经完成;JobTracker监测到一个Map任务完成后,就会通知相关的Reduce任务来“领取”数据;一旦一个Reduce任务收到JobTracker的通知,它就会到该Map任务所在机器上把属于自己处理的分区数据领取到本地磁盘中。一般系统中会存在多个Map机器,因此Reduce任务会使用多个线程同时从多个Map机器领回数据。

    • 归并数据:从Map端领回的数据会首先被存放在Reduce任务所在机器的缓存中,如果缓存被占满,就会像Map端一样被溢写到磁盘中。由于在Shuffle阶段Reduce任务还没有真正开始执行,因此,这时可以把内存的大部分空间分配给Shuffle过程作为缓存。需要注意的是,系统中一般存在多个Map机器,Reduce任务会从多个Map机器领回属于自己处理的那些分区的数据,因此缓存中的数据是来自不同的Map机器的,一般会存在很多可以合并(Combine)的键值对。当溢写过程启动时,具有相同key的键值对会被归并(Merge),如果用户定义了Combiner,.则归并后的数据还可以执行合并操作,减少写人磁盘的数据量。每个溢写过程结束后,都会在磁盘中生成一个溢写文件,因此磁盘上会存在多个溢写文件。最终,当所有的Map端数据都已经被领回时,和Map端类似,多个溢写文件会被归并成一个大文件,归并的时候还会对键值对进行排序,从而使得最终大文件中的键值对都是有序的。当然,在数据很少的情形下,缓存可以存储所有数据,就不需要把数据溢写到磁盘,而是直接在内存中执行归并操作,然后直接输出给Reduce任务。需要说明的是,把磁盘上的多个溢写文件归并成一个大文件可能需要执行多轮归并操作。每轮归并操作可以归并的文件数量是由参数io.sort.factor的值来控制的(默认值是l0,可以修改)。假设磁盘中生成了50个溢写文件,每轮可以归并10个溢写文件,则需要经过5轮归并,得到5个归并后的大文件。

    • 把数据输入Reduce任务:出磁盘中经过多轮归并后得到的若干个大文件,不会继续归并成一个新的大文件,而是直接输入给Reduce任务,这样可以减少磁盘读写开销。由此,整个Shuffle过程顺利结束。接下来,Reduce任务会执行Reduce函数中定义的各种映射,输出最终结果,并保存到分布式文件系统中(比如GFS或HDFS)。

※ 分别描述Map端和Reduce端的Shuffle过程(需包括溢写、排序、归并、“领取”的过程)

Map端的Shuffle过程:

  1. 溢写(Spill):在Map阶段,当Mapper处理输入数据时,如果内存中的缓冲区达到一定的阈值,就会触发溢写操作。此时,Mapper将缓冲区中的部分数据写入磁盘上的临时文件,以释放内存供后续数据处理使用。

  2. 排序(Sort):一旦溢写发生,Map端会对溢写到磁盘上的临时文件进行排序。这样可以保证相同键的数据在排序后的文件中相邻,为后续的归并操作做准备。

  3. 归并(Merge):当所有Mapper完成溢写和排序后,Reduce端会发送请求,要求Map端将排序后的数据进行归并。Map端会将排序后的临时文件进行归并操作,将相同键的数据聚集在一起形成更大的块(Merge Block)。这样,相同键的数据将被聚合在一起,减少后续传输和处理的数据量。

  4. 领取(Fetch):一旦归并完成,Reduce端会发出请求,要求Map端将相应的Merge Block发送给Reduce节点。Map端会将请求的Merge Block发送给对应的Reduce节点,以供Reduce端进行后续的处理。

Reduce端的Shuffle过程:

  1. 领取(Fetch):Reduce节点向Map节点发送请求,要求获取特定的Merge Block。这些Merge Block包含了属于该Reduce节点负责处理的键值对数据。

  2. 排序(Sort):Reduce节点接收到来自多个Map节点的Merge Block后,对这些Merge Block进行排序。排序操作将确保相同键的数据被连续存储,为后续的归并操作做准备。

  3. 归并(Merge):Reduce节点对排序后的Merge Block进行归并操作,将相同键的数据进行聚合和处理。这样可以将大量的中间数据转化为更小规模的结果,减少数据量和后续处理的复杂性。

总的来说,Map端的Shuffle过程包括溢写、排序、归并和领取的过程。而Reduce端的Shuffle过程主要包括领取、排序和归并的过程。这两个阶段都涉及到数据的传输、排序和聚合,确保在Reduce阶段能够对相同键的数据进行合并和处理,生成最终的输出结果。

五、算法思想

【ChatGPT】(可根据上文进行补充)

MapReduce是一种分布式计算框架,由Google提出,用于处理大规模数据集。MapReduce的核心思想是将大规模数据集分成若干个小规模的数据块,然后将这些小规模数据块分配给不同的计算节点进行处理,最终将计算结果汇总起来。

具体来说,MapReduce将计算任务分成两个阶段:Map和Reduce。在Map阶段,计算节点将数据块划分成若干个小的数据片段,并对每个数据片段进行处理,生成一系列的键值对。在Reduce阶段,计算节点对Map阶段生成的键值对进行合并,生成最终的结果。

MapReduce的优势在于它能够自动将计算任务分配给多个计算节点进行处理,从而提高计算速度和效率。另外,MapReduce还具有容错性,当某个节点出现故障时,系统会自动将任务重新分配给其他节点进行处理,保证计算的正确性和鲁棒性。

MapReduce已经成为一种重要的分布式计算框架,并被广泛应用于各种大规模数据处理任务,如数据挖掘、机器学习、搜索引擎等领域。

第十章 Spark

一、特点

  • 运行速度快

  • 容易使用

  • 通用性

  • 运行模式多样

二、Spark与Hadoop的对比

Hadoop存在以下缺点:

  • 表达能力有限。计算都必须要转化成Map和Reduce两个操作,但这并不适合所有的情况,难以描述复杂的数据处理过程。

  • 磁盘IO开销大。每次执行时都需要从磁盘读取数据,并且在计算完成后需要将中间结果写人到磁盘中,IO开销较大。

  • 延迟高。一次计算可能需要分解成一系列按顺序执行的MapReduce任务,任务之间的衔接由于涉及到O开销,会产生较高延迟。而且,在前一个任务执行完成之前,其他任务无法开始,因此难以胜任复杂、多阶段的计算任务。

Spark主要有如下优点:

  • Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数据集操作类型,编程模型比MapReduce更灵活。

  • Spark提供了内存计算,中间结果直接放到内存中,带来了更高的迭代运算效率。

  • Spark基于DAG的任务调度执行机制,要优于MapReduce的迭代执行机制。

三、Spark生态系统

应用场景时间跨度其他框架Spark生态系统中的组件
复杂的批量数据处理小时级MapReduce、HiveSpark Core
基于历史数据的交互式查询分钟级、秒级Impala、Dremel、.DrillSpark SQL
基于实时数据流的数据处理毫秒、秒级Storm、S4Spark Streaming
基于历史数据的数据挖掘——MahoutMLlib
图结构数据的处理——Pregel、HamaGraphX
  • Spark Core:Spark Core包含Spark的基本功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等,主要面向批数据处理。Spak建立在统一的抽象RDD之上,使其可以以基本一致的方式应对不同的大数据处理场景。

  • Spark SQL:Spark SQL允许开发人员直接处理RDD,同时也可查询Hive、HBase等外部数据源。Spark SQL的一个重要特点是其能够统一处理关系表和RDD,使得开发人员不需要自己编写Spak应用程序,开发人员可以轻松地使用SQL命令进行查询,并进行更复杂的数据分析。

  • Spark Streaming:Spark Streaming支持高吞吐量、可容错处理的实时流数据处理,其核心思路是将流数据分解成一系列短小的批处理作业,每个短小的批处理作业都可以使用Spark Core进行快速处理。SparkStreaming支持多种数据输人源,如Kafa、Flume和TCP套接字等。

  • MLlib(机器学习):MLib提供了常用机器学习算法的实现,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛,开发人员只要具备一定的理论知识就能进行机器学习的工作。

  • GraphX(图计算):GraphX是Spark中用于图计算的API,可认为是Pregel在Spark上的重写及优化,GraphX性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。日,需要说明的是,无论是Spark SQL、Spark Streaming、MLlib还是GraphX,都可以使用SparkCoe的API处理问题,它们的方法几乎是通用的,处理的数据也可以共享,不同应用之间的数据可以无缝集成。

四、运行基本流程

  • 当一个Spark应用被提交时,首先需要为这个应用构建起基本的运行环境,即由任务控制节点(Driver)创建一个SparkContext,由SparkContext负责和资源管理器(Cluster Manager)的通信以及进行资源的申请、任务的分配和监控等。SparkContext会向资源管理器注册并申请运行Executor的资源

  • 资源管理器为Executor分配资源,并启动Executor进程,Executor运行情况将随着“心跳”发送到资源管理器上

  • SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAG调度器(DAGScheduler)进行解析,将DAG图分解成多个“阶段”,并且计算出各个阶段之间的依赖关系,然后把一个个“任务集”提交给底层的任务调度器(TaskScheduler)进行处理;Executor向SparkContext申请任务,任务调度器将任务分发给Executor运行,同时SparkContext将应用程序代码发放给Executor

  • 任务在Executor上运行,把执行结果反馈给任务调度器,然后反馈给DAG调度器,运行完毕后写入数据并释放所有资源

五、主要概念说明

  • RDD:是弹性分布式数据集(Resilient Distributed Dataset)的英文缩写,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。

  • DAG:是Directed Acyclic Graph(有向无环图)的英文缩写,反映RDD之间的依赖关系。

  • 阶段:是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,或者也被称为“任务集”。

  • 分区:一个RDD就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可以分成多个分区,每个分区就是一个数据集片段。

  • 窄依赖:父RDD的一个分区只被一个子RDD的一个分区所使用就是窄依赖。

  • 宽依赖:父RDD的一个分区被一个子RDD的多个分区所使用就是宽依赖。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
中职大数据技术应用是指在中等职业教育阶段,对大数据技术进行教学和培养学生相关应用能力的一门课程。大数据技术在中职教育中的应用主要包括以下几个方面: 1. 理论知识教学:中职大数据技术应用课程会教授学生大数据的基本概念、原理和技术体系,包括数据采集、数据存储、数据处理和数据分析等方面的知识。 2. 技术实践训练:学生将通过实际操作来学习大数据技术应用,例如使用Hadoop等大数据处理框架进行数据处理和分析,使用数据可视化工具展示分析结果等。 3. 应用案例研究:中职大数据技术应用课程会引入一些实际应用案例,让学生了解大数据技术在不同领域的应用,如电商推荐系统、交通路况分析等。 4. 实习实训机会:为了提高学生的实际操作能力,中职教育机构可能会与企业合作,为学生提供实习实训机会,让他们在真实的大数据应用场景中进行实践。 通过中职大数据技术应用的学习,学生可以获得大数据技术的基础知识和实际应用能力,为他们未来从事与大数据相关的职业打下坚实的基础。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [教育大数据的核心技术、应用现状与发展趋势](https://blog.csdn.net/weixin_34150830/article/details/89729057)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有为肥宅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值