《Spark编程基础》(Scala版)第三章简答题答案(自制)
3 Spark 的设计与运行原理
简答题
T1 Spark 是基于内存计算的大数据计算平台,请阐述 Spark 的主要特点。🌱
答:
① 运行速度快:Spark使用先进的有向无环图执行引擎,以支持循环数据流与内存计算;
② 容易使用:Spark 支持多种语言进行编程,简洁的 API 设计有助于用户轻松构建并行程序,并且可以通过 Spark Shell 进行交互式编程;
③ 通用性:Spark 提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件,这些组件可以无缝整合在同一个应用中,足以应对复杂的计算;
④ 运行模式多样:Spark 可运行于独立的集群模式中,或者运行于 Hadoop 中,也可运行于云环境中,并且可以访问 HDFS、HBase、Hive 等多种数据源。
T2 Spark 的出现是为了解决 Hadoop MapReduce 的不足,试列举 Hadoop MapReduce 的几个缺陷,并说明 Spark 具备哪些优点。
答:
① Hadoop MapReduce 的缺陷:
(1)采用进程模型,任务启动开销较大;
(2)每次迭代计算都要从磁盘读数据,计算完成后需要将中间结果写入到磁盘中,I/O 开销大。
(2)是个人理解
② Spark 的优点:
(1)多线程执行具体任务,减少任务启动的开销;
(2)Executor 中有一个 BlockManager 存储模块,会将内存和磁盘共同作为存储设备,当需要多轮迭代计算时,可以将中间结果存储到这个存储模块里,下次需要时,就可以直接读取该存储模块里的数据,而不需要读取HDFS等文件系统的数据,因而有效减少了 I/O开销;或者在交互式查询场景下,预先将表缓存到该存储系统上,从而可以提高读写I/O性能。
T3 美国加州大学伯克利分校提出的数据分析软件栈 BDAS 认为目前的大数据处理可以分为哪 3 个类型?
答:
① 复杂的批处理数据;
② 基于历史数据的交互式查询;
③ 基于实时数据流的数据处理。
T4 Spark 已打造出结构一体化、功能多样化的大数据生态系统,请阐述 Spark 的生态系统。🌱
答:Spark 的设计遵循“一个软件栈满足不同应用场景”的理念,逐渐形成了一套完整的生态系统,既能够提供内存计算框架,也可以支持SQL 即时查询、实时流式计算、机器学习和图计算等。
Spark 的生态系统主要包含了 Spark Core、Spark SQL、Spark Streaming、MLlib 和 GraphX 等组件,各个组件的具体功能如下:
① Spark Core: 包含 Spark 最基础和最核心的功能,如内存计算、任务调度等,主要面向批数据处理。
② Spark SQL: 用于结构化数据处理的组件;允许开发人员直接处理 RDD,同时也可查询 Hive、HBase 等外部数据源。
③ Spark Streaming: 是一种流计算框架,可以支持高吞吐量、可容错处理的实时流数据处理。
④ MLlib 和 GraphX:支持机器学习和图计算。
T5 从 Hadoop+Storm 架构转向 Spark 架构可带来哪些好处?❌
答:
① 更高的性能:Spark采用内存计算模型,相对于 Hadoop+Storm 的磁盘读写操作,Spark 的计算速度更快。Spark 将数据存储在内存中进行处理,可以有效地减少磁盘读写的开销,从而提供更高的性能和更低的延迟。
② 更好的实时处理能力:Hadoop+Storm 架构中,实时数据处理主要由 Storm 负责,但 Storm 的处理延迟相对较高。而 Spark 具有更好的实时处理能力,通过 Spark Streaming 可以实时处理数据流,并提供低延迟的结果输出。
③ 简化的开发和管理:Spark 提供了简洁易用的 API 和开发工具,使得开发人员能够更快地构建和调试大规模数据处理应用程序。
书上没答案,按照自己理解整的
T6 请阐述 “Spark on YARN” 的概念。
答:Spark 可运行于 YARN 之上,与 Hadoop 进行统一部署,即 "Spark on YARN"。
T7 请阐述如下 Spark 的几个主要概念:RDD、DAG、阶段、分区、窄依赖、宽依赖。🌱
答:
① RDD:是弹性分布式数据集的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型;
② DAG:是有向无环图的简称,反映 RDD 之间的依赖关系;
③ 阶段:是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段", 或者也被称为“任务集”。
④ 分区:分区是将数据划分为较小的块,以便并行处理。RDD可以被分为多个分区,每个分区都是数据集的一个子集。
⑤ 宽依赖和窄依赖:这是 RDD 中的两种依赖关系,其中,窄依赖不包含 Shuffle 操作,而宽依赖则包含 Shuffle 操作。窄依赖表现为一个父 RDD 的分区对应于一个子 RDD 的分区,或多个父 RDD 的分区对应于一个子 RDD 的分区;宽依赖则表现为存在一个父 RDD 的一个分区对应一个子 RDD 的多个分区。
T8 spark 对 RDD 的操作主要分为行动(Action)和转换(Transformation)两种类型,两种操作的区别是什么?🌱
答:转换操作接受 RDD 并返回 RDD,而行动操作接受 RDD 但是返回非 RDD (即输出一个值或结果)。

浙公网安备 33010602011771号