![](https://csdnimg.cn/release/download_crawler_static/86305071/bg4.jpg)
面试八股文来自公众号:五分钟学大数据
4 / 20
3. Driver:运行程序的 main 方法,创建 spark context 对象。
4. spark context:控制整个 application 的生命周期,包括 dagsheduler
和 task scheduler 等组件。
5. client:用户提交程序的入口。
3. Spark 中的 RDD 机制理解吗?
rdd 分布式弹性数据集,简单的理解成一种数据结构,是 spark 框架上的通用
货币。所有算子都是基于 rdd 来执行的,不同的场景会有不同的 rdd 实现类,
但是都可以进行互相转换。rdd 执行过程中会形成 dag 图,然后形成 lineage
保证容错性等。从物理的角度来看 rdd 存储的是 block 和 node 之间的映射。
RDD 是 spark 提供的核心抽象,全称为弹性分布式数据集。
RDD 在逻辑上是一个 hdfs 文件,在抽象上是一种元素集合,包含了数据。它是
被分区的,分为多个分区,每个分区分布在集群中的不同结点上,从而让 RDD 中
的数据可以被并行操作(分布式数据集)
比如有个 RDD 有 90W 数据,3 个 partition,则每个分区上有 30W 数据。RDD
通常通过 Hadoop 上的文件,即 HDFS 或者 HIVE 表来创建,还可以通过应用程
序中的集合来创建;RDD 最重要的特性就是容错性,可以自动从节点失败中恢复
过来。即如果某个结点上的 RDD partition 因为节点故障,导致数据丢失,那
么 RDD 可以通过自己的数据来源重新计算该 partition。这一切对使用者都是
透明的。
RDD 的数据默认存放在内存中,但是当内存资源不足时,spark 会自动将 RDD 数
据写入磁盘。比如某结点内存只能处理 20W 数据,那么这 20W 数据就会放入内
存中计算,剩下 10W 放到磁盘中。RDD 的弹性体现在于 RDD 上自动进行内存和
磁盘之间权衡和切换的机制。
4. RDD 中 reduceBykey 与 groupByKey 哪个性能好,为什么?
reduceByKey:reduceByKey 会在结果发送至 reducer 之前会对每个 mapper 在
本地进行 merge,有点类似于在 MapReduce 中的 combiner。这样做的好处在于,
在 map 端进行一次 reduce 之后,数据量会大幅度减小,从而减小传输,保证
reduce 端能够更快的进行结果计算。