Spark Accumulators

概述

Accumulator即累加器,与Mapreduce counter的应用场景差不多,都能很好地观察task在运行期间的数据变化,Spark中的Accumulator各task可以对Accumulator值进行累加,但是最终的返回值只能在Driver端获取,同时原生支持Int和Double类型的Accumulator,也支持对Accumulator自定义类型及命名,以便我们更好的对程序进行调优

Accumulator能解决哪些问题?

1.能精确地统计数据的各种属性。例如可以统计出符合user ID的记录数,在一个时间段内产生了多少次购买,通常我们在ETL使用Accumulator去统计出各种属性的数据

2.轻量级的调试工具,能观测到每个task的信息。如通过Accumulator可以在Spark UI观测到每个task所处理的记录数,如下图 

 

3.从集群的资源利用率来精确的测量出Spark应用的资源利用率,如通过Accumulator可以很以知道有多少的数据是来自HDFS,shuffle所处理的数据量如何以及RDD的重新计算次数,这些都是我们Spark应用调优的有利信息

使用Accumulator的注意事项

在Action算子中更新Accumulator,Spark保证在每个task对Accumulator只进行一次累加,即便是task重启也是如此,但注意在如果Accumulator是在transformation算子进行累加的,那么一旦task失败或被重启,则Accumulator会被累加多次

 

posted @ 2016-12-05 21:53  MOBIN  阅读(3647)  评论(0编辑  收藏  举报