【转载】spark累加器(详细)
一、生产常用Spark累加器剖析之一 由于最近在项目中需要用到Spark的累加器,同时需要自己去自定义实现Spark的累加器,从而满足生产上的需求。对此,对Spark的累加器实现机制进行了追踪学习。 本系列文章,将从以下几个方面入手,对Spark累加器进行剖析: Spark累加器的基本概念 累加器的重点类构成 累加器的源码解析 累加器的执行过程 累加器使用中的坑 自定义累加器的实现 Spark累加器基本概念 Spark提供的Accumulator,主要用于多个节点对一个变量进行共享性的操作。Accumulator只提供了累加的功能,只能累加,不能减少累加器只能在Driver端构建,并只能从Driver端读取结果,在Task端只能进行累加。 至于这里为什么只能在Task累加呢?下面的内容将会进行详细的介绍,先简单介绍下: 在Task节点,准确的就是说在executor上; 每个Task都会有一个累加器的变量,被序列化传输到executor端运行之后再返回过来都是独立运行的; 如果在Task端去获取值的话,只能获取到当前Task的,Task与Task之间不会有影响 累加器不会改变Spark lazy计算的特点,只会在Job触发的时候进行相关的累加操作 累加器的重点类介绍 class Accumulator extends Accumulable 源码