当前位置:网站首页>Spark面试问题总结

Spark面试问题总结

2022-08-10 03:29:00 18阿鲁

Spark概述

Spark,是一种"One Stack to rule them all"的大数据计算框架,期望使用一个技术堆栈就完美地解决大数据领域的各种计算任务。Apache官方,对Spark的定义就是:通用的大数据快速处理引擎
spark是在hadoop的基础上改造的,spark基于MR算法实现分布式计算,拥有 hadoop MR所具有的有点。但不同与MR的是,spark的job中间输出结果可以保存在内存中,从而不再需要在中间读取HDFS。
原文链接:https://blog.csdn.net/a3125504x/article/details/107253031

Spark的诞生背景

大数据计算就是在大规模的数据集上进行一系列的数据计算处理。
Spark 是在 MapReduce 的基础上产生的,借鉴了 大量 MapReduce 实践经验,并引入了多种新型设计思想和优化策略。

Hadoop MapReduce 计算框架存在的局限性:

  1. 处理流程 mapreduce的处理流程中有两个子阶段严重降低了性能
    Map阶段产生的中间结果写到了磁盘上,降低了系统性能;
    Shuffle 阶段采用 HTTP 协议从每个 MapTask 上远程复制结果,这种设计思路同样降低了系统性能。
  2. 编程模型
    只提供 Map 和 Reduce 两个操作。实现一个简单的 join,都需要先 Map 再 Reduce 才能处理,这面对错综复杂的大数据场景是远远不够的。
    MapReduce 模型的抽象层次低,大量的底层逻辑都需要开发者手工完成。
  3. 效率
    复杂的 SQL 需要转换成多个 MapReduce 作业计算完成,这些作业之间通过 HDFS 完成数据交换,读写 HDFS 需要消耗大量的磁盘和 网络 IO
    Map 和 Reduce 端都得排序,对于大量不需要排序的应用来说,无疑增加了额外开销。

Spark的改进
不像 MapReduce 那样仅仅局限于 Mapper、Partitioner、Reducer 等低级 API,Spark既提供了丰富的 API:低层次 API——RDD、累加器、广播变量
;高层次的结构化 API——DataFrame、DataSet
搬运自Shockang的为什么Spark这么牛逼?

Spark的组件

(1)Spark Core

Spark Core包含Spark的基本功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等,主要面向批量数据处理。Spark建立在统一的抽象弹性分布式数据集(Resilient Distributed Dataset,RDD)之上,使其可以以基本一致的方式应对不同的大数据处理场景。

(2)Spark SQL

Spark SQL允许开发人员直接处理RDD,同时也可查询Hive、HBase等外部数据源。Spark SQL的一个重要特点是其能够统一处理关系表和RDD,使得开发人员不需要自己编写Spark应用程序。

(3)Spark Streaming

Spark Streaming支持高吞吐量、可容错处理的实时流数据处理,其核心思路是将流数据分解成一系列短小的批处理作业,每个短小的批处理作业都可以使用Spark Core进行快速处理。

(4)Structured Streaming

Structured Streaming是一种基于Spark SQL引擎构建的、可扩展且容错的流处理引擎。通过一致的API,Structured Streaming使得使用者可以像编写批处理程序一样编写流处理程序,简化了使用者的使用难度。

(5)MLlib(机器学习)

MLlib提供了常用机器学习算法的实现,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛,开发人员只要具备一定的理论知识就能进行机器学习工作。

(6)GraphX(图计算)

GraphX是Spark中用于图计算的API,可认为是Pregel在Spark上的重写及优化。GraphX性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。
原文链接:https://blog.csdn.net/wyz191/article/details/124240559

Spark的组成及运行

Spark架构采用了分布式计算中的Master-Slave模型。Master是对应集群中的含有Master进程的节点,Slave是集群中含有Worker进程的节点。
Driver:运行应用的的main函数,提交任务,下发计算任务。

ClusterManager:资源管理,在独立的模式(standalone)模式下是master ,在yarn是ResouceManager

Work:计算工作节点,上报自己的资源情况,启动和管理Executer

Executor:执行器,是某个应用运行在work节点上的一个进程,负责执行task任务(工作线程)

Task:被发送到某个Executor上的工作单元,跟MR中的MapTask和ReduceTask概念一样,是运行Application的基本单位。

运行大概流程:

1.Driver端提交应用,并向master申请资源

2.master根据各个work节点上汇报的资源,在相应的节点上启动executor,并将资源参数传递给Driver端

3.启动executor进程会主动和Driver端进行通信,Driver端根据代码的执行情况,产生多个task,并发送给Executor

4.Executor启动task做真正的计算,每个task得到资源后,对相应的数据分片做计算逻辑

原文链接:https://blog.csdn.net/weixin_43006131/article/details/104179299

Spark的任务执行流程

原网站

版权声明
本文为[18阿鲁]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_43260719/article/details/126257725