spark是什么?
分布式计算框架
Spark 的一个主要特点就是能够在内存中进行计算,因而更快。不过即使是必须在磁盘上 进行的复杂计算,Spark 依然比 MapReduce 更加高。
Spark Core 中还包含了对弹性分布式数据集(resilient distributed dataset,简 称 RDD)的 API 定义。RDD 表示分布在多个计算节点上可以并行操作的元素集合,是 Spark 主要的编程抽象。
Spark RDD 是惰性求值的,而有时我们希望能多次使用同一个 RDD。如果简单 地对 RDD 调用行动操作,Spark 每次都会重算 RDD 以及它的所有依赖.
reduceByKey() 与 reduce() 相当类似;它们都接收一个函数,并使用该函数对值进行合并。 reduceByKey() 会为数据集中的每个键进行并行的归约操作,每个归约操作会将键相同的值合 并起来。
1.rdd 五大特性:
1)rdd是有分区的
2)rdd的方法会作用到所有分区上
3)rdd之间是有依赖关系的
4) k-v型的rdd可以有分区器
5) rdd的分区规划,尽可能靠近数据所在的服务器
面试题:Hadoop的基于进程的计算和Spark基于线程方式优缺点?
答案:Hadoop中的MR中每个map/reduce task都是一个java进程方式运行,好处在于进程之间是互相独立的,
每个task独享进程资源,没 有互相干扰,监控方便,但是问题在于task之间不方便共享数据,执行效率比较低。
比如多个map task读取不同数据源文件需要将数据源加 载到每个map task中,造成重复加载和浪费内存。
而基于线程的方式计算是为了数据共享和提高执行效率,Spark采用了线程的最小的执行 单位,
但缺点是线程之间会有资源竞争。
【扩展阅读】:线程基本概念
线程是CPU的基本调度单位
一个进程一般包含多个线程, 一个进程下的多个线程共享进程的资源 不同进程之间的线程相互不可见
线程不能独立执行
一个线程可以创建和撤销另外一个线程
Spark程序运行层次结构
Spark Application程序运行时三个核心概念:Job、Stage、 Task,说明如下:
Job:由多个 Task 的并行计算部分,一般 Spark 中的 action 操作(如 save、collect,后面进一步说明),会 生成一个 Job。
Stage:Job 的组成单位,一个 Job 会切分成多个 Stage ,Stage 彼此之间相互依赖顺序执行,而每个 Stage 是多 个 Task 的集合,类似 map 和 reduce stage。
Task:被分配到各个 Executor 的单位工作内容,它是 Spark 中的最小执行单位,一般来说有多少个 Paritition (物理层面的概念,即分支可以理解为将数据划分成不同 部分并行处理),就会有多少个 Task,每个 Task 只会处 理单一分支上的数据。
1)、Master(ResourceManager):集群大管家, 整个 集群的资源管理和分配
2)、Worker(NodeManager):单个机器的管家,负责 在单个服务器上提供运行容器,管理当前机器的资源.
3)、Driver:单个Spark任务的管理者,管理Executor 的任务执行和任务分解分配, 类似YARN的 ApplicationMaster;
4)、Executor:具体干活的进程, Spark的工作任务 (Task)都由Executor来负责执行.