Spark 总复习

Spark 总复习

  • 一、基础题
  • 二、简答题
    • 1、论述Spark与Hadoop的区别
      • 1)编程方式
      • 2)数据存储
      • 3)数据处理
      • 4)数据容错
    • 2、简述Spark集群的基本运行流程
    • 3、论述批量计算、流式计算、实时计算、离线计算的区别
    • 4、简述spark的容错机制
      • 1)血统方式
      • 2)设置检查点(checkPoint)方式
    • 5、论述RDD的五大特征
      • 1)A list of partitions
      • 2)A function for computing each split
      • 3)A list of dependencies on other RDDs
      • 4)Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
      • 5)Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
    • 6、简述如何在Spark中划分Stage
    • 7、简述Spark Streaming的工作原理

一、基础题

1、Scala 语言的特性包含面向对象编程函数式编程静态类型可扩展可交互操作
2、Scala 中获取元祖中的值是通过下划线加脚标来获取的
3、Scala 中,模式匹配是由关键字matchcase组成的
4、Scala 中提供的常见数据结构有数组元祖集合
5、在 Scala 中使用case关键字来定义的类被称为样例类
6、在 Scala 中使用object关键字创建的对象为单例对象
7、在 Scala 中Trait(特质) 的功能类似于Java中的接口
8、Spark 生态系统主要包括Spark CoreSpark SQLSpark StreamingMLibGraphX以及独立调度器
9、Spark 的部署模式分为本地单机模式集群模式,集群模式又分为Standalone模式Mesos模式Yarn模式
10、Spark 运行框架主要是由SparkContextCluster ManagerWorker组成
11、Spark 的特点,速度快易用性通用性兼容性
12、Spark 是基于内存计算的大数据并行计算框架
13、配置 Spark 集群时,需要修改配置文件spark-env.shprofileslaves
14、RDD 是一个容错的并行的数据结构,本质为分布式的数据集合
15、创建 RDD 的方法是textFileparallelize
16、RDD 采用了惰性调用,在 RDD 的处理过程中,真正的计算发生在RDD 的 “行动” 操作
17、RDD 的转换算子: filter(func)map(func)flatmap(func)groupByKey(func)reduceByKey(func)
18、RDD 的分区原则: Local模式下,分区的个数尽量等同于集群中 CPU 的核数Standalone模式或者Yarn模式下,分区数"在集群中所有的 CPU 核数总和"与"2" 这两者中较大值为默认值Mesos模式下,默认的分区数是8
19、RDD 的依赖关系分为宽依赖窄依赖
20、RDD 持久化机制的存储级别默认的是MEMORY_ONLY
21、RDD 持久化操作有两个方法分别为cache() 方法persist() 方法
22、RDD 提供了两种故障恢复的方式,分别是血统方式设置检查点方式
23、消息传递模式分为点对点消息传递模式发布订阅式消息传递模式
24、Kafka 的优点:解耦高吞吐量低延迟持久性扩展性容错性支持多种客户端语言
25、Producer是数据的生产者,Consumer是数据的消费者
26、Kafka 集群是由生产者(Producer)消息代理服务器(Broker Server)消费者(Consumer) 组成
27、Kafka 中消息的消费模型有两种,分别为推送模型(Push)拉取模型(Pull)
28、Kafka 内置了一个流式处理框架客户端 Kafka Streams,开发者可以直接以Kafka为核心构建流式计算系统
29、Spark Streaming 的特点易用性容错性易整合性
30、Spark Streaming 支持从多种数据源获取数据,包括KafkaFlumeTwitterZeroMQ
31、Spark Streaming 中对DStream的转换操作会转换成对RDD的操作
32、Spark Streaming 提供了一个高级抽象的流,即DStream
33、Spark Streaming 中 DStream 的输出操作是真正触发 DStream 上所有转换操作进行计算
34、Scala 中,使用var声明变量,使用val声明常量
35、Scala 中可以使用def语句val语句定义函数,而定义方法只能使用def语句
36、Scala 中的数组分为定长数组变长数组

new Array[T](数组长度)  //定义定长数组
ArrayBuffer[T]()  //定义变长数组

37、在 Scala 中,可以使用Nil::操作符 来定义列表
38、RDD 的行动算子:count()first()take(n)reduce(func)collect()foreach(func)
39、当 RDD 执行 mapfilterunionjoin with inputs co-partitioned 操作时都会产生窄依赖
40、目前,业内已衍生出许多实时计算数据的框架,如Apache Spark StreamingApache Spark StormApache Flink 以及 Yahoo! S4
41、DStream 可以通过KafkaFlumeKinesis 等数据源创建

二、简答题

1、论述Spark与Hadoop的区别

1)编程方式

a) Hadoop 的 MapReduce 在计算数据时,计算过程必须要转化为 Map 和 Reduce 两个过程,从而难以描述复杂的数据处理过程;
b) Spark 的计算模型不局限于 Map 和 Reduce 操作,还提供了多种数据集的操作类型,编程模型比 MapReduce 更加灵活

2)数据存储

a) Hadoop 每次产生的中间结果都存储在本地磁盘中
b) Spark 产生的中间结果存储在内存中

3)数据处理

a) Hadoop 每次执行数据处理都需要从磁盘中读取数据,导致磁盘的I/O开销较大
b) Spark 处理数据时,只需见将数据加载到内存中,之后直接在内存中加载中间结果数据集即可,减少了磁盘的I/O开销

4)数据容错

a) Hadoop 底层实现了备份机制,从而保证了数据容错
b) Spark RDD 实现了基于 Lineage 的容错机制和设置检查点的容错机制,弥补了数据在内存处理时断电丢失的问题

2、简述Spark集群的基本运行流程

1)spark集群启动后,Worker向Master注册信息,spark-submit命令提交程序后,driver和application也会向Master注册信息,创建SparkContext对象:主要的对象包含DAGScheduler和TaskScheduler
2)Driver把Application信息注册给Master后,Master会根据App信息去Worker节点启动Executor
3)Executor内部会创建运行task的线程池,然后把启动的Executor反向注册给Dirver
4)DAGScheduler:负责把Spark作业转换成Stage的DAG(Directed Acyclic Graph有向无环图),根据宽窄依赖切分Stage,然后把Stage封装成TaskSet的形式发送个TaskScheduler;同时DAGScheduler还会处理由于Shuffle数据丢失导致的失败;
5)TaskScheduler:维护所有TaskSet,分发Task给各个节点的Executor(根据数据本地化策略分发Task),监控task的运行状态,负责重试失败的task;
6)所有task运行完成后,SparkContext向Master注销,释放资源;

3、论述批量计算、流式计算、实时计算、离线计算的区别

实时计算和离线计算,主要是在数据处理延迟性上有不同的要求。
离线计算,通常也称为“批处理”,表示那些离线批量、延时较高的静态数据处理过程。
实时计算,通常也称为“实时流计算”、“流式计算”,表示那些实时或者低延时的流数据处理过程。
流式计算和批量计算主要是数据处理的方式不同。
流式计算,就是对数据流进行处理,是实时计算。
批量计算则统一收集数据,存储到数据库中,然后对数据进行批量处理的数据计算方式。

4、简述spark的容错机制

1)血统方式

根据RDD之间依赖关系对丢失数据的RDD进行数据恢复。窄依赖中,在子RDD的分区丢失、重算父RDD分区时,父RDD相应分区的所有数据都是子RDD分区的数据,并不存在冗余计算。在宽依赖中,则需要父RDD所有分区都要进行从头到尾计算,计算过程中存在冗余计算。

2)设置检查点(checkPoint)方式

当RDD进行宽依赖运算时,设置容错文件系统目录作为检查点,将检查点的数据写入之前设置的容错文件系统中进行持久化存储,若后面出现分区数据丢失,则从做检查点的RDD开始重新计算,不需要从头到尾的计算,从而减少开销。

5、论述RDD的五大特征

1)A list of partitions

一组分区:RDD由很多partition构成,有多少partition就对应有多少task

2)A function for computing each split

一个函数:对RDD做计算,相当于对RDD的每个split或partition做计算

3)A list of dependencies on other RDDs

RDD之间有依赖关系,可溯源

4)Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)

一个Partitioner:即RDD的分片函数,如果RDD里面存的数据是key-value形式,则可以传递一个自定义的Partitioner进行重新分区

5)Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)

一个列表:存储存取每个Partition的优先位置(preferred location),计算每个split时,在split所在机器的本地上运行task是最好的,避免了数据的移动,split有多个副本,所以preferred location不止一个

6、简述如何在Spark中划分Stage

从最后一个RDD往前推,遇到窄依赖的父RDD时,就将这个父RDD加入子RDD所在的stage;遇到宽依赖的父RDD时就断开,父RDD被划分为新的stage。每个Stage里task的数量由Stage最后一个RDD中的分区数决定。如果Stage要生成Result,则该Stage里的Task都是ResultTask,否则是ShuffleMapTask。

7、简述Spark Streaming的工作原理

接收实时输入数据流,然后将数据拆分成多个batch,比如每收集1秒的数据封装为一个batch,然后将每个batch交给Spark的计算引擎进行处理,最后会生产出一个结果数据流,其中的数据,也是由一个一个的batch所组成的。

你可能感兴趣的:(Spark,spark,scala,big,data)