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
   	}
相关推荐
青云交5 小时前
大数据新视界 -- Impala 性能优化:量子计算启发下的数据加密与性能平衡(下)(30 / 30)
大数据·hive·量子计算·数据加密·impala·量子密钥分发·性能平衡
孙克旭_6 小时前
第三章 分布式缓存Redis
redis·分布式·缓存
Elastic 中国社区官方博客7 小时前
使用 Elastic 收集 Windows 遥测数据:ETW Filebeat 输入简介
大数据·windows·elasticsearch·搜索引擎·全文检索·可用性测试
鸡c9 小时前
IM项目-----ElasticSearch
大数据·elasticsearch·搜索引擎
Java 第一深情9 小时前
Flink数据源的读写介入体系
大数据·flink
天冬忘忧10 小时前
Kafka 消费者全面解析:原理、消费者 API 与Offset 位移
大数据·kafka
jlting19510 小时前
《智慧教育实时数据分析推荐项目》详细分析
大数据·redis·sql·kafka·database
青云交10 小时前
大数据新视界 -- Hive 数据仓库:架构深度剖析与核心组件详解(上)(1 / 30)
大数据
好看资源平台10 小时前
网络爬虫——分布式爬虫架构
分布式·爬虫·架构
EasyNVR11 小时前
NVR管理平台EasyNVR多品牌NVR管理工具的流媒体视频融合与汇聚管理方案
大数据·网络·安全·音视频·监控·视频监控