临时抱佛脚v2
术语解释
多范式 (Multi-paradigm) 指支持多种编程范式,如面向对象编程和函数式编程,允许开发者根据需求选择最合适的风格。
函数式编程 (Functional Programming) 一种编程范式,将计算视为数学函数的求值,强调不变性、无副作用、纯函数,以提高代码可读性和可维护性。
高阶函数 (Higher-Order Function) 指可以接受其他函数作为参数,或者可以返回一个函数作为结果的函数。
样例类 (Case Class) Scala 中一种特殊类型的类,主要用于不可变数据的建模,自动提供 equals
、hashCode
、toString
等方法,并支持模式匹配。
特质 (Trait) Scala 中用于代码复用和接口定义的机制,类似于 Java 8 的接口,可以包含抽象方法和具体方法,支持多重继承的混合。
RDD (Resilient Distributed Dataset) Spark 中的核心数据结构,一个可容错的、并行操作的分布式元素集合,是所有 Spark 操作的基础。
DAG (Directed Acyclic Graph) 有向无环图,Spark 任务调度中的核心概念,表示一系列计算阶段的依赖关系,优化了任务执行流程。
单例对象 (Singleton Object) Scala 中一种特殊的类,通过 object
关键字定义,在整个应用程序生命周期中只存在一个实例,常用于工具类、常量定义。
实时计算 (Real-time Computing) 指数据在生成后立即进行处理和分析,并在极短的时间内给出结果,通常用于需要即时响应的场景。
DStream (Discretized Stream) Spark Streaming 中用于表示连续数据流的核心抽象,它将数据流离散化为一系列小的 RDD 批次。
问答题
1. 简述 Scala 语言的显著特性。 Scala 是一种多范式编程语言,融合了面向对象和函数式编程特性。其显著特性包括:运行在 JVM 上、与 Java 兼容、强类型、支持模式匹配、拥有丰富的集合库、简洁的语法。
2. 简述 Spark 的部署方式。 Spark 主要有以下部署方式:
- Standalone Mode: Spark 自带的集群管理器。
- Apache Mesos: 统一的资源调度平台。
- Hadoop YARN: Hadoop 生态系统中的资源管理器。
- Kubernetes: 容器编排系统。
3. 简述 Spark 的特点。 Spark 具有以下特点:
- 快速: 基于内存计算,比 Hadoop MapReduce 快很多。
- 通用: 支持批处理、交互式查询、流处理、机器学习和图计算。
- 易用: 提供 Scala、Java、Python、R 等多语言 API。
- 弹性: 通过 RDD 提供容错机制。
4. 简要描述 RDD 具有哪些特征。 RDD 具有以下特征:
- 分布式: 数据分布在集群的多个节点上。
- 弹性: 发生故障时可以自动恢复。
- 不可变: 一旦创建,内容不能修改。
- 惰性求值: 转换操作不会立即执行,只记录操作血缘。
- 分区: 逻辑上分区,每个分区可在不同节点并行计算。
- 血缘关系: 记录所有转换操作,用于容错和优化。
5. 简述 RDD 的处理过程。 RDD 的处理过程包括:
- 创建: 从 HDFS、本地文件系统、集合等创建 RDD。
- 转换 (Transformation): 对 RDD 进行操作,生成新的 RDD(惰性执行,如
map
、filter
)。 - 行动 (Action): 触发实际计算,将结果返回 Driver 或写入外部存储(如
count
、collect
、saveAsTextFile
)。 - 调度: Spark 任务调度器将 RDD 操作转换为 DAG,并分解为阶段和任务执行。
6. 简述 RDD 的创建方式。 RDD 的创建方式主要有两种:
- 从集合中创建: 通过
SparkContext.parallelize()
方法将 Scala/Java 集合转换为 RDD。 - 从外部存储创建: 从 HDFS、本地文件系统、S3、Cassandra、HBase 等外部数据源读取数据创建 RDD(如
SparkContext.textFile()
)。
7. 简述 RDD 转换 DataFrame 的两种方法。 RDD 转换为 DataFrame 的两种方法:
- 反射机制推断 Schema (Case Class): 将 RDD[CaseClass] 直接转换为 DataFrame。
- 编程方式定义 Schema (StructType): 当 Case Class 不适用时,通过
StructType
和StructField
定义 DataFrame 的 Schema,然后将 RDD[Row] 应用此 Schema 转换为 DataFrame。
8. 简述 Spark SQL 的工作流程。 Spark SQL 的工作流程:
- 解析 (Parsing): 将 SQL 查询或 DataFrame/Dataset API 转化为逻辑计划。
- 分析 (Analysis): 结合元数据对逻辑计划进行解析和绑定(如检查表、列是否存在)。
- 优化 (Optimization): 对逻辑计划进行多级优化(如常量折叠、谓词下推)。
- 物理计划生成 (Physical Planning): 将优化后的逻辑计划转化为物理执行计划,选择最优的执行策略。
- 代码生成 (Code Generation): 生成可执行的 JVM 字节码。
- 执行 (Execution): 在 Spark 集群上执行物理计划。
9. 简述利用 Spark Streaming 完成实时计算的工作流程。 Spark Streaming 实时计算的工作流程:
- 数据接收: 从 Kafka、Flume、HDFS/S3 等数据源持续接收实时数据。
- DStream 离散化: 将连续数据流划分为一系列小的、固定时间间隔的 RDD 批次(DStream)。
- RDD 处理: 对每个 RDD 批次进行 Spark 核心 API 的转换和行动操作。
- 结果输出: 将处理结果输出到文件系统、数据库、仪表盘等。
- 容错机制: 通过检查点(Checkpointing)等机制保证数据处理的容错性。
10. 实时计算及常用计算框架。 实时计算: 指数据在生成后立即进行处理和分析,并在极短的时间内给出结果,通常用于需要即时响应的场景,如实时推荐、欺诈检测、监控预警。 常用计算框架:
- Apache Spark Streaming: 基于微批处理,实现近似实时。
- Apache Flink: 真正的流式处理框架,支持事件时间处理和状态管理。
- Apache Storm: 早期流处理框架,支持低延迟。
- Kafka Streams: Kafka 自带的轻量级流处理库。