大数据题
第一章 概述
1.大数据的四个特点是?
Volume数量大,Variety数据类型繁多,Velocity处理速度快,Value价值密度低
2.大数据的思维方式?
- 全面而非抽样
- 效率而非精确
- 相关而非因果
3.大数据的技术?
数据采集与预处理、数据存储与管理、数据处理与分析、数据安全喝隐私保护
4.大数据集的集中计算模式及其能够解决的问题?
大数据计算模式 | 解决问题 |
---|---|
批处理计算 | 针对大规模数据的批量处理 |
流计算 | 针对流数据的实时计算 |
图计算 | 针对大规模图结构数据的处理 |
查询分析计算 | 大规模的存储管理和查询分析,提供实时或准实时的响应 |
第二章 Hadoop
5.Hadoop的核心是?
分布式文件系统HDFS和MapReduce
6.Hive是Hadoop的什么工具?可以干什么?
Hive是Hadoop的数据仓库工具;可以对Hadoop文件中的数据集进行数据整理、特殊查询、分析存储
第三章 HDFS
7.HDFS要实现的目标?
- 兼容廉价的硬件设备(快速检测硬件故障、自动恢复机制)
- 流数据读写(为满足批量数据处理而设计,为提高数据吞吐率,以流式方式访问数据)
- 大数据集(GB、TB级别)
- 简单的文件模型(一次写入、多次读取;文件一旦完成写入,关闭后无法再次写入)
- 强大的跨平台兼容性(HDFS采用Java编写,跨平台性较好)
8.HDFS的局限性?
- 不适合低延迟数据访问(有低延迟要求时,HBase是一个更好的选择)
- 无法高效存储大量小文件(例如小于一个块(Block)的文件)
- 每个文件都回产生元数据信息
- 每当小文件过多时,元数据信息随之增多
- 对名称节点造成压力
- 不支持多用户写入以及任意修改文件(任何时间都只允许一个程序写入某文件;之允许对文件追加,不允许随机写)
9.客户在访问HDFS文件系统中的某个文件时的操作?
当客户端要访问一个文件时,先从名称节点获取组成该文件的位置列表=>其次,获取数据块所在的数据节点的位置=> 最后,由数据节点在本地系统中找到对应的文件,将数据返回给客户端
10.什么是块?
- 块的定义:HDFS把文件拆分成多个块,每个块作为独立的单元进行存储
- 块的设置的意义:降低单位数据的寻址开销(数据块的定位开销、磁盘寻道开销)
- 块的设置不宜过大,原因:MapReduce中的Map任务一次只处理一个块中的数据,块设置过大会导致启动的Map任务太少,降低了作业的并行处理速度。
11.名称节点和数据节点的概念?
名称节点:
- 负责管理分布式文件系统的命名空间
- 保存两个核心的数据结构(FsImage命名空间镜像文件,EditLog修改日志)
- 名称节点记录了每个文件块所在的数据节点的位置信息,但是不持久化存储,因为信息存放在内存中;在系统启动时通过扫描所以数据节点重构这些信息。
数据节点:
数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取。
会根据客户端或者是名称节点的调度来进行数据的存储和检索
像名称节点定期发送自己所存储的块的列表
每个数据节点中的数据会被保存在各自节点的本地Linux文件系统中。
每个数据节点会周期性地向名称节点发送“心跳” 信息,报告自己的状态;没有按时发送”心跳“信息的数据节点被标记为”宕机“,不会再给它分配任何IO请求。
11.第二名称节点
- 完成EditLog与FsImage的合并操作,减小EditLog文件大小,缩短名称节点重启时间。
- 作为名称节点的”检查点“,保存名称节点的元数据信息。
- 该节点一般单独运行在一台机器上。
12.名称节点中的核心FsImage和EditLog的功能?
FsImage用于维护文件系统树以及树中所有文件和文件夹的元数据。
名称节点启动时,将FsImage文件中的内容加载到内存中,再执行EditLog文件中各项操作;启动后,HDFS的更新操作会重写到EditLog文件中,因为FsImage一般很大,所以不选择写入FsImage。
EditLog中记录所有针对文件的创建、删除、重命名等的操作日志。
13.EditLog不断变大的问题?
在名称节点运行期间,HDFS的所有更新操作都是直接写到EditLog中,因此EditLog会逐渐变大;如果EditLog很大,名称节点在启动失败恢复时就会变得非常慢;就会影响到用户的使用。
14.如何解决EditLog不断变大的问题?
采用SecondaryNameNode第二名称节点。(见11)
15.在NameNode宕机的情况下,SecondaryNameNode中的FsImage能否作为可靠的镜像使用?
第二名称节点上合并操作得到的FsImage文件并不包含edits.new的操作(即第二名称节点执行合并操作期间,名称节点文件系统所发生的变化),因此可能丢失部分元数据信息,不能作为最新的备份,无法起到**“热备份”**的作用。
16.什么是热备份?
热备份,是应用还在运行,对数据进行备份。优点是备份时不影响应用的运行,并且当应用出问题的时候,能够快速切换到灾备一体机,保障业务的连续。
第四章 HBase
17.HBase的四个维度?
HBase的四个维度分别为:行键、列族、列限定符和时间戳
18.HBase中的值是以什么类型保存的?
HBase中,每个值都是未经解释的字节数组byte[]
19.HBase是键值数据库,“键”和“值”分别是?
坐标视为键,所对应单元格中数据视为值。
20.在什么情况下使用列式数据库?
当以属性为查询目标时(多用于分析型的应用),行式数据库会浪费内存带宽,此时列式数据库查询效率较高;
而以元组为查询目标时(多用于事务型的应用),行式数据库较好的满足了查询目标,列式数据库则不一定适合。
21.行式数据库?列式数据库?
传统的关系数据库是行式数据库;HBase是列式数据库。
22.HBase的Shell命令?
第五章 NoSql数据库
23.常见的NoSql数据库有哪些?
典型的NoSql数据库通常包括:键值数据库、列族数据库、文档数据库和图数据库。
26.NoSql数据库的三大基石包括?
NoSql的三大基石:CAP、BASE和最终一致性。
Consistency 一致性:任何一个读操作总能读到之前完成的写操作的结果。
Availability 可用性:快速获取数据。
Tolerance of Network Partition 分区容忍性:出现网络分区时,分离系统能正常运行。
Basically Available 基本可用、Soft-state 软状态、Eventual consistency 最终一致性。
27.NoSql与关系数据库的比较?
- 关系数据库:
优势在于:以完善的关系代数理论作为基础;有严格的标准,支持事务ACID四性;借助索引机制可以实现高效的查询;技术成熟,有专业公司的技术支持。
劣势在于:可拓展性较差;无法较好支持海量数据存储;数据模型过于死板、无法较好支持Web2.0应用;事务机制影响了系统的整体性能。
- NoSql数据库:
优势:具有强大的横向扩展能力;可以支持超大规模数据存储;灵活的数据模型可以很好地支持Web2.0应用;支持高并发读写。
劣势:缺乏数学理论基础;一般不能实现事务的强一致性,很难实现数据完整性;复杂查询性能不高;技术尚未成熟,缺乏专业团队的技术支持,维护较困难。
特点:灵活的可扩展性、灵活的数据模型、与云计算 紧密融合
28.NoSql和关系数据库的应用场景?
-
关系数据库应用场景:
电信、银行等领域的关键业务系统,需要保证强事务的一致性
对于需要复杂查询分析型的应用,基于关系数据库的数据仓库产品比NoSql具有更好的性能。
-
NoSql数据库的应用场景:
Web2.0领域的应用,数据量大、并发读写要求高;互联网企业、传统企业的非关键业务(数据分析)
29.键值数据库和列族数据库的异同?
键值数据库使用哈希表,有特定的Key和指针指向特定的Value。Key用来定位Value,Value用来存储任意类型的数据。缺点是无法存储结构化数据,条件查询效率低。
列族数据库采用列族数据模型,每行数据包含多个列族,不同行可有不同数量的列族。每行数据通过行键定位,与行键对应的是一个列族,这可以被视为一个键值数控。缺点是功能较少,且大都不支持强事务一致性。
30.CAP理论
一个分布式系统不可能同时满足一致性、可用性和分区容忍性;不可能同时满足“准确、及时、可靠”;最多只能同时满足其中两个。
第七章 MapReduce
MapReduce:相对于传统并行计算框架来讲,它采用非共享式存储,容错性好,以普通的PC机作为硬件,大大节约成本,编程简单,适用于批处理、非实时、数据密集型数据。
31.什么是Shuffle(洗牌)?
Shuffle是指对Map输出结果分区、排序、合并等处理并交给Reduce的过程。
Map端的Shuffle过程:
- 输入数据和执行Map任务
- 写入缓存
- 溢写(分区、排序和合并)
- 文件归并
Reduce端的Shuffle过程:
- 程序部署
- 分配Map任务和Reduce任务
- 读数据
- 本地写数据
- 远程读数据
- 写数据
- 返回结果
32.WordCount具体执行过程?
假设执行单词统计任务的MapReduce作业中,有3个执行Map任务的Worker和1个执行Reduce任务的Worker。一个文档中包含3行内容,每行分配一个Map任务来处理。Map操作的输入是<key,value>形式,其中,key是文档中某行的行号,value是该行的内容。Map操作会将输入文档中的每一个单词。以<key,value>的形式作为中间结果进行输出。
然后在,Map端的Shuffle过程中,如果用户没有定义Combiner函数,则Shuffle过程会把具有相同key的键值对归并(Merge)成一个键值对。对于若干个具有相同key的键值对,会被归并成一个新的键值对<key,<value1,value2>>。
在实际的应用中,每个输入文件都会被Map函数解析,会生成大量的中间结果,会大大增加网络传输开销。所以一般MapReduce会支持用户提供Combiner函数来对中间结果进行合并再发送给Reduce任务,大大减少网络传输的数据量。
第八章Hadoop再探讨
33.MapReduce 1.0 的缺陷?
- 存在单点故障
- JobTracker “大包大揽”导致任务过重
- 容易出现内存溢出
- 资源划分不合理
34.YARN的三大组件?
- ResourceManager 资源管理
- ApplicationMaster 任务调度、任务监控
- NodeManager 单个节点上的资源管理,任务管理
YARN 是MapReduce1.0中的资源管理调度功能单独分离出来的。
组件 功能 ResourceManager 处理客户的请求
启动/监控ApplicationMaster
监控NodeManager
资源分配与调度ApplicationMaster 为应用程序申请资源,并分配给内部任务
任务调度、监控与容错NodeManager 单个节点上的资源管理
处理来自RM的命令
处理来自ApplicationMaster的命令
35.四种计算框架?
- MapReduce: 离线批处理
- Impala:实时交互式查询分析
- Storm:流式数据实时分析
- Spark:迭代计算
36.YARN的发展目标?
- 成为集群中同意的资源管理调度框架
- 在集群中为上层的各种计算框架提供统一的资源管理调度服务
- 从而实现**“一个集群多个框架”**
37.Kafka?
- Kafka是一种高吞吐量的分布式发布订阅消息系统
- 用户通过Kafka系统可以发布大量消息
- 同时也能实时订阅消费消息
- Hadoop生态系统中各个组件和其他产品之间缺乏统一的、高效的数据交换中介
Kafka的特点:
- 擅长批量离线处理
- 可以同时满足在线实时处理、离线批量处理
- Kafka在大数据生态系统中发挥着越来越重要的作用
- 扮演数据交换枢纽的角色
第九章 Spark
38.什么是Spark?
Spark是一个高速的基于内存计算的通用性大数据集群计算框架,可运行于独立的集群中,或Hadoop中,或云中,可以访问HDFS,HBase等多种数据。
39.Spark和Hadoop的对比
Spark最大的特点:将计算数据、中间结果都存储在内存,大大减少了IO开销
Hadoop的不足之处:
- 使用Hadoop进行迭代计算非常耗资源
- Hadoop需要编写相对底层的代码,不够简洁
- 相同功能下的Hadoop代码量比Spark多2~5倍
Spark的优势:
- Spark将数据载入内存,避免了从磁盘中频繁读取数据
- Spark提供了多种高层次、简洁API
- Spark提供实时交互式编程反馈,方便验证、调整算法
但是Spark并不能完全替代Hadoop
40.Spark各组件之间的关系:
Spark的各组件均可以使用Spark Core 的API处理问题
方法通用
共享处理数据
无缝集成不同应用之间的数据
41.Spark的基本概念?
RDD:弹性分布式数据集。是分布式内存的一个抽象概念;提供了一种高度受限的共享内存模型(即RDD是只读的记录分区的集合)。
DAG:有向无环图。反映RDD之间的依赖关系。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bXDC4guI-1653754613207)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220528105416898.png)]
Executor:运行在工作节点的一个进程。负责运行Task;为应用程序存储数据
Application:用户编写的Spark应用程序
Task:任务。运行在Executor上的工作单元
Job:作业。一个作业包含多个RDD及作用于相应RDD上的各种操作
Stage:阶段。Job的基本调度单位;一个Job分为多个Task组;每组Task被称为Stage,或者也被称为TaskSet(任务集);Stage代表了一组关联的、相互之间没有Shuffle依赖关系的任务所组成的任务集。
42.RDD的血缘关系?
RDD的一系列处理被称为一个“血缘关系”,即DAG拓扑排序结果。
RDD数据集通过“血缘关系”记住了RDD如何从其他RDD演变而来。
血缘关系记录的是粗粒度的转换操作行为
当RDD的部分分区数据丢失时,可以通过血缘关系获取足够的信息重新运算和恢复
SparkContext负责计算RDD之间的依赖关系,构建DAG。
43.RDD特性?
- 高效的容错性
- 中间结果持久化到内存
- 存放的数据可以是Java对象,避免不必要的对象序列化和反序列化开销
44.RDD依赖关系?
RDD中不同的操作会使得不同RDD中的分区产生不同的依赖,可分为宽依赖和窄依赖。是否包含Shuffle操作是区分窄依赖和宽依赖的依据。
窄依赖:父RDD的一个分区只被一个子RDD的一个分区所使用就是窄依赖;不包含Shuffle操作;失败恢复更为高效,只需要根据父RDD分区重新计算分区。
宽依赖:存在一个父RDD的一个分区对应一个子RDD的多个分区就是宽依赖;通常包含Shuffle操作;失败恢复时,重新计算的过程会涉及多个父RDD分区,开销较大。
45.RDD操作的惰性机制?
- 采用惰性调用,通过血缘关系链接起来的一系列RDD操作就可以实现管道化
- 避免多次转换操作之间数据同步的等待
- 不必担心有过多的中间数据
- 解释:因为这些具有血缘关系的操作都管道化了,一个操作得到的结果不需要保持为中间数据;
- 而是直接管道化的流入到下一个操作进行处理;
- 通过血缘关系把一些了操作进行管道化链接的设计方式,使得管道中每次操作的计算变得相对简单,保证了每个操作在处理逻辑上的单一性。
46.Spark运行的架构?
包括集群资源管理器(Cluster Manager)、运行工作节点(Worker Node)、每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的执行进程(Executor)
特点:
- 每个应用有自己专属的Executor进程,并且该进程在应用重新运行期间一直驻留
- Spark运行过程与资源管理器无关,只要能获取Executor进程并保持通信即可。Executor进程以多线程的方式运行Task。
- Executor有BlockManager存储模块,直接把中间结果写入这里,后续需要直接读取
- 任务采用数据本地性和推测执行等优化机制
47.RDD概念:
RDD提供了一种高度受限的共享内存模型
RDD是只读的记录分区的集合,不能直接修改
只能基于稳定的物理存储中的数据集创建RDD
或者对其它RDD执行转换操作(如map、join和groupBy)而生成新的RDD
48.HDFS的块(Block)与RDD的分区(Partition)的区别?
Block位于存储空间(磁盘);分区位于计算空间(内存)
Block的大小是固定的;分区大小是不固定的
Block是由冗余的、不会轻易丢失;而RDD分区是没有冗余设计、丢失之后重新计算得到。
49.RDD的操作有?
RDD的操作分为:“行动”和“转换”两种类型的操作。
行动用于执行计算并指定输出的形式。
转换用于指定RDD之间的相互依赖关系
转换:接受RDD并返回RDD
行动:接受RDD返回非RDD(输出一个值或结果)
50.RDD的数据来源?
从内存中读取数据(使用List和Array类型的数据)
val rdd01 = sc.makeRDD(List(1,2,3,4,5,6))
val rdd03 = sc.parallelize(List(1,2,3,4,5,6),1)
从文件系统中读取
val rdd = sc.textFile(“file:///usr/local/spark/file2”)
val rdd = sc.textFile(“hdfs///usr/root/Data2/randomNum”)
51.Spark与MapReduce相比较而言,Spark的优势?
- Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数据集操作类型,编程模型比MapReduce更灵活
- Spark提供了内存计算,中间结果直接存放到内存中,带来了更高的迭代运算效率
- Spark基于DAG的任务调度执行机制,要优于MapReduce的迭代执行机制。
- MapReduce是按照批处理而设计的,启动较慢。Spark是交互式或实时并行化的,内部通过线程复用来避免进程或线程启动和切换的开销。
52.RDD操作
转换操作
函数名 作用(转化操作) filter(func) 函数func会过滤叼不符合条件的元素 map(func) 参数是函数func,例如,map{x=>x*x}
该函数应用于RDD每个元素
返回一个新的RDDflatMap(func) 参数是函数func,该函数应用于RDD每个元素
将元素数据进行拆分,变成迭代器
每个输入元素都可以映射到0个或者多个输出结果groupByKey() 应用于(K,V)键值对数据集时,返回一个新的(K,Iterable)形式的数据集。 reduceByKey(func) 应用于(K,V)键值对数据集时,返回一个新的(K,V)形式的数据集,其中每个值都基于key,依据函数func进行聚合而产生。 distinct() 没有参数,将RDD里的元素进行去重操作 union() 参数是RDD,生成包含两个RDD所有元素的新RDD intersection() 参数是RDD,求出两个RDD的共同元素 subtract() 参数是RDD,将原RDD中与参数RDD里相同的元素去掉 cartesian() 参数是RDD,求两个RDD的笛卡尔积
行动操作
函数名 作用 count() 返回RDD的元素个数 collect() 以数组的形式返回RDD的所有元素 first() 返回RDD中的第一个元素 take(n) 以数组的形式返回数据集中的前n个元素 reduce(func) 通过函数func(输入两个参数并返回一个值)
聚合RDD中的元素
并行整合RDD所有数据,例如求和操作foreach(func) 对RDD每个元素都是使用特定函数func countByValue() 各元素在RDD中出现的次数,Value指的是元素 fold(0)(func) 和reduce功能一样,不过fold带有初始值 aggregate(0)(seqOp,combop) 和reduce功能一样,但是返回的RDD数据类型和原RDD不一样
53.reduceByKey和groupByKey的区别?
reduceByKey:
对每个key对应的多个value进行merge操作
它能够在本地先进行merge操作
且merge操作可以通过函数自定义
这里的merge操作实际上应该是MapReduce当中的Combine操作
groupByKey:
- 也是对每个key进行操作但是只生成一个sequence
- groupByKey本身不能自定义函数
- 需要先用groupByKey生成RDD
- 然后才能对次RDD通过map进行自定义函数操作
第十章 流计算
54.流数据的概念和特征?
流数据是指在时间分布和数量上具有无限特点的一系列动态数据集合体;数据记录是流数据的最小组成单元。
特征:
- 数据快速持续到达,大小可能无穷尽
- 数据来源众多,格式复杂
- 数据量大,但是对存储的关注较小;一旦经过处理,要么被丢弃,要么被归档存储
- 注重数据的整体价值,不过分关注个别数据
- 数据顺序可能颠倒,数据可能不完整,系统无法控制新到达数据元素的顺序
55.对静态数据、流数据的处理,有两种计算模式,分别为?
两种计算模式为:批量计算、实时计算;
批量计算:
- 处理时间充裕
- Hadoop是批处理典型的模型
- HDFS和HBase存放大量静态数据
- MapReduce负责执行批量处理
实时计算:
- 要求实时得到计算结果
- 流数据必须采用实时计算、响应时间为秒级
- 实时计算面临的挑战是:
- 数据格式复杂
- 来源众多
- 数据量巨大
- 流计算即针对流数据的实时计算
56.流处理系统与传统的数据处理系统的区别:
流处理系统 | 传统数据处理系统 | |
---|---|---|
数据特征 | 实时数据 | 预先存储好的静态数据 |
获取的结果 | 实时结果 | 过去某一个时刻的结果 |
是否用户主动查询 | 否,自动推送 | 是 |
57.Storm相关术语
Streams 流数据,一个无限的Tuple序列 Spouts 流数据的源头(Topology的处理组件) Bolts 流数据的状态转换过程(Topology的处理组件) Topology 流转换图,由Spouts和Bolts组成的网络;Topology的处理组件即为Spout或Bolt Stream Groupings 流数据分组,决定如何在(1)Spout和Bolt之间(2)或不同的Bolt之间,进行Tuple的传送 Tuple 元组,流数据的基本单位(从多个元组(元组序列)的角度进行论述:)元组即元素的有序列表**;Tuple是一个值列表**
58.Storm和MapReduce的单词统计相类似:
MapReduce使用的是Map和Reduce的抽象
Storm使用的是Spout和Bolt的抽象
第十一章 图计算
59.图计算的功能?
60.有向图和顶点?
Pregel计算模型以有向图作为输入
有向图的每个顶点都有一个String类型的顶点ID
每个顶点都有一个可修改的用户自定义值与之关联
每条有向边都与其源顶点关联,并记录了其目标顶点ID
边上有一个可修改的用户自定义值与之关联
第十二章 数据可视化
新增
Pig主要用在哪个场合?
适合Hadoop MapReduce作业并行批处理HBase表数据
不同的Map任务之间不会进行通信
用户不能显式地从一台机器向另一太机器发送消息,
所有的数据交换都是通过MapReduce框架自身去实现的,
不同的Reduce任务之间也不会发生任何信息交换。