Spark-使用总结-1

导语

经过一段时间的学习,对spark的认识更深入了一些。有几个知识点一起再来学习一下。

1、spark参数的理解

spark.default.parallelism:该参数用于设置每个stage的默认task数量。

spark.sql.shuffle.partitions:对于Spark SQL中的shuffle类语句,比如group by、join等,该参数代表了shuffle read task的并行度,该值默认是200,对于很多场景来说都有点过小。、

这两个参数在运行日志中控制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

接下来按照这篇博客进行梳理,加强理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值