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
   	}
相关推荐
Alex艾力的IT数字空间3 小时前
设计既保持高性能又兼顾可移植性的跨平台数据结构
数据结构·分布式·算法·微服务·中间件·架构·动态规划
谅望者3 小时前
数据分析笔记14:Python文件操作
大数据·数据库·笔记·python·数据挖掘·数据分析
YisquareTech3 小时前
如何实现智能补货?EDI与ERP集成打造零售库存的“自动闭环”
大数据·人工智能·零售·伊士格科技·erp集成
观远数据3 小时前
数据驱动零售新生态:观远BI打造终端经营“透视镜”
大数据·人工智能·信息可视化·数据分析·零售
i***68323 小时前
PostgreSQL 中进行数据导入和导出
大数据·数据库·postgresql
贝多财经4 小时前
千里科技报考港股上市:高度依赖吉利,AI智驾转型收入仍为零
大数据·人工智能·科技
失散134 小时前
架构师级别的电商项目——2 电商项目核心需求分析
java·分布式·微服务·架构·需求分析
怀璧其罪4 小时前
aleph-node Node upgrade instructions 节点升级说明
大数据·elasticsearch·搜索引擎
l***O5205 小时前
大数据实时处理:Flink流处理
大数据·flink
e***28295 小时前
RabbitMQ 客户端 连接、发送、接收处理消息
分布式·rabbitmq·ruby