大数据技术习题

第一章 大数据概述

  1. 试述信息技术发展史上的3次信息化浪潮及其具体内容
第一次浪潮1980年前后个人计算机信息处理
第二次浪潮1995年前后互联网信息传输
第三次浪潮2010年前后物联网、云计算和大数据信息爆炸
  1. 试述数据产生方式经历的几个阶段

3个阶段,分别是运营式系统阶段、用户原创内容阶段和感知式系统阶段。

  • 运营式系统阶段:以门户网站为代表,数据的产生方式是被动的,只有当实际的企业业务发生时,才会产生新的记录并存入数据库。
  • 用户原创内容阶段:以wiki、博客、微博、微信等自服务模式为主,上网用户本身就是内容的生成者。
  • 感知式系统阶段:物联网中的设备每时每刻都在自动产生大量数据,并且其自动数据产生方式将在短时间内产生更密集、更大量的数据。
  1. 试述大数据的四个基本特征
  • 数据量大:信息社会中,数据以自然方式增长,数据每两年增加一倍;
  • 数据类型繁多:数据类型丰富,包括结构化数据和非结构化数据,如邮件、音频、视频等,给数据处理和分析技术提出了新的挑战;
  • 处理速度快:由于很多应用都需要基于快速生成的数据给出实时分析结果,因此新兴的大数据分析技术通常采用集群处理和独特的内部设计;
  • 价值密度低:有价值的数据分散在海量数据中。
  1. 试述大数据时代的“数据爆炸”特性
    当前数据爆炸的特性包括增长速度快以及种类繁多两大特征
  • 增长速度快主要指的是随着用户将更多设备连入互联网中以及物联网的推广和普及,各种设备将自动每时每刻产生大量数据;
  • 另一方面,产生的数据也由于产生的途径、设备、用途不同而变得种类繁多,结构各异。
  1. 科学研究经历了哪4个阶段
  • 实验科学:采用科学解决一些科学问题;
  • 理论科学:开始采用各种数学、几何、物理等理论。构建问题模型和解决方案;
  • 计算科学:计算科学主要用于对各个科学问题进行计算机模拟和其他形式的计算,借助于计算机的高速运算能力可以解决各种问题;
  • 数据密集型科学:先有大量已知数据,从数据中挖掘未知模式和有价值的信息,通过计算和分析得到未知的结论。
  1. 试述大数据对思维方式的重要影响
  • 全样而非抽样:大数据技术的核心就是海量数据的存储和处理,因此科学分析可以完全直接针对全集数据而不是抽样数据,并且可以在短时间内迅速得到分析结果。
  • 效率而非精确:由于大数据采用的是全样分析,故不存在误差放大的问题,故追求高精确性不是首要目标。另一方面,由于大数据时代要求在几秒内迅速给出海量数据的分析结果,否则会丧失数据的价值,因此数据分析效率成为关键。
  • 相关而非因果:由于因果关系不再那么重要,人们更追求相关性。
  1. 大数据决策与传统的基于数据仓库的决策有什么区别
  • 数据仓库以关系型数据库为基础,受到数据类型和和数据量方面的限制。
  • 大数据决策可以面向类型繁多、非结构化的海量数据进行决策分析。
  1. 举例说明大数据的具体应用
  • 制造业:提升制造业水平,包括产品故障诊断与分析、工业供应链分析与优化;
  • 金融行业:在高频交易、社交情绪分析和信贷风险分析等领域发挥重大作用;
  • 汽车行业:依托于大数据和物联网技术的无人驾驶汽车。
  1. 举例说明大数据的关键技术
  • 数据采集与预处理:使用ETL工具将数据抽到临时中间层后进行清洗、转换和集成后加载到数据仓库中,作为数据挖掘的基础;或者利用日志采集工具如Flume将实时采集的数据作为流计算系统的输入,进行实时处理分析;
  • 数据存储和管理:利用分布式文件系统、NoSQL数据库等实现对数据的存储和管理;
  • 数据处理与分析:利用分布式并行编程和计算框架,结合机器学习和数据挖掘算法,实现对海量数据的处理和分析,并进行可视化呈现;
  • 数据安全和隐私保护:构建隐私数据保护体系和数据安全体系。
  1. 大数据产业包含哪些层面
    IT基础设施层、数据源层、数据管理层、数据分析层、数据平台层、数据应用层。

  2. 定义并解释以下术语:物联网、云计算

  • 云计算:实现了通过网络提供可伸缩的、廉价的分布式计算能力,用户只需在具备网络接入条件的地方就可以随时随地获得所需的各种IT资源;包含了三种经典的服务模式:LaaS基础设施即服务、PaaS平台即服务和SaaS软件即服务。
  • 物联网:是物物相连的互联网,是互联网的延伸,利用局部网络或互联网等通信技术将传感器、控制器、机器和人等通过新的方式连在一起,形成人与物、物与物相连,实现信息化和远程管理控制。

12 详细阐述大数据、云计算和物联网三者之间的区别与联系

  • 区别:大数据侧重于对海量数据的存储、处理与分析;云计算本质旨在整合和优化各种IT资源,并通过网络以服务的方式廉价提供给用户;物联网的发展目标是实现物物相连。
  • 联系:物联网是大数据的重要来源,大数据植根于云计算,大数据分析的很多技术来源于云计算;大数据为云计算提供用武之地,供云计算发挥价值;物联网借助于云计算和大数据技术,实现物联网大数据的存储、分析和处理。

第二章 Hadoop

分布式文件系统:

一种运行在多台主机上的进行分布式存储的文件系统,采用客户机/服务器建立连接,提出访问请求,客户端以特定的通信协议通过网络与服务器建立连接,提出文件访问请求,客户端和服务器可以通过设置访问权限来限制请求方对底层数据存储块的访问。

  1. 试述Hadoop和MapReduce、GFS等技术之间的联系?
  • Hadoop是GFS的开源实现,都属于Google
  • Hadoop的核心是HDFS和MapReduce
  1. Hadoop有哪些特性?
  • 高可靠性、高效性、高扩展性、高容错性
  • 成本低、运行在Linux平台、支持多种编程语言
  1. 试述Hadoop在各个领域的应用情况?
    主要运用在互联网领域;yamhoo(广告系统和页面搜索)、Facebook(日志处理、推荐系统、数据仓库)、淘宝(数据库、推荐、日志、排行榜)、百度、华为
  2. Hadoop生态系统以及每个部分的具体功能?
    在这里插入图片描述
  • HDFS:底层数据存储与I/O
  • Hbase:基于列的分布式数据库
  • MapReduce:一种编程模型,用于大数据集的并行运算
  • Hive:数据库查询工具,对Hadoop中数据集进行数据分析、查询
  • Pig:一种数据流语言和运行环境,查询半结构化的数据集
  • Mahout:提供可扩展的机器学习领域经典算法的实现
  • Zookeeper:高效和可靠的协同工作系统,用于构建分布式应用,减轻分布式应用程序承担的协调任务
  • Flume:高可用、高可靠、分布式的海量日志采集、聚合、传输的系统
  • Sqoop:SQL to Hadoop的缩写,用来在Hadoop和关系型数据库之间交换数据
  • Ambari:基于Web的工具,支持Hadoop集群的安装、部署、配置和管理。
  1. java的路径JAVA_HOME在哪个配置文件中?
    JAVA_HOME = /usr/lib/jvm/default-java
  2. 所有节点的HDFS路径是通过fs.default.name来设置的,请问它是在哪个配置文件中设置的?
    core-site.xml
  3. 单机模式和伪分布式模式的异同点?
  • 伪分布式:一台机器上模拟一个小小的集群,但是集群中只有一个节点。

  • 单机模式是Hadoop的默认模式。这种模式在一台单机上运行,没有分布式文件系统,而是直接读写本地操作系统的文件系统。

  • 伪分布模式这种模式也是在一台单机上运行,但用不同的Java进程模仿分布式运行中的各类结点

单机就是在本地,不需要配置文件,完全运行在本地

  • 单机模式因为不需要与其他节点交互,单机模式就不使用HDFS,也不加载任何Hadoop的守护进程。该模式主要用于开发调试MapReduce程序的应用逻辑。

  • 伪分布模式在单机模式之上增加了代码调试功能,允许你检查内存使用情况,HDFS输入输出,以及其他的守护进程交互。

  1. Hadoop伪分布式运行启动后所具有的进程都有哪些?
    NodeManager
    Jps
    NameNode
    SecondaryNameNode
    DataNode
    ResourceManager

第三章 分布式文件系统

  1. 试述分布式文件系统设计的需求
    设计需求主要有以下几点:
  • 透明性、并发控制、文件复制、硬件和操作系统的异构性、可收缩性、容错、安全。
  1. 分布式文件系统是如何实现高水平扩展的?
    分布式文件系统在物理结构上是由计算机集群中的多个节点构成的,这些节点分为两类,一类叫“主节点”或“名称节点”,即NameNode,一类叫“从节点”或“数据节点”,即DataNode。
    通过名称节点管理文件和目录并管理数据结点和文件块的映射关系;
    数据结点负责数据的存储和读取。

HDFS架构:
在这里插入图片描述

  1. 试述HDFS的块和普通文件系统中的块的区别
    HDFS的块大小更大,一般默认一个块大小为128MB,这是由于HDFS中的文件会被拆为多个块作为独立单元进行存储

  2. 试述HDFS中的名称节点和数据结点的具体功能

  • 名称节点
      1. 负责管理分布式文件系统的命名空间(包括目录、块、文件)
      1. 记录每个文件中各个块所在的数据节点的位置信息;
  • 第二名称节点的作用:
      1. 完成editlog和FsImage的合并,缩小editlog的大小,使得名称节点重启的时间大大减小
      1. 作为名称节点的检查点,保存名称节点的元数据信息,冷备份
  • 数据节点是分布式文件系统HDFS的工作节点
      1. 负责数据的存储和读取,会根据客户端或者名称节点的调度来进行数据的存储和检索
      1. 名称节点定期发送自己所存储的块的列表。
  1. 在分布式文件系统中,中心节点的设计至关重要,请阐述HDFS是如何减轻中心节点的负担的
  • 在客户端需要访问一个文件时,名称节点并不参与数据的传输,而是只将数据节点位置发给客户端,因此实现了一个文件的数据能够在不同的数据节点上实现并发访问,大大提高了数据访问速度并减轻了中心服务器的负担,方便了数据管理。

名称节点:

在这里插入图片描述
名称节点架构:

在这里插入图片描述

  1. HDFS只设置唯一一个名称节点,在简化系统设计的同时也带来了一些明显的局限性,请阐述局限性具体表现在哪些方面
    1) 命名空间的限制;2)性能的瓶颈;3)隔离问题;4)集群的可用性。

  2. 试述HDFS的冗余数据保存策略
    采用了多副本方式多数据进行存储

    1. 即先在集群内挑选一台磁盘不太满、CPU不太忙的数据节点作为第一个副本存放点;
    2. 选取不同的机架的数据节点作为第二副本存放点;
    3. 选择与第一副本存放点同机架的不同节点作为第三副本存放点
    4. (非必需!)第四副本存放点从集群中随机挑选节点。
      在这里插入图片描述
  3. 数据复制主要是在数据写入和数据恢复的时候发生,HDFS数据复制是使用流水线复制的策略,请阐述该策略的细节?

    • 每个块都会向HDFS集群中的名称节点发出写请求,名称节点会返回一个数据节点列表给客户端,客户端将数据写入列表中第一个数据节点时,同时把列表传给第二个节点;第二个节点在接收到数据写入本地的同时,会把自己已经接收到的数据传给第三个数据节点,同时第三个数据节点接收到数据时,会在写入的同时将数据发送给第四个节点,以此类推。
  • 块-> 名称节点-> 客户端-> 数据节点

  • 策略:
    在这里插入图片描述

  • 流程:


  • 在这里插入图片描述

  1. 试述HDFS是如何探测错误发生以及如何进行恢复的?
    1) 名称节点出错:将名称节点上的元数据信息同步存储到其他文件系统中;并运行一个第二名称节点SecondNameNode,当名称节点宕机之后,利用第二名称节点进行系统恢复。
    2) 数据节点出错:将无法接收到“心跳”信号的数据节点标记为不可读,如果数据块的副本数量小于冗余因子,就会启动数据冗余复制,为它生成新副本。
    3) 数据出错:客户端收到数据后会使用md5和sha1对数据块进行校验;如果校验出错,客户端就会请求到另外一个数据节点读取该文件块,并向名称节点报告这个文件块有错误,名称节点会定期检查并且重新复制这个块。

第二名称节点:
在这里插入图片描述

在这里插入图片描述

  1. 请阐述HDFS在不发生故障的情况下读文件的过程
    1) 客户端打开文件,创建输入流;
    2) 输入流通过远程调用名称节点,获得文件开始部分数据块的保存位置;
    3) 客户端得到位置后开始读取数据,输入流选择距离客户端最近的数据节点建立连接并读取数据;
    4) 数据从该数据节点读取至客户端结束时,关闭连接;
    5) 输入流查找下一个数据块;
    6) 找到该数据块的最佳数据节点,读取数据;
    7) 客户端读取完毕数据时,关闭输入流。
  • 数据节点之间是链式的
  • 用户只操作命令通过客户端传达
  1. 请阐述HDFS在不发生故障的情况下写文件的过程
    1) 客户端创建文件和输出流;
    2) HDFS调用名称节点,在文件系统的命名空间中建一个新的文件,并执行检查;检查通过后,名称节点会构造一个新文件夹,并添加文件信息;
    3) 客户端通过输出流向HDFS的文件写入数据
    4) 客户端写入的数据首先会被分成一个个的分包,将分包放入输出流对象的内部队列,并向名称节点申请若干个数据节点,然后通过流水线复制策略打包成数据包发送出去;
    5) 为保证所有数据节点的数据都是准确的,需要数据节点向发送者发送确认包,当客户端收到应答时,将对应的分包从内部队列移除。不断执行3~5直至数据写完;
    6) 客户端关闭输出流,通知名称节点关闭文件。

HDFS重点回顾

  • 节点之间交流协议:
    在这里插入图片描述

  • 具体数据复制保存的例子:
    在这里插入图片描述

  • 机架距离计算
    在这里插入图片描述

  • 读写流程:
    在这里插入图片描述
    在这里插入图片描述

  • 心跳机制
    DataNode心跳机制的作用讲解了DataNode的三个作用:

  1. register:当DataNode启动的时候,DataNode需要将自身的一些信息(hostname, version等)告诉NameNode,NameNode经过check后使其成为集群中的一员,然后信息维护在NetworkTopology中
  2. block report:将block的信息汇报给NameNode,使得NameNode可以维护数据块和数据节点之间的映射关系
  3. 定期的send heartbeat
    • 告诉NameNode我还活着,我的存储空间还有多少等信息
    • 执行NameNode通过heartbeat传过来的指令,比如删除数据块

以上第1和第2个动作都是在DataNode启动的时候发生的,register的步骤主要功能是使得这个DataNode成为HDFS集群中的成员,DataNode注册成功后,DataNode会将它管理的所有的数据块信息,通过blockReport方法上报到NameNode,帮助NameNode建立HDFS文件数据块到DataNode的映射关系,这一步操作完成后,DataNode才正式算启动完成,可以对外提供服务了。

由于NameNode和DataNode之间存在主从关系,DataNode需要每隔一段时间发送心跳到NameNode,如果NameNode长时间收不到DataNode节点的心跳信息,那么NameNode会认为DataNode已经失效。NameNode如果有一些需要DataNode配合的动作,则会通过心跳返回给DataNode,心跳返回值是一个DataNodeCommand数组,它是一系列NameNode的指令,这样DataNode就可以根据指令完成指定的动作,比如HDFS文件的删除。

HBase

定义:

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

  1. 试述在Hadoop体系结构中HBase与其他组成部分的相互关系
  • HBase利用Hadoop MapReduce来处理HBase中的海量数据,实现高性能计算;
  • 利用Zookeeper作为协同服务,实现稳定服务和失败恢复;
  • 利用HDFS作为高可靠的底层存储,
  • 利用廉价集群提供海量数据存储能力;
  • 此外,Sqoop为HBase提供了高效、便捷的RDBMS数据导入功能
  • Pig和Hive为HBase提供了高层语言支持。
  1. 请阐述HBase和BigTable底层技术的对应关系
BigTableHBase
文件存储系统GFSHDFS
数据处理MapReduceHadoop MapReduce
协同服务ChubbyZookeeper
  1. 请阐述HBase和传统关系数据库的区别
区别传统数据库HBase
数据类型关系模型数据模型
数据操作增删改查、多表连接增删改查
存储模式基于行或元组存储基于列存储
数据索引针对不同列构建复杂的多个索引只有一个行索引
数据维护用最新的值去替换记录中原来的旧值更新操作不会删除数据旧的版本,而是生成新的版本
可伸缩性很难横向伸缩,纵向也很有限很容易通过增加硬件的数量来实现性能的伸缩
  1. HBase有哪些类型的访问接口
    HBase提供了Native Java API、HBase Shell、Thrift Gateway、REST GateWay、Pig、Hive等访问接口。

  2. HBase实例

  3. 分别解释HBase中行键、列族和时间戳的概念

  • 行键是唯一的,在一个表中只出现一次,可以是任意字符串。
  • 列族是基本的数据访问控制单元,需要在创建表的时候就定义好,数量不能太多,而且不能频繁修改。
  • 时间戳用于区分一份数据的不同版本,由系统指定或者用户自己赋值。
  1. 请举个实例来阐述HBase的概念视图和物理视图的不同
    Hbase的概念视图中,一个表可视为一个稀疏、多维的映射关系。如图所示:
    在这里插入图片描述
    Hbase的物理视图在物理存储方面会采用基于列的存储方式,因此上图会被拆违两个小片段,即按列族分别存放:
    在这里插入图片描述
  2. 试述HBase各功能组件及其作用
  • 库函数:链接到每个客户端。
  • 一个Master主服务器:负责管理和维护HBase表的分区信息,负责维护和管理Region服务器列表及Region服务器,处理模式变化。
  • 许多个Region服务器:是Hbase中最核心的模块,负责维护分配给自己的Region,并相应用户的读写请求。
  1. 请阐述HBase的数据分区机制
    Hbase采用分区存储,一个大的表会根据行键的值对行进行分区每个行区间构成一个分区Region,这些Region会被分发到不同的Region服务器上。

  2. HBase中的分区是如何定位的
    通过构建的映射表,即Region标识符查表后可以找到对应的Region服务器标识符,从而可以知道某个Region数据被保存到哪个Region服务器中。

  3. 试述HBase的三层结构中各层次的名称和作用

第一层Zookeeper文件记录了-ROOT-表的位置信息
第二层-ROOT-表记录了.META表的Region位置信息,-ROOT-表只能有一个Region,通过-ROOT-表可以访问.META表中的数据
第三层.META表记录了用户数据表的位置信息,.META表可以有多个访问.META表中的数据
  1. 请阐述在HBase的三层结构下,客户端是如何访问到数据的
    首先访问Zookeeper,获取-ROOT-表的位置信息,然后访问-ROOT-表,得到.META.表的信息,接着访问.META.表,找到所需的Region具体位于哪个Region服务器,最后才会到该Region服务器读取数据。

  2. 试述HBase系统基本架构以及每个组成部分的作用

  • 客户端:包含访问Hbase的接口,同时在缓存中维护已经访问过的Region位置信息,用来加快后续数据访问过程。
  • Zookeeper服务器:帮助维护当前的集群中机器的服务状态,帮助选出一个“总管”,即保证在任何时刻总有唯一一个Master在运行
  • Master:
    • 主服务器Master主要负责表和Region的管理工作
    • 管理用户对表的增删改查操作;
    • 实现Region服务器之间的负载平衡;
    • 负责重新调整Region的分布;
    • 对发生故障失效的Region服务器上的Region数据进行迁移。
  • Region服务器:负责维护分配给自己的Region,响应用户的读写请求。
  1. 请阐述Region服务器向HDFS文件系统中读写数据的基本原理
  • 用户写入数据时,会被分配到相应的Region服务器去执行操作。用户数据首先被写入到MemStore和HLog中,当写操作写入HLog之后,commit()调用才会将其返回给客户端。
  • 当用户读取数据时,Region服务器会首先访问MemStore缓存,如果数据不在缓存中,才会到磁盘上面的StoreFile中去寻找。
  1. 试述Store的工作原理
  • Store是Region服务器的核心,每个Store对应表中一个列族的存储,每个Store包含一个MemStore缓存和若干个StoreFile文件。
  • MemStore是排序的内缓冲区,当用户写入数据时,系统会先将数据放入到MemStore缓存,当Memstore缓存满时,会被刷新到磁盘中的一个MemFile文件中;
  • MemFile文件数量过多时会触发合并文件操作,当MemFile单个文件大小过大时,会触发文件分裂操作。
  1. 试述HLog的工作原理
  • HBase系统为每个Region服务器配置了一个HLog文件,用户更新数据必须首先被计入日志后才能写入MemStore缓存,并且直到MemStore缓存内容对应的日志已经被写入磁盘之后,该缓存内容才会被刷新写入磁盘。
  1. 在HBase中,每个服务器维护一个HLog,而不是为每个region单独维护一个HLog。请说明这种做法的优缺点
  • 优点:当有多个Region对象的更新操作发生的日志修改时,只需要不断把日志记录追加到单个日志文件中,而不需要同时打开、写入到多个日志文件中,可以减少磁盘寻址次数,提高对表的写操作性能。
  • 缺点:如果一个Region服务器发生故障,为了恢复其上的Region对象,需要将Region服务器上的HLog文件按照所属的Region对象进行拆分,然后分发到其他的Region服务器上执行恢复操作。
  1. 当一台Region服务器意外终止时,Master如何发现这种意外终止情况的?为了回顾这台发生意外的Region服务器上的Region,Master应该做出哪些处理(包括如何使用HLog进行恢复)

Zookeeper会通知Master。

  • Master首先会处理该服务器上遗留的HLog文件,系统会根据每条日志记录所属的Region对象对HLog数据进行拆分,放到对应的Region对象的目录下;
  • 再将失效的Region重新分配到可用的Region服务器中,并将与该Region对象相关的日志记录也发送给相应的Region服务器。
  • Region服务器领取到分配给自己的Region对象以及对应的HLog日志记录后,会重新做一次日志中的操作,把日志中记录的数据写入MemStore缓存,然后刷新到磁盘的MemFile文件中,完成数据恢复。

19 . Hbase常用命令

查看所有表:
list
创建表:

命令格式: create ‘表名称’, ‘列族名称 1’,‘列族名称 2’,‘列名称 N’

# 创建一张名为Student的表,包含基本信息(baseInfo)、学校信息(schoolInfo)两个列族
create 'Student','baseInfo','schoolInfo'
查看表的基本信息:

命令格式:desc ‘表名’

describe 'Student'
表的启用/禁用:

enable 和 disable 可以启用/禁用这个表,is_enabled 和 is_disabled 来检查表是否被禁用

# 禁用表
disable 'Student'
# 检查表是否被禁用
is_disabled 'Student'
# 启用表
enable 'Student'
# 检查表是否被启用
is_enabled 'Student'
删除表
# 删除表前需要先禁用表
disable 'Student'
# 删除表
drop 'Student'
添加列族

命令格式: alter ‘表名’, ‘列族名’

alter 'Student', 'teacherInfo'
删除列族

命令格式:alter ‘表名’, {NAME => ‘列族名’, METHOD => ‘delete’}

alter 'Student', {NAME => 'teacherInfo', METHOD => 'delete'}
插入数据

命令格式:put ‘表名’, ‘行键’,‘列族:列’,‘值’

注意:如果新增数据的行键值、列族名、列名与原有数据完全相同,则相当于更新操作

put 'Student', 'rowkey1','baseInfo:name','tom'
put 'Student', 'rowkey1','baseInfo:birthday','1990-01-09'

hbase 中访问数据有两种基本的方式:

  • 按指定 rowkey 获取数据:get 方法;
  • 按指定条件获取数据:scan 方法。
Get查询
# 获取指定行中所有列的数据信息
get 'Student','rowkey3'
# 获取指定行中指定列族下所有列的数据信息
get 'Student','rowkey3','baseInfo'
# 获取指定行中指定列的数据信息
get 'Student','rowkey3','baseInfo:name'
Scan查询
scan 'Student'
scan 'Student', {COLUMN=>'baseInfo'}
# 查询指定列的数据
scan 'Student', {COLUMNS=> 'baseInfo:birthday'}

#条件查询
scan 'Student', {COLUMNS=> 'baseInfo:name',STARTROW => 'rowkey2',STOPROW => 'wrowkey4',LIMIT=>2, VERSIONS=>3}
条件过滤

Filter 可以设定一系列条件来进行过滤

#查询值等于24的所有数据
scan 'Student', FILTER=>"ValueFilter(=,'binary:24')"

#值包含 yale 的所有数据:
scan 'Student', FILTER=>"ValueFilter(=,'substring:yale')"

# 列名中的前缀为birth且列值中包含1998的数据
scan 'Student', FILTER=>"ColumnPrefixFilter('birth') AND ValueFilter ValueFilter(=,'substring:1998')"

第五章 NoSQL数据库

  1. 如何准确理解NoSQL的含义
    NoSQL数据库是一种不同于关系数据库的数据库管理系统设计方式,是对非关系数据库的统称,它所采用的数据模型并非传统的关系数据库的关系模型,而是类似键/值、列族、文档、图等非关系模型。

  2. 试述关系数据库在哪些方面无法满足Web2.0应用的需求
    无法满足海量数据的管理需求、无法满足数据高并发的需求、无法满足高可扩展性和高可用性的需求。

  3. 为什么说关系数据库的一些关键特性在Web2.0时代成为“鸡肋”
    Web2.0网站通常不要求严格的数据库事务、严格的读写实时性、不包含大量复杂的SQL查询。

  4. 请比较关系数据库和NoSQL数据库的优缺点
    项目 关系型数据库

  • SQL优点 :以完善的关系代数理论作为基础,有严格的标准,支持事务ACID四性,借助索引机制可以实现高效的查询,技术成熟,有专业公司的技术支持
  • Nosql优点 :可以支持超大规模数据存储,灵活的数据模型可以很好支持Web2.0应用,具有强大的横向扩展能力
  • SQL缺点 :可扩展性较差,无法较好地支持海量数据存储;数据模型过于死板,无法较好支持Web2.0应用;
  • Nosql缺点:事务机制影响了系统的整体性能 缺乏数学理论基础,复杂查询性能不高,一般不能实现事务强一致性、汉南实现数据完整性,技术尚不成熟,缺乏专业团队的技术支持,维护较困难
  1. 试述NoSQL数据库的四大类型
  • 键值数据库:使用一个哈希表,表中有一个特定的Key和一个指针指向特定的Value,Key可以用来定位Value,即存储和检索具体的Value。
  • 列族数据库:采用列族数据模型,数据库由多行构成,每行数据包括多个列族,不同行可以拥有不同数量的列族,属于同一列族的数据会被存放在一起。
  • 文档数据库:文档作为最小单位,文档以某种标准化格式封装并对数据进行加密。
  • 图数据库:使用图作为数据模型来存储数据。
  1. 试述CAP理论的具体含义
    C(Consistency):一致性,多点分布环境中,多点的数据是一致的。
    A(Availability):可用性,指能够快速获取数据,可以在确定的时间内返回操作结果。
    P(Tolerance of Network Partition):分区容忍性,指出现网络分区的情况时,分离的系统也能正常运行。

  2. 请举例说明不同产品在设计时是如何运用CAP理论的
    CA:放弃分区容忍性,即影响系统的可扩展性,传统的关系数据库都采用了这种设计原则;
    CP:放弃可用性,当出现网络分区的时候,受影响的服务需要等待数据一致,即在等待期间无法对外提供服务, Neo4J、BigTable等NoSQL数据库采用;
    AP:放弃一致性,允许系统返回会不一致的数据,在Web2.0应用中是可行的。

  3. 试述数据库的ACID四性的含义
    原子性、一致性、隔离性、持久性。

  4. 试述BASE的具体含义

  • 基本可用(Basically available):一个分布式系统的一部分发生问题变得不可用时,其他部分仍然可以正常使用,也就是允许分区失败的情形出现。
  • 软状态(Soft-state):状态可以有一段时间不同步,具有一定的滞后性。
  • 最终一致性(Eventual consistency):允许后续的访问操作可以暂时读不到更新后的数据,但是经过一段时间后,必须读到更新后的数据。
  1. 请解释软状态、无状态、硬状态的具体含义
  • 软状态:与硬状态相对,状态可以有一段时间不同步,具有一定的滞后性;
  • 无状态:没有记忆,即进行了任何操作都不会保存修改;
  • 硬状态:保持数据一致性,即保证数据一直是正确的。
  1. 什么是最终一致性
    经过一段时间后能够访问到最新的数据。

  2. 试述不一致性窗口的含义
    从OP操作完成到后续访问可以读取到OP写入的最新值,这之间的时间间隔称为不一致性窗口,这个窗口的大小依赖于交互延迟、系统负载和副本个数等因素。

  3. 最终一致性根据更新后各进程访问到数据的时间和方式的不同,又可以分为哪些不同类型的一致性
    因果一致性、读己之所写一致性、会话一致性、单调读一致性、单调写一致性。

  4. 什么是NewSQL数据库
    NewSQL是对各种新的可扩展、高性能数据库的简称,这类数据库不仅具有NoSQL对海量数据的存储能力,还保持了传统数据库支持ACID和SQL等特性;即都支持关系数据模型,都使用SQL作为其主要的接口。

  5. 试述NewSQL数据库与传统的关系数据库以及NoSQL数据库的区别
    对比NoSQL数据库,NewSQL数据库支持支持关系数据模型;相比传统关系数据库,NewSQL数据库具有明显的性能优势,并且具有对海量数据的存储能力。

第六章 云数据库

试述云数据库的概念

  • 云数据库是部署和虚拟化在云计算环境中的数据库。云数据库是在云计算的大背景下发展起来的一种新兴的共享基础架构的方法,具有高可扩展性、高可用性、采用多租形式和支持资源有效分发等特点。

与传统的软件使使用方式相比,云计算这种模式具有哪些明显的优势

  • 开发商可以直接购买和使用云计算厂商的软件服务,无需自己维护、购买硬件设备和场地,同时云计算厂商提供的IT资源近乎无限且具有高扩展性。

云数据库有哪些特性

  • 动态可扩展、高可用性、较低的使用代价、易用性、高性能、免维护、安全。

试述云数据库的影响

  • 云数据库可以很好满足不同企业的个性化存储需求;1)满足大企业的海量数据存储需求;2)满足中小企业的低成本数据存储需求;3)满足企业动态变化的数据存储需求。

举例说明云数据库厂商及其代表性的产品

  • 1) 传统的数据库厂商
    2) 涉足数据库市场的云供应商
    3) 新兴厂商。

试述Microsoft SQL Azure的体系结构

  • 其体系结构中包含了一个虚拟机簇,根据工作负载的变化,动态增加或减少虚拟机的数量;每台虚拟机安装了AQL Server管理系统;并同时安装了SQL Azure Fabric和SQL Azure管理服务,负责数据库的数据复写工作;不同虚拟机之间的SQL Azure Fabric和管理服务之间会彼此交换监控信息,以保证整体服务的可监控性。

试述UMP系统的功能

  • 对用户透明的容灾、读写分离、分库分表、资源管理、资源调度、资源隔离和数据安全。

试述UMP系统的组件及其具体作用

  • Controller服务器:向UMP集群提供各种管理服务,实现集群成员管理、元数据存储、MySQL实例管理、故障恢复、备份、迁移、扩容等功能。
    Web控制台:向用户提供系统管理界面。
    Proxy服务器:向用户提供访问MySQL数据库的服务;除了数据路由的基本功能外,Proxy服务器中还实现了屏蔽MySQL实例故障、读写分离、分库分表、资源隔离、记录用户访问日志等。
    Agent服务器:管理每台物理机上的MySQL实例,执行主从切换、创建、删除、备份、迁移等操作,同时还负责收集和分析MySQL进程的统计信息、慢查询日志和bin-log。
    日志分析服务器:存储和分析Proxy服务器传入的用户访问日志,并支持实时查询一段时间内的慢日志和统计报表。
    信息统计服务器:定期将采集到的用户的连接数、QPS数值以及MySQL实例的进程状态用RRDtool进行统计。
    愚公系统:是一个全量复制结合bin-log分析进行增量复制的工具,可以实现在不停机的情况下动态扩容、缩容和迁移。

试述UMP系统实现主从备份的方法

  • UMP系统会为用户创建两个MySQL实例,一个是主库,一个是从库,且这两个MySQL实例之间相互把对方设置为备份机,任何一个MySQL实例上面发生的更新都会复制到对方。一旦主机宕机,Controller服务器会启动主从切换,修改映射关系;宕机后的主库在恢复处理后会再次上线,并从从库中复制更新,直到更新到完全一致状态的时候,Controller服务器会再次发起主从切换操作。

试述UMP系统读写分离的实现方法

  • 写操作会被直接发送到主库;读操作会被均衡发送到主库和从库上执行。为了避免从库未读到最新的数据,会在用户每次写操作后开启一个计时器,在一定时间内读操作会全部被强行分发到主库中。

UMP系统采用哪两种方法实现资源隔离

试述UMP系统中的3种规格用户

  • 小规模用户:多个用户共享一个MySQL实例;
    中等规模用户:每个用户独占一个MySQL实例,用户可以根据自己的需求来调整内存空间和磁盘空间;
    需要分库分表的用户:占有多个MySQL实例,这些实例既可以共存在一台物理机上,也可以每个实例独占一台物理机。

UMP系统是如何保障数据安全的

  • 设计了多种机制来保证数据安全性。
    1) SSL数据库连接:在传输层对网络连接进行加密;
    2) 数据访问IP白名单:把允许访问云数据库的IP地址放入“白名单”,其他IP地址的访问都会被拒绝;
    3) 记录用户操作日志:通过检查用户操作记录,可以发现隐藏的安全漏洞;
    4) SQL拦截:Proxy服务器可以根据要求拦截多种类型的SQL语句。

简述阿里云RDS的主要优势

  • 用户可以通过Web或API的方式,在几分钟内开通完全兼备MySQL或SQLServer的数据库实例,并有专业数据库管理团队维护和提供管理功能。即具有专业、高可靠、高性能、灵活应用等优点,能够帮助用户解决费时费力的数据库管理任务。

简述RDS中实例与数据库的概念

  • RDS实例是用户购买RDS服务的基本单位,在实例中可以创建多个数据库,可以使用常见的数据库客户端连接、管理和使用数据库;可以通过RDS管理控制台或OPEN API来创建、修改和删除数据库。各实例之间相互独立、资源隔离;但是,同一实例中的不同数据库之间是资源共享的。
    数据库是用户在一个实例下创建的逻辑单元,一个实例可以创建多个数据库,在实例内数据库命名唯一,所有数据库都会共享该实例下的资源。

第七章 MapReduce

定义:

MapReduce是一种并行编程模型,用于大规模数据集上的并行运算,它将复杂的、运行在大规模集群上的并行计算过程抽象到两个函数:Map和Reduce。

  1. 试述MapReduce和Hadoop的关系
  • 谷歌公司首先提出了MapReduce,Hadoop MapReduce是它的开源实现。
  1. 试述适合用MapReduce来处理的任务或者数据集需要满足怎样的需求
  • 待处理的数据集可以分解成许多小的数据集,而且每个小数据集可以完全并行地进行处理。
    在这里插入图片描述
    在这里插入图片描述
  1. 试述JobTracker和TaskTracker的功能
  • JobTracker在主机上运行,监测每个Map任务结束后,通知相关的Reduce任务来领取数据;即负责作业和任务的调度,监控他们的执行,并重新调度已经失败的任务。
  • TaskTracker运行在从节点上,执行由JobTracker指派的任务。

在这里插入图片描述

  1. TaskTracker出现故障会有什么影响,该故障是如何处理的?
  • TaskTracker出现故障会停止或者很少向JobTracker发送心跳;此时JobTracker会注意到该情况,从而将该TaskTracker从等待任务调度的TaskTracker池中移除,JobTracker会安排此TaskTracker上一个成功运行的Map任务返回。并将该任务重新指派出去。
  1. 试述Map函数和Reduce函数的输入、输出以及处理过程
  • Map函数的输入为分布式文件系统的文件块,这些文件块的格式是任意的。Map函数将输入的元素转换成<key, value>形式的键值对,键和值的类型也是任意的。
  • Reduce函数的输入是Map函数输出的结果即中间结果,其任务是将输入的一系列具有相同键的键值对以某种方式组合起来,输出处理后的键值对,输出结果会合并成一个文件。
  1. 试述MapReduce的工作流程(需包括提交任务、Map、Shuffle、Reduce的过程)
    1) MapReduce框架使用InputFormat模块做Map前的预处理,然后将输入文件切分为逻辑上的多个InputSplit
    2) 通过RecordReader根据InputSplit中的信息来处理InputSplit中的具体记录,加载数据并转换为适合Map任务读取的键值对,输入给Map任务。
    3) Map任务会根据用户自定义的映射规则,输出一系列的<key, value>作为中间结果。
    4) Shuffle:对Map的输出进行一定的分区、排序、合并、归并等操作,得到<key,value-list>形式的中间结果,再交给对应的Reduce进行处理。
    5) Reduce以一系列<key, value-list>中间结果作为输入,执行用户定义的逻辑,输出结果给OutputFormat模块。
    6) OutputFormat模块会验证输出目录是否存在以及输出结果类型是否符合配置文件中的配置类型,如果都满足,就输出Reduce的结果到分布式文件系统。

  2. Shuffle过程是MapReduce过程的核心,也被称为奇迹发生的地方,试分析Shuffle过程的作用
    将Map输出结果进行分区、排序、合并等处理并交给Reduce的过程,减少磁盘I/O的读写次数,并减小从Map到Reduce之间的数据传递量。

  3. 分别描述Map端和Reduce端的Shuffle过程(包括Spilt、Sort、Merge、Fetch的过程)

  • Map端:输入数据和执行map任务、写入缓存、溢写(分区、排序和合并)、文件归并
    Map的输出结果首先被写入缓存,当缓存满时就启动溢写操作,把缓存中的数据写入磁盘文件,并清空缓存。当启动溢写操作时,首先需要把缓存中的数据进行分区,然后对每个分区的数据进行排序和合并,之后再写入磁盘文件。每次溢写操作会生成一个新的磁盘文件,随着Map任务的执行,磁盘中就会生成多个溢写文件。在Map任务全部结束之前,这些溢写文件会被归并成一个大的磁盘文件,然后通知相应的Reduce任务来领取自己处理的数据。
  • Reduce端:领取数据、归并数据、把数据输入给Reduce任务
    Reduce任务从Map端的不同Map机器领会属于自己处理的那部分数据,然后对数据进行归并后交给Reduce处理。
  1. 试说明一个MapReduce程序在运行期间所启动的Map任务数量和Reduce任务数量各是由什么因素决定的?
  • Map任务数量:输入文件数目、输入文件的大小、配置参数。
  • Reduce任务数量:配置参数。
  1. 是否所有的MapReduce程序都需要经过Map和Reduce两个过程?如果不是,请举例说明。
  • 不是。例如对于关系的选择运算,只需要Map过程就能实现。对于关系R中的每个元组t,检测是否是满足条件的所需元组,如果满足条件,则输出键值对<t, t>,也就是说,键和值都是t。这时的Reduce函数就只是一个恒等式,对输入不作任何变换就直接输出
  1. 试分析为何采用Combiner可以减少数据传输量。是否所有的MapReduce程序都可以采用Combiner?
  • 使用Combiner后,可以将具有相同key的<key, value>的value加起来,这样可以减少键值对的数量从而减少数据传输量。但是不是所有的都可以使用Combiner,因为Combiner的输出是Reduce程序的输入,Combiner决不能改变Reduce任务的最终计算结果。一般而言,累加、最大值等场景可以使用合并操作。
  1. MapReduce程序的输入文件、输出文件都存储在HDFS中,而在Map任务完成时的结果则存储在本地磁盘中,试分析中间结果存储在本地磁盘而不是HDFS上有何优缺点?
  • 优点:更符合移动计算比移动数据经济原则,且Map输出结果仅仅是中间结果,在Reduce任务完成后,中间结果会被删除, HDFS还会对该部分数据做复制备份,造成资源浪费。
  1. 早期版本的HDFS,其默认块大小为64MB,而较新的版本默认为128MB,采用较大的块有什么影响和优缺点?
  • 采用较大的块说明分片的数量较小,那么map任务也较少,导致任务的并行化程度不高,不能充分利用集群资源,拖慢作业运行速度
  • 采用较小的块,说明map任务较多,而创建多个map任务进程需要耗费大量时间。
  • 块的大小设置主要从以下考虑:减少磁盘寻址时间、减少Namenode内存消耗、Nap崩溃问题、监管时间问题、问题分解问题、约束Map输出。
  1. 在基于MapReduce的单词统计中,MapReduce是如何保证相同的单词数据会划分同一个Reducer上进行处理以保证结果的正确性?
  • 通过将相同的单词数据作为key值,相同单词出现的次数作为value值,由于Reduce任务是按key值 进行划分的,因此保证了相同的单词数据会划分到同一个Reducer上进行处理。
  1. 利用MapReduce的分布式优点,试设计一个基于MapReduce的排序算法,假设数据均位于[1,100],Reducer的数量为4,正序输出或逆序输出结果均可。试简要描述该过程(可使用Partition、Combine过程)
  • 在Map过程中,将数据等量分给n个Map过程进行快速排序,使用Combiner进行一定归并后输出;然后使用4个Reducer分别处理区间为[1,25][25,50],[50,75],[75,100]的数据,最后归并成一个大文本数据。
  1. 试设计一个基于MapReduce的算法,求出数据集中的最大值。假设Reducer大于1,试简要描述该算法(可使用Partition、Combine过程)。
  • 在Map过程中每一个任务通过Partition和Combine过程后只向Reducer传递自己这一部分的最大值,最后Reducer归并得到最大值即可。
  1. 试述实现矩阵向量乘法与矩阵乘法采用不同的MapReduce策略的原因.
  • 由于矩阵向量乘法最终得到的只是一个n维向量,不需要加入Mij和Njk对应元素的乘积之和,所以采用了不同的MapReduce策略。

MR工作实例

在这里插入图片描述
在这里插入图片描述

Shuffle

在这里插入图片描述

MR&Spark WordCount代码

MR:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

spark:

Scala代码头部:
在这里插入图片描述

在这里插入图片描述

  • 找出包含指定单词的那一行

在这里插入图片描述

  • 找出单词最多的那一行的数目
    在这里插入图片描述

Hadoop

  1. 试述在Hadoop推出之后其优化与发展主要体现在哪两个方面
  • 第一个方面是针对MapReduce和HDFS的许多方面做了有针对性的改进提升;
  • 另一方面是在Hadoop生态系统中融入了更多的新成员,使得Hadoop功能更加完善。
  1. 试述HDFS 1.0中只包含一个名称节点会带来哪些问题
  • 单点故障问题,即一旦集群中唯一一个名称节点发生故障,会导致整个集群变得不可用;
  • 另外,第二名称节点无法提供热备份功能,即名称节点发生故障的时候,系统无法实时切换到第二名称节点立即对外提供服务,仍然需要进行停机恢复。
  1. 请描述HDFS HA架构构成组件及其具体功能
    HA架构中,一般设置了两个名称节点。一个为活跃的名称节点,负责对外处理所有客户端的请求;一个为待命的名称节点,作为备用节点,保存了足够多的系统元数据,当名称节点出现故障时提供快速恢复能力。

  2. 请阐述为什么需要HDFS联邦,即它能够解决什么问题?
    HDFS 1.0中存在可扩展性(名称节点进行纵向扩展时会带来过长系统时间等问题)、系统性能(单个名称节点内存等资源有限)、隔离性三个方面问题。

  • HDFS联邦通过设计多个相互独立的名称节点以联邦关系连接在一起,实现HDFS命名系统的水平扩展;
  • 同时,通过多个节点还能同时对外提供服务,为用户提高更高的吞吐量;
  • 另外,用户可以根据需求将不同业务数据交给不同的名称节点管理,实现了不同业务之间良好的隔离性。
  1. 请描述HDFS中“块池”的概念,并分析为什么HDFS联邦中的一个名称节点失效,也不会影响到与它相关的数据节点继续为其他名称节点提供服务
    块池.
  • 每个命名空间管理属于自己的一组块,这些属于同一个命名空间的块构成一个块池。每个数据节点为多个块池提供块的存储,即块池中的各个块实际上是存储在各个不同的数据节点中的。
  1. 请描述YARN架构中各组件的功能
  • ResourceManager:处理客户端请求;启动/监控ApplicationMaster;监控NodeManager;资源分配与调度。
  • ApplicationMaster:为应用程序申请资源,并分配给内部任务;任务调度、监控与容错。
  • NodeManager:单个节点上的资源管理,处理来自ResourceManager的命令;处理来自ApplicationMaster的命令。
    在这里插入图片描述
    在这里插入图片描述
  1. 请描述在YARN框架中执行一个MapReduce程序时,从提交到完成需要经历的具体步骤
    1) 用户编写客户端应用程序,向YARN提交应用程序;
    2) ResourceManager接到客户端应用程序请求后,其调度器为应用程序分配一个容器;同时,其应用程序管理器会与该容器的NodeManager通信,为该应用程序在容器中启动一个ApplicationMaster
    3) ApplicationMaster向ResourceManager注册,以便用户直接查看应用程序的运行状态;
    4) ApplicaitonMaster采用轮询的方式通过RPC协议ResourceMaster申请资源;
    5) ResourceManager以容器的形式分配资源,一旦ApplicationMaster申请到资源之后,就会与该容器坐在的NodeManager进行通信,要求它启动任务;
    6) 当容器启动任务时,Application会设置好运行环境(包括环境变量、JAR包、二进制程序等等),然后将任务启动命令写到一个脚本中,最后通过在容器中运行该脚本来启动任务;
    7) 各个任务通过PRC协议向AppicationMaster汇报自己的状态和进度,让ApplicationMaster可以随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务;
    8) 应用程序完成后,ApplicationMaster向ResourceManager的应用程序管理器注销并关闭自己;如果因故失败,应用程序管理器会检测到失败的情形,将其重新启动直到所有的任务执行完毕。

  2. 请对YARN和MapReduce 1.0框架进行优劣势对比分析
    1) YARN大大减少了承担中心服务功能的ResourceManager的资源消耗;
    2) YARN只是一个纯粹的资源调度管理框架,可以在上面运行不同类型的计算框架;
    3) YARN中的资源管理比MapReduce 1.0更加高效。

  3. 请分别描述Pig、Tez和Kafka的功能

  • Pig提供了类似SQL语言的Pig Latin语言,允许用户通过编写简单的脚本来实现复杂的数据分析将脚本自动转换成MpReduce作业在Hadoop集群上运行,并且对生成的MapReduce程序进行自动优化。即Pig可以加载数据、表达转换数据以及存储最终结果,但Pig只面向批处理,不适用于所有的数据分析任务。
  • Tez是Apache开源的支持DAG作业的计算框架,其核心思想是将Map和Reduce两个操作进行进一步拆分,这些元操作可以进行任意自由组合产生新的操作;提供了程序运行的整体处理逻辑,去除工作流中多余的Map阶段,减少不必要的操作,提升数据处理的性能。
  • Kafka是LinkeIn公司开发的一种高吞吐量的分布式发布订阅消息系统,用户通过Kafka系统可以发布大量的消息,同时也能实时订阅消费消息。使用Kafka作为数据交换枢纽,可以实现和Hadoop各个组件之间的不同类型数据的实时高效交换,较好满足各种企业的应用需求。同时可以很好地解决不同系统之间的数据生产/消费速率不同的问题。

第九章 Spark

  1. Spark是基于内存计算的大数据计算平台,试述Spark的主要特点
    1) 运行速度快; 2)容易使用; 3)通用性; 4)运行模式多样。
  • spark 架构
    在这里插入图片描述
    在这里插入图片描述
  1. Spark的出现使为了解决Hadoop MapReduce的不足,试列举Hadoop MapReduce的几个缺陷,并说明Spark具有哪些优点
  • Hadoop的缺点:1)表达能力有限;2)磁盘I/O开销大;3)延迟高。
  • Spark的优点:
    1) 除了Map和Reduce操作,提供了多种数据集操作类型,编程模型比Reduce更加灵活。
    2) 提供了内存计算,中间结果直接存放在内存中,带来了跟高的迭代运算效率。
    3) 基于DAG的任务调度执行机制,优于MapReduce的迭代执行机制。
  1. 美国加州大学伯克利分校提出的数据分析的软件站BDAS认为目前的大数据处理可以分为哪三个类型?
    1)复杂的批量数据处理;
    2)基于历史数据的交互式查询;
    3)基于实时数据流的数据处理。

  2. Spark打造出结构一体化、功能多样化的大数据生态系统,试述Spark的生态系统

  • Spark的设计遵循“一个软件栈满足不同应用场景”的理念,既能够提供内存计算框架,也可以支持SQL即时查询、实时流式计算、机器学习和图计算等。Spark可以部署在资源管理器YARN之上,提供一站式的大数据解决方案。
  1. 从Hadoop + Storm架构转向Spark架构可带来哪些好处?
    1) 实现一键式安装和配置、线程级别的任务监控和告警;
    2) 降低硬件集群、软件维护、任务监控和应用开发的难度;
    3) 便于作成统一的硬件、计算平台资源池。

  2. 试述Spark on YARN的概念

    • 即Spark可以运行在YARN之上,与Hadoop进行统一部署,即Spark on YARN,其架构如图所示,其中资源管理和调度依赖YARN,分布式存储则依赖HDFS。

在这里插入图片描述

  1. 试述如下Spark的几个主要概念:RDD、DAG、阶段、分区、窄依赖、宽依赖
  • RDD:弹性分布式数据集(Resilient Distributed Dataset),是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型
  • DAG:有向无环图(Directed Acyclic Graph),反映RDD之间的依赖关系。
  • 阶段:是作业的基本调度单位,一个作业会分为多个阶段,一个阶段会分为多个任务。
  • 分区:一个RDD就是一个分布式对象集合,本质上只是一个只读的分区记录集合,每个RDD可以分成多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以保存到集群中的不同节点,从而可以在集群中的不同节点上进行并行计算。
  • 窄依赖:一个父RDD对应一个子RDD的分区,或者是多对一;
  • 宽依赖:一个父RDD对应多个子RDD的分区,多对多,有shuffle过程。
  1. Spark对RDD的操作主要分为行动和转换两种类型,两种操作的区别是什么?
  • 行动Action:用于执行计算并指定输出的形式,接受RDD但是返回非RDD,运算
  • 转换Transfor:用于指定RDD之间的相互依赖关系,接受RDD并返回RDD,只记录依赖关系不进行运算
    在这里插入图片描述
    依赖关系:称之为血缘关系,即DAG拓扑排序的结果

Spark作业

在这里插入图片描述

  • Spark优势
    在这里插入图片描述
    在这里插入图片描述

  • Spark缺陷
    在这里插入图片描述

Spark 组件

在这里插入图片描述

宽窄依赖

  • 窄依赖
    在这里插入图片描述
  • 宽依赖
    在这里插入图片描述

Spark概念关系

在这里插入图片描述
在这里插入图片描述

Spark的模式

  • Local模式
    在这里插入图片描述
  • Stanalone
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

Spark On Yarn

在这里插入图片描述

DataFrame 和 RDD 区别

Spark RDD
RDD是一种弹性分布式数据集,是一种只读分区数据。它是spark的基础数据结构,具有内存计算能力、数据容错性以及数据不可修改特性。

Spark Dataframe
Dataframe也是一种不可修改的分布式数据集合,它可以按列查询数据,类似于关系数据库里面的表结构。可以对数据指定数据模式(schema)。

区别:

Spark框架本身不了解 Person类的内部结构。而DataFrame却提供了详细的结构信息,使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。DataFrame多了数据的结构信息,即schema。


Storm流计算

  1. 试述流数据的概念
  • 流数据是指在时间分布和数量上无限的一系列动态数据集合体;数据记录是流数据的最小组成单元。
  1. 试述流数据的特点
    1) 数据快速持续到达,潜在大小也许是无穷无尽的。
    2) 数据来源众多,格式复杂。
    3) 数据量大,但是不是十分关注存储。
    4) 注重数据的整体价值,不过分关注个体数据。
    5) 数据顺序颠倒,或者不完整,系统无法控制将要处理的新到达的数据元素的顺序。

  2. 在流计算的概念中,数据的价值与时间具备怎样的关系

  • 数据的价值随时间的流逝而降低。
  1. 试述流计算的需求
    高性能、海量性、实时性;
    分布式、易用性、可靠性。

  2. 试述MapReduce的框架为何不适用于处理流数据?

  • MapReduce框架由于需要进行分解、迭代等流程,在时间延迟方面是无法满足流计算的实时响应要求的。
  1. 将基于MapReduce的批量处理转为小批量处理,每隔一个周期就启动一次MapReduce作业,通过这样的方式来处理流数据是否可行,为什么
    不可行。
    1) 切分成小片段同时增加了任务处理的附加开销,并且需要处理片段之间的依赖关系;
    2) 需要对MapReduce进行改造以支持流式处理,会大大增加MapReduce框架的复杂度,导致系统难以维护和扩展;
    3) 降低了用户程序的可伸缩性,因为用户必须使用MapReduce接口定义流式作业。

  2. 试述流计算的一般处理流程

  • 数据实时采集、数据实时计算、实时查询服务。
  1. 试述流计算流程与传统的数据处理流程之间的主要区别
  • 传统的数据处理需要先采集数据并存储在关系数据库等数据管理系统中,并且需要用户主动发起查询;
  • 流计算是使用实时数据流,经过计算和分析后,实时查询服务可以不断更新结果,并将用户所需要的结果实时推送给用户。
  1. 试述流计算系统与传统的数据处理系统对所采集数据的处理方式有什么不同?
  • 流计算不像传统的数据处理系统,一般在Store部分不进行数据的存储,而是将采集的数据直接发送给流计算平台进行实时计算。
  1. 为什么说Storm流处理框架开发实时应用,其开发成本较低
  • 以往开发人员在开发一个实时应用的时候,除了要关注处理逻辑,还要为实时数据的获取、传输、存储大伤脑筋;在Storm流处理框架下,Storm可以简单、高效、可靠处理流数据,并支持多种编程语言,且能方便地与数据库系统进行整合,从而开发强大的实时应用。
  1. 试述Twitter采用的分层数据处理框架
    Twitter采用了由实时系统和批处理系统组成的分层数据处理架构;
    一方面,由Hadoop和ElephantDB组成了批处理系统;
    另一方面,由Storm和Cassandra组成实时系统。在计算查询时,该数据库会同时查询批处理视图和实时视图,并把它们合并起来得到最终结果。实时系统处理结果最终会由批处理系统来修正。

  2. 试列举几个Storm框架的主要特点
    1) 整合性,可方便地与队列系统和数据库系统进行整合;
    2) 简易的API;
    3) 可扩展性,其并行特性使其可以运行在分布式集群中;
    4) 容错性,可以自动进行故障节点的重启,以及节点故障时任务的重新分配;
    5) 可靠的消息处理,保证每个消息都能完整处理;
    6) 支持多种编程语言;
    7) 快速部署,只需要少量的安装和配置就可以快读进行部署和使用;
    8) 免费、开源。

  3. Storm的主要术语包括Streams、Spouts、Bolts、Topology和Stream Groupings,请分别简要描述这几个术语

  • Streams:是对数据流的抽象描述,即一个无限的Tuple序列。这些Tuple序列会以分布式的方式并行的创建和处理。
  • Spouts:Streams的抽象源头,Spouts会从外部读取流数据并持续发出Tuple。
  • Bolts:抽象的状态转换过程,既可以处理Tuple,也可以将处理后的Tuple作为新的Streams发送给其他的Bolts。对Tuple的处理逻辑都封装在Bolts中,可执行过滤、聚合、查询等操作
  • Topology:Storm将Spouts和Bolts组成的网络抽象成Topology,是Storm中最高层次的抽象概念,可以被提交到Storm集群执行。一个Topology就是一个流转换图,其中的节点是一个Spout或Bolt,边表示Bolt订阅了哪个Stream。
  • Stream Groupings:用于告知Topology如何在两个组件间(如Spout和Bolt之间或者不同的Bolt之间)进行Tuple的传送。

在这里插入图片描述

  1. 试述Tuple的概念
  • Tuple即元组,是元素的有序列表,每一个Tuple就是一个值列表,列表中的每个值都有一个名称,且该值可以是基本类型、字符类型、字节数组等。
  1. 一个Topology由哪些组件组成
  • 处理组件(Spout或Bolt)、组件之间的连接。
  1. 不同的Bolt之间如何传输Tuple
  • 通过序列化、套接字传输、反序列化完成。
  • 通过订阅Tuple的名称来接收相应的数据。
  1. 试列举几种Stream Groupings的方式
    随机分组、按照字段分组、广播发送、全局分组、不分组、直接分组

  2. 试述MapReduce Job和Storm Topology的区别与联系

  • 其运行任务的方式类似:Hadoop上运行的是MapReduce作业,而在Storm上运行的是Topology。
  • 区别是两者的任务大不相同,MapReduce作业最终会完成计算并结束运行,而Topology将持续处理消息(直到人为终止)

在这里插入图片描述

  1. Storm集群中的Master和Worker节点各自运行什么后台进程,这些进程又分别负责什么工作?
  • Master负责运行“Nimbus”的后台程序,负责在集群范围中分发代码、为Worker分配任务和检测故障。
  • Worker负责运行“Supervisor”的后台程序,负责监听分配给它所在机器的工作,即根据Nimbus分配的任务来决定启动或停止Worker进程。
  1. 试述Zookeeper在Storm框架中的作用
  • Zookeeper作为分布式协调组件,负责一个Nimbus和多个Supervisor之间的所有协调工作。
  1. Nimbus进程和Supervisor进程意外终止后,重启时是否能恢复到终止之前的状态,为什么?
  • 可以。这两个进程借助Zookeeper将状态信息存放在了Zookeeper中或本地磁盘中,当Nimbus进程或Supervisor进程终止后,一旦进程重启,他们将恢复之前的状态并继续工作。这种设计使Storm极其稳定。
  1. Nimbus进程和Supervisor进程都是快速失败和无状态的,这样的设计有什么优点?
  • 节点故障时可以进行快速恢复。
  1. 试述Storm框架的工作流程
    1) 客户端提交Topology到Storm集群中;
    2) Nimbus将分配给Supervisor的任务写入Zookeeper;
    3) Supervisor从Zookeeper中获取所分配的任务,并启动Worker进程;
    4) Worker进程执行具体的任务。

  2. 试述Storm框架实现单词统计的一般流程:
    1) 从Spout中发送Stream(每个英文句子为一个Tuple);
    2) 用于分割单词的Bolt将接收的句子分解为独立的单词,将单词作为Tuple的字段名发送出去;
    3) 用于计数的Bolt接收表示单词的Tuple,并对其进行统计;
    4) 输出每个单词以及单词出现的次数。

  3. 试述采用MapReduce框架进行单词统计与采用Storm框架进行单词统计有什么区别?

  • MapReduce框架使用了Map和Reduce的过程,将文本进行分割后,由Map进行各文本段的单词计数再传输到Reduce中计数;而Storm框架使用了Spout和Bolt的抽象,由一个Bolt进行单词分割,另一个Bolt进行计数。
  1. Storm框架中单词统计Topology中定义了两个Bolt,试述两个Bolt各自完成的功能,以及中间结果如何在两个Bolt之间传输?
  • 第一个Bolt用于单词的分割,该Bolt中的任务随机接收Spout发送的句子,并从接受的句子中提取出单词;
  • 第二个Bolt接收第一个Bolt发送的Tuple进行处理,统计分割后的单词出现的次数。
  • Bolt通过订阅Tuple的名称来接收相应的数据,第一个Bolt声明其输出的Stream的名称为‘split’,第二个Bolt声明其订阅的Stream为‘split’。
  1. 在Storm的单词统计实例中,为何需要使用FieldGrouping()方法保证相同单词发送到同一个任务上进行处理?
  • 将具有相同字段值的所有Tuple(即单词相同的Tuple)发送到同一个任务中进行统计,从而保证了统计的准确性。

Zookeeper

特性

  1. 最终一致性
  2. 实时性
  3. 可靠性
  4. 等待无关性
  5. 原子性
  6. 顺序性

工作原理

Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议

Zab协议有两种模式,它们分 别是恢复模式(选主)和广播模式(同步)。
当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和 leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。

每个Server在工作过程中有三种状态:

Looking:当前Server不知道leader是谁,正在搜寻
Leading:当前Server即为选举出来的leader
Following:leader已经选举出来,当前Server与之同步

数据模型

每一个子目录项如NameService都被称作为znode,和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。

节点类型

在这里插入图片描述

  • 8
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值