Spark如何用累加器Accumulator收集日志

Spark如何用累加器Accumulator收集日志

Spark任务的实际运算是交由众多executor来执行的,如果再执行算子内部打印日志,是需要到对应的executor上才能看到。当不知道对应executor的情况下就需要挨个查询日志,是否不方便。是否有办法可以收集所有executor上的日志内容打印在driver上呢?这样就可以直接在stdout里看到所有日志。

Accumulator

spark累加器Accumulator是spark提共的两种共享变量(广播变理和累加器)的一种。为什么要使用共享变量呢?通常情况下,当向Spark操作(如map,reduce)传递一个函数时,它会在一个远程集群节点上执行,它会使用函数中所有变量的副本。这些变量被复制到所有的机器上,远程机器上并没有被更新的变量会向驱动程序回传,也就是说有结果Driver程序是拿不到的!共享变量就是为了解决这个问题。本博文介绍其中的一种累加器Accumulator。

累加器只能够增加。 只有driver能获取到Accumulator的值(使用value方法),Task(excutor)只能对其做增加操作(使用 +=)。

如何使用Accumulator收集日志

  1. 注册日志
scala 复制代码
val accumTool: AccumulatorTool = new AccumulatorTool()
SparkSession.sparkContext.register(accumTool)
  1. executor累加日志
java 复制代码
val info = "日志内容"
accumTool.add(info)
  1. 在driver打印日志
scala 复制代码
//打印错误日志
println(s"execute error num is  ${accumTool.value.size}, accumTool message:")
var logNum = 1
for ((k,v) <- accumTool.value if logNum <= 10) {	
	println(k + "," + v)
   	logNum += 1
   	}
相关推荐
赵部长风向标2 小时前
在本地生活赛道,如何打造属于自己的业务护城河?
大数据
青云交2 小时前
Java 大视界 -- Java 大数据在智能教育学习社区互动模式创新与用户活跃度提升中的应用(426)
java·大数据·学习·flink 实时计算·智能教育社区·互动模式创新·用户活跃度
snowful world5 小时前
flink实验三:实时数据流处理(踩坑记录)
大数据·flink
B站_计算机毕业设计之家5 小时前
基于大数据的短视频数据分析系统 Spark哔哩哔哩视频数据分析可视化系统 Hadoop大数据技术 情感分析 舆情分析 爬虫 推荐系统 协同过滤推荐算法 ✅
大数据·hadoop·爬虫·spark·音视频·短视频·1024程序员节
一晌小贪欢6 小时前
Python爬虫第10课:分布式爬虫架构与Scrapy-Redis
分布式·爬虫·python·网络爬虫·python爬虫·python3
面向星辰6 小时前
day07 spark sql
大数据·sql·spark
北邮-吴怀玉7 小时前
2.2.2.3 大数据方法论与实践指南-开源服务跟踪工具对比
大数据·开源
亚远景aspice8 小时前
亚远景热烈祝贺保隆科技通过ASPICE CL2评估
大数据·人工智能·物联网
赵谨言9 小时前
基于python大数据的城市扬尘数宇化监控系统的设计与开发
大数据·开发语言·经验分享·python
程序员小羊!9 小时前
Flink状态编程之算子状态(OperatorState)
大数据·flink