导语
经过一段时间的学习,对spark的认识更深入了一些。有几个知识点一起再来学习一下。
1、spark参数的理解
spark.default.parallelism:该参数用于设置每个stage的默认task数量。
这两个参数在运行日志中控制task数目最为关键的参数之一,因为task的数目是由输入的rdd数量决定,过大或过小都严重影响运行速度。
2、job、stage、task的划分
spark中可以分为三大类算子:
- Value数据类型的Transformation算子,这种变换并不触发提交作业,针对处理的数据项是Value型的数据。
- Key-Value数据类型的Transfromation算子,这种变换并不触发提交作业,针对处理的数据项是Key-Value型的数据对。
- Action算子,这类算子会触发SparkContext提交Job作业。
常见的action算子:reduce、collect、count、take、first、saveAsTextFile、foreach、saveAsSequenceFile
https://www.jianshu.com/p/4ff6afbbafe4
这篇博客中对算子有更详细的描述,不再赘述。
窄依赖的函数有:map, filter, union, join(父RDD是hash-partitioned ), mapPartitions, mapValues
宽依赖的函数有:groupByKey, join(父RDD不是hash-partitioned ), partitionBy
宽依赖往往对应着shuffle操作,需要在运行过程中将同一个父RDD的分区传入到不同的子RDD分区中,中间可能涉及多个节点之间的数据传输;而窄依赖的每个父RDD的分区只会传入到一个子RDD分区中,通常可以在一个节点内完成转换。
http://blog.sina.com.cn/s/blog_6dd718930102xgm3.html
这篇博客中一句非常精辟的总结:每个action操作就是一个job,而每一个宽依赖就会产生一个stage。
理解了上述概念,就能看懂运行日志中的各种stage的划分,进而去判断在哪一步stage程序卡主了。
3、cache的理解
https://blog.csdn.net/databatman/article/details/53023818
这篇文章有对cache例子的描述,让人能直观理解cache的真正含义。
4、spark运行机制
http://www.cnblogs.com/duanxz/p/6329675.html
这篇博客介绍了spark的容错机制。可以参考理解。
总结:
虽然使用了很长一段时间spark,但是对内部机制还有待加强认识。https://www.cnblogs.com/jchubby/p/5449398.html
接下来按照这篇博客进行梳理,加强理解。