spark端口
8080 spark集群web ui端口
4040 sparkjob监控端口
18080 jobhistory端口
spark有哪些组件
master:管理集群和节点,不参与计算。
worker:计算节点,进程本身不参与计算,和master汇报。
Driver:运行程序的main方法,创建spark context对象。
spark context:控制整个application的生命周期,包括dagsheduler和task scheduler等组件。
client:用户提交程序的入口。
Spark分区算法
决定多少分区
每个文件都会循环处理一次{
每个块size/总共块size 看是否大于 1.1
> 1.1 分区数-1
< 1.1 分区数+1
}
spark中的RDD是什么,有哪些特性?
1.A list of partitions:一个分区列表,RDD中的数据都存储在一个分区列表中
2.A function for computing each split:作用在每一个分区中的函数
3.A list of dependencies on other RDDs:一个RDD依赖于其他多个RDD,这个点很重要,RDD的容错机制就是依据这个特性而来的
4.Optionally,a Partitioner for key-value RDDs(eg:to say that the RDD is hash-partitioned):可选的,针对于kv类型的RDD才有这个特性,作用是决定了数据的来源以及数据处理后的去向
5.可选项,数据本地性,数据位置最优
spark的有几种部署模式,每种模式特点
本地模式
Spark不一定非要跑在hadoop集群,可以在本地,起多个线程的方式来指定。方便调试,本地模式分三类
local:只启动一个executor
local[k]: 启动k个executor
local:启动跟cpu数目相同的 executor
standalone模式
分布式部署集群,自带完整的服务,资源管理和任务监控是Spark自己监控,这个模式也是其他模式的基础
Spark on yarn模式
分布式部署集群,资源和任务监控交给yarn管理
粗粒度资源分配方式,包含cluster和client运行模式
cluster 适合生产,driver运行在集群子节点,具有容错功能
client 适合调试,dirver运行在客户端
Spark On Mesos模式
(map 、 mappartition)(transformation) 、(foreach、foreachprtition )(action类型算子)
1: map 是作用到RDD每个元素都遍历下,如果是持久化数据需要创建连接,就会创建很多连接。
2:mappartition 是作用到每个分区遍历一次,相对map更加合理,但是有可能单个partition过大
会导致资源不被释放,这个时候莫慌指定partition数量即可。
3: foreach 同上就是算子类型不一样
4: foreachpartition 同上就是算子类型不一样
groupByKey 与 reduceByKey
1:算子都适用于Transformation类型算子,都会产生Shuffle (调优可以缓存产生Shuffle的数据),groupByKey不会在RDD局部聚合产生的数据也是CompactBuffer,reduceByKey在RDD先局部聚合在全局聚合。
2:groupByKey 比 reduceByKey shuffer数据大小要大,所以进来选择reduceByKey。
colleat(action算子)
1: 会把结果加载到内存里 慎用,产生OOM
2:如果一定想看看colleat().take(100) 来看看得了,或者直接用saveAsTextFile("hdfs://......")再看。
coalesce 与 repartition的有区别
1:coalesce 可以根据传入的分区数 把已有的分区数压缩并且不产生shuffer,如果增加分区数参数二传递true就会产生shuffer。
2: repartition 底层默认调用coalesce 默认传递true,所以会传输shuffer
cache 与 persist的区别
1:cache 默认调用了 persist,persist默认调用了persist(MEMORY_ONLY)
spark 执行流程
Spark 划分stage原理
Spark RDD生成到task提交的四个阶段