扫码关注公众号

java开源框架之spark
06-28
671观看
01

spark为什么比hadoop的mr要快?

Spark比Hadoop快的主要原因:在内存核算战略和先进的DAG调度等机制的协助下,Spark能够用更快速度处理一样的数据集。1.spark基于内存、消除了冗余的HDFS读写 MapReduce在每次执行时都要从磁盘读取数据,计算完毕后都要把数据存放到磁盘上。Hadoop每次shuffle(分区合并排序等……)操作后,必须写到磁盘,而Spark是基于内存的。Spark在shuffle后不一定落盘,可以cache到内存中,以便迭代时使用。如果操作复杂,很多的shufle操作,那么Hadoop的读写IO时间会大大增加。少磁盘IO操作2.DAG优化操作、消除了冗余的MapReduce阶段Hadoop的shuffle操作一定连着完整的MapReduce操作,冗余繁琐。map-reduce-map-reduce-map-reduce。而Spark基于RDD提供了丰富的算子操作,DAG调度等机制。它可以把整个执行过程做一个图,然后进行优化。DAG引擎有向无环图,shuffle过程中避免不必要的sort操作、且reduce操作产生shuffle数据,可以缓存在内存中。3.JVM的优化、Task启动(线程池)SparkTask的启动时间快。Spark使用多线程池模型来减少task启动开稍、Spark采用fork线程的方式,Spark每次MapReduce操作是基于线程的。Spark的Executor是启动一次JVM,内存的Task操作是在线程池内线程复用的。而Hadoop采用创建新的进程的方式,启动一个Task便会启动一次JVM。每次启动JVM的时间可能就需要几秒甚至十几秒,那么当Task多了,这个时间Hadoop不知道比Spark慢了多少。

来自:spark-spark
02

spark中的RDD是什么,有哪些特性?

RDD(ResilientDistributedDataset)叫做分布式数据集,是spark中最基本的数据抽象,它代表一个不可变,可分区,里面的元素可以并行计算的集合Dataset:就是一个集合,用于存放数据的Destributed:分布式,可以并行在集群计算Resilient:表示弹性的,弹性表示1.RDD中的数据可以存储在内存或者磁盘中2.RDD中的分区是可以改变的五大特性:1.Alistofpartitions:一个分区列表,RDD中的数据都存储在一个分区列表中2.Afunctionforcomputingeachsplit:作用在每一个分区中的函数3.AlistofdependenciesonotherRDDs::一个RDD依赖于其他多个RDD,这个点很重要,RDD的容错机制就是依据这个特性而来的4.Optionally,aPartitionerforkey-valueRDDs(eg:tosaythattheRDDishash-partitioned):可选的,针对于kv类型的RDD才有这个特性,作用是决定了数据的来源以及数据处理后的去向5.可选项,数据本地性,数据位置最优

来自:spark-spark
03

概述一下spark中的常用算子区别(map,mapPartitions, foreach, foreachPatition)

map:用于遍历RDD,将函数应用于每一个元素,返回新的RDD(transformation算子)foreach:用于遍历RDD,将函数应用于每一个元素,无返回值(action算子)mapPatitions:用于遍历操作RDD中的每一个分区,返回生成一个新的RDD(transformation算子)foreachPatition:用于遍历操作RDD中的每-个分区,无返回值(action算子)总结::一般使用mapPatitions和foreachPatition算子比map和foreach更加高效,推荐使用

来自:spark-spark
04

下面哪个不是 RDD 的特点 ( )

正确答案是CRDD(ResilientDistributedDataset)叫做分布式数据集,是spark中最基本的数据抽象,它代表一个不可变,可分区,里面的元素可以并行计算的集合所以“可修改”错误

来自:spark-spark
课程
专栏
开源框架-spark-spark
3专栏
1课程
4 试题