知识点版
题型:七个简答题、两个分析题、一个论述题
大数据概念、关键技术
Hadoop概念及配置
Hadoop相关概念、生态系统
HDFS概念、体系结构和读写过程
Hbase数据模型、实现原理和运行机制
MapReduce的概念、工作流程及分布式并行编程算法设计
Spark基本概念、运行架构、RDD设计与运行原理
第一章
- 大数据特征
- 数据量大
- 数据类型繁多
- 处理速度快
- 价值密度低
- 大数据的影响
- 大数据对科学研究的影响(4种范式)
实验科学,理论科学,计算科学,数据密集型科学
- 大数据对思维方式的影响(3种转变)
- 全样而非抽样:由于支持海量数据的存储与处理、处理问题的方式从以前的抽样处理到现在全面全样处理。
- 效率而非精确:全样分析处理法,追求效率而非精度。
- 相关而非因果:相关性而非因果性,比如购买了汽车锁接着推荐相关产品。
- 大数据对社会发展的影响
大数据决策成为一种新的决策方式,大数据应用有力促进信息技术与各行业的深度融合,大数据开发大大推动新技术和新应用的不断涌现。
- 大数据对就业市场的影响
- 大数据对人才培养的影响
- 大数据计算模式
- 批处理计算:针对大规模数据的批量处理,代表产品:MapReduce、Spark
- 流计算:针对流计算的实时计算,代表产品:Storm、S4、Flume、Streams
- 图计算:针对大规模图结构数据的处理,代表产品:Pregel、Graphx、Graph
- 查询分析计算:大规模数据的存储管理和查询分析,代表产品:Dremel、Hive
- 大数据与云计算、物联网的关系
大数据、云计算和物联网代表IT领域最新的技术发展趋势,三者既有区别又有联系。
- 区别:大数据侧重于对海量数据的存储、处理与分析,从海量数据中发现价值,服务于生产和生活;云计算旨在整合和优化各种IT资源,并通过网络以服务的方式廉价地提供给用户;物联网的发展目标是实现“物物相连”,应用创新是物联网发展的核心。
- 联系:从整体上看,三者相辅相成。云计算为大数据提供了技术基础,大数据为云计算提供用武之地,物联网是大数据的重要来源,大数据技术为物联网数据分析提供支持,云计算为物联网提供海量数据存储能力,物联网为云计算技术提供广阔的应用空间。
第二章
- Hadoop简介
Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构。基于Java语言开发,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中。核心是分布式文件系统HDFS和MapReduce。
- Hadoop特性
- 高可靠性。 采用冗余数据存储方式,即使一个副本发生故障,其他副本也可以保证正常对外提供服务。
- 高效性。 作为并行分布式计算平台,Hadoop采用分布式存储和分布式处理两大核心技术,能够高效地处理PB级数据。
- 高可扩展性。 Hadoop的设计目标是可以高效稳定地运行在廉价的计算机集群上,可以扩展到数以千计的计算机节点上。
- 高容错性。 采用冗余数据存储方式,自动保存数据的多个副本,并且能够自动将失败的任务进行重新分配。
- 成本低。 Hadoop采用廉价的计算机集群,成本计较低,普通用户也很容易用自己的PC搭建Hadoop运行环境。
- 运行在Linux操作系统上。 Hadoop是基于Java开发的,可以较好地运行在Linux操作系统上。
- 支持多种编程语言。 Hadoop上的应用程序也可以使用其他语言编写,如C++。
- Hadoop生态系统
HDFS:是Hadoop两大核心之一,具有处理超大数据、流式处理、可以运行在廉价商用服务器上等特点。
HBase:一个提供高可靠性、高性能、可伸缩、实时读写、分布式的列式数据库,一般采用HDFS作为底层数据存储系统。
MapReduce:是一种编程模型,用于大规模数据集的并行计算,它将复杂的、运行于大规模集群上的并行计算过程高度抽象为两个函数---Map和Reduce。
Hive:基于Hadoop的数据仓库工具,可以用于对Hadoop文件中的数据集进行数据整理、特殊查询和分析存储。
Pig:是一种数据流语言和运行环境,适用于Hadoop和MapReduce平台来查询大型半结构化数据集。
Mahout:一个开源项目,提供一些可拓展的机器学习领域经典算法的实现。
ZooKeeper:针对谷歌Chubby的一个开源实现,是高效和可靠的协同工作系统。
Flume:高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。
Sqoop:主要用来在Hadoop和关系数据库之间交换数据。
Ambari:一种基于Web的工具,支持Apache Hadoop集群的安装、部署、配置和管理。
第三章
- HDFS中的块
HDFS默认一个块64MB,一个文件被分为多个块,以块为存储单位。
块的大小远远大于普通文件系统,可以最小化寻址开销。
三大好处:
- 支持大规模文件存储
- 简化系统设计
- 适合数据备份
- 名称节点与数据节点
名称节点:负责管理分布式文件系统的命名空间,记录了每个文件中各个块所在的数据节点的位置信息,保存了两个核心的数据结构,即Fslmage和EditLog。
Fslmage:用于维护文件系统树以及文件树中所在的文件和文件夹的元数据。
EditLog:记录了所有针对文件的创建、删除、重命名等操作
数据节点:HDFS的工作节点,负责数据的存储和读取,根据客户端或者名称节点的调度来进行数据的存储与检索,并向名称节点定期发送自己所存储的块的列表信息。
- 第二名称节点引入的原因
名称节点运行期间EditLog不断变大的问题,解决的办法就是引入SecondaryNameNode第二名称节点。
第二名称节点是HDFS架构中的一个组成部分,它是用来保存名称节点中对HDFS元数据信息的备份,并减少节点重启的时间。
四、HDFS体系结构的局限性:
HDFS只设置唯一一个名称节点,这样做虽然大大简化了系统设计,但也带来了一些明显的局限性,具体如下:
(1)命名空间的限制:名称节点是保存在内存中的,因此,名称节点能够容纳的对象(文件、块)的个数会受到内存空间大小的限制。
(2)性能的瓶颈:整个分布式文件系统的吞吐量,受限于单个名称节点的吞吐量。客户端访问数据,都需要找名称节点。
(3)隔离问题:由于集群中只有一个名称节点,只有一个命名空间,因此,无法对不同应用程序进行隔离。
(4)集群的可用性:一旦这个唯一的名称节点发生故障,会导致整个集群变得不可用。
- HDFS的数据错误与恢复
- 名称节点出错:
Hadoop采用两种机制来确保名称节点的安全:一是把名称节点上的元数据信息同步存储到其他文件系统,比如远程挂载的网络文件系统(Network File System,NFS)中;二是运行一个第二名称节点,利用第二名称节点中的元数据信息进行系统恢复。当名称节点发生死机时,首先到远程挂载的网络文件系统中获取备份的元数据信息,放到第二名称节点上进行恢复,并把第二名称节点作为名称节点来使用。
- 数据节点出错:
当数据节点发生故障,或者网络发生断网时,名称节点就无法收到来自一些数据节点的心跳信息,这时,这些数据节点就会被标记为“宕机”, 节点上面的所有数据都会被标记为“不可读”,名称节点不会再给它们 发送任何I/O请求。由于一些数据节点的 不可用,会导致一些数据块的副本数量小于冗余因子。 名称节点会定期检查这种情况,一旦发现某个数据块的副本数量小于冗余因子,就会启动数据冗余复制,为它生成新的副本。
- 数据出错
•网络传输和磁盘错误等因素,都会造成数据错误
•客户端在读取到数据后,会采用md5和sha1对数据块进行校验,以确定读取到正确的数据
•在文件被创建时,客户端就会对每一个文件块进行信息摘录,并把这些信息写入到同一个路径的隐藏文件里面
•当客户端读取文件的时候,会先读取该信息文件,然后利用该信息文件对每个读取的数据块进行校验,如果校验出错,客户端就会请求到另外一个数据节点读取该文件块,并且向名称节点报告这个文件块有错误,名称节点会定期检查并且重新复制这个块。
- HDFS读数据
- 客户端通过 FileSystem.open()打开文件。
- 在DFSInputStream 的构造函数中,输人流通过 ClientProtocal.getBlockLocations()远程调用名称节点,获得文件开始部分数据块的保存位置。
- 获得输入流FSDataInputStream后,客户端调用read()方法开始读取数据。输入流根据前面的排序结果,选择距离客户端最近的数据节点建立连接并读取数据。
- 数据从该数据节点读到客户端;当该数据块读取完毕时,FSDataInputStream关闭和该数据节点的连接。
- 输入流通过getBlockLocations()方法查找下一个数据块(如果客户端缓存中已经包含了该数据块的位置信息,就不需要调用该方法)。
- HDFS写数据
- 客户端通过FileSystem.create()创建文件。
- DistributedFileSystem通过RPC远程调用名称节点,在文件系统的命名空间中创建一个新的文件。名称节点会执行一些检查,比如文件是否已经存在,客户端是否有权限创建文件等。
- 获得输出流FSDataOutputStream以后,客尸端调用输出流的write()方法向HDFS中对应的文件写入数据。
- 客户端向输出流FSDataOutputStream 中写入的数据首先被分为一个个的分包,分包被放入DHSOutputStream对象的内部队列。输出流FSDataOutputStream会向名称节点申请保存数据块的若干数据节点。
- 接受确认包。
- 客户端调用close()方法关闭输出流,此时开始,客户端不会再向输出流中写入数据。
第四章
- HBase数据模型相关概念
- 表:Hbase采用表来组织数据,表由行和列组成,列划分为若干个列族。
- 行:每个HBase表都由若干行组成,每个行由行键来标识。
- 列族:一个HBase表被分组成许多“列族”的集合,它是基本的访问控制单元
- 列限定符:列族里的数据通过列限定符来定位
- 单元格:在Hbase表,通过行键,列族和列限定符确定一个单元格
- 时间戳:每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引
- HBase数据坐标
数据坐标:通过行键,列族,列限定符和时间戳确定一个单元格,理解为四维坐标。行式数据库:主要适合小批量的数据处理
列式数据库:适合批量数据处理和即席查询,可以降低/o开销,支持大量并发用户查询,速度快速,具有较高的压缩性,
- HBase功能组件
HBase的实现包括三个主要的功能组件:
- 库函数:链接到每个客户端
- 一个Master主服务器
- 许多个Region服务器
主服务器Master负责管理和维护HBase表的分区信息,维护Region服务器列表,分配Region,负载均衡
Region服务器负责存储和维护分配给自己的Region,处理来自客户端的读写请求
客户端并不是直接从Master主服务器上读取数据,而是在获得Region的存储位置信息后,直接从Region服务器上读取数据
客户端并不依赖Master,而是通过ZooKeeper来获取Region位置信息,大多数客户端甚至从来不和Master通信,这种设计方式使得负载很小
- 实现原理
层次 | 名称 | 作用 |
第一层 | ZooKeeper文件 | 记录了-ROOT-表的位置信息 |
第二层 | -ROOT-表 | 记录了.META.表的Region位置信息,-ROOT-表只能有一个Region。通过-ROOT-表就可以访问.META.表中的数据 |
第三层 | .META.表 | 记录了用户数据表的Region位置信息,.META.表可以有多个Region,保存了HBase中所有用户数据表的Region位置信息 |
HBase三层结构中各层次的名称和作用
第七章
一、MapReduce模型简介
MapReduce将复杂的、运行于大规模集群并行计算过程高度地抽象到了两个函数群上的数:Map和Reduce
编程容易,不需要掌握分布式并行编程细节,也可以很容易把自己的程序运行在分布式系统上,完成海量数据的计算
用“分而治之”的策略,一个存储在分布式文件系统中的大规模数据集会被切分成许多独立的小数据集,这些小数据集可以被多个Map任务并行处理。
设计的一个理念是“计算向数据靠拢”,因为移动数据需要大量的网络开销。
MapReduce采用Master/Slave架构,包括一个Master和若干个Slave。
不一定用Java写
- 工作流程
MapReduce的核心思想:分而治之。
把一个大的数据集拆分成多个小数据集在多台机器上并行处理。
一个大的MapReduce作业,首先会被拆分成许多个Map任务在多台机器上并行执行,每个Map任务通常运行在数据存储的节点上。这样,计算和数据就可以放在一起运行,不需要额外的数据传输开销。当Map任务结束后,会生成以<key,value>形式的许多中间结果。然后,这些中间结果会被分发到多个Reduce任务在多台机器上并行执行,具有相同key的<key,value>会被发送到同一个Reduce任务,Reduce任务会对中间结果进行汇总计算得到最后结果,并输出到分布式文件系统。
- 执行阶段
MapReduce的各个执行阶段:(MapReduce算法的执行过程)
(1)MapReduce框架使用InputFormat模块做Map前的预处理,比如验证输入的格式是否符合输入定义;然后,将输入文件切分为逻辑上的多个InputSplit。
(2)通过RecordReader(RR)根据InputSplit中的信息来处理InputSplit中的具体记录,加载数据并将其转换为适合Map任务读取的键值对,输入给Map任务。
(3)Map任务会根据用户自定义的映射规则,输出一系列的<key,value>作为中间结果。
(4)进行Shuffle过程。对Map的输出进行一定的分区(Partition)、排序(Sort)、合并(Combine)、归并(Merge)等操作,得到<key,value-list>形式的中间结果,再交给对应的Reduce来处理。
(5)Reduce以一系列<key,value-list>中间结果作为输入,执行用户定义的逻辑,输出结果交给OutputFormat模块。
(6)OutputFormat模块会验证输出目录是否已经存在,以及输出结果类型是否符合配置文件中的配置类型,如果都满足,就输出Reduce的结果到分布式文件系统。
四、Shuffle过程详解
Shuffle是指对Map任务输出结果进行分区、排序、合并、归并等处理并交给Reduce的过程。
- 在Map端的Shuffle过程。
Map任务的输出结果首先被写入缓存,当缓存满时,(当缓存区容量达到80%(缓冲区默认100MB))就启动溢写操作,把缓存中的数据写入磁盘文件,并清空缓存。当启动溢写操作时,首先需要对缓存中的数据进行分区,然后对每个分区的数据进行排序和合并,再写入磁盘文件。每次溢写操作会生成一个新的磁盘文件,随着Map任务的执行,磁盘中就会生成多个溢写文件。在Map任务全部结束之前,这些溢写文件会被归并成一个大的磁盘文件,然后通知相应的Reduce任务来“领取”属于自己处理的数据。
- 在Reduce端的Shuffle过程。
Reduce任务从Map端的不同Map机器“领取”属于自己处理的那部分数据,然后对数据进行归并后交给Reduce处理。
第十章
- Spark特点
- 运行速度快
- 容易使用
- 通用性
- 运行模式多样
- 与Hadoop对比
Hadoop的缺点:
- 表达能力有限。
- 磁盘IO开销大。
(3)延迟高。任务之间的衔接由于涉及IO开销,会产生较高延迟。而且,在前一个任务执行完成之前,其他任务无法开始,因此难以胜任复杂、多阶段的计算任务。
Spark的主要优点:
(1)Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数据集操作类型,编程模型比MapReduce更灵活。
(2)Spark提供了内存计算,中间结果直接放到内存中,带来了更高的迭代运算效率。
(3)Spark基于DAG的任务调度执行机制,要优于MapReduce的迭代执行机制。
- Spark基本概念
(1) RDD:是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。
(2) DAG:反映RDD之间的依赖关系。
(3) Executor:是运行在工作节点( Worker Node)上的一个进程, 负责运行任务,并为应用
程存储数据。
(4)应用:用户编写的Spark应用程序。
(5)任务:运行在Executor上的工作单元。
(6)作业: -个作业( Job)包含多个RDD及作用于相应RDD上的各种操作。
(7)阶段:是作业的基本调度单位,一个作业 会分为多组任务(Task ),每组任务被称为“阶段(Stage)”, 或者也被称为 “任务集”。