Apache Spark中的自定义日志
您是否曾经对运行了几个小时的Spark作业感到沮丧,但由于基础设施问题而失败了。
您会很晚才知道此故障,并浪费了数小时的时间,当Spark UI日志也无法用于事后检查时,它会更加痛苦。
你不是一个人!
在这篇文章中,我将介绍如何启用与Spark logger搭配使用的自定义记录器。
该定制记录器将收集从被动监视到主动监视所需的所有信息。
无需为此设置额外的日志记录。
Spark 2.X基于Slf4j抽象,并且使用了logback绑定。
让我们从基本的日志记录开始,即如何在Spark作业或应用程序中获取记录器实例。
val _LOG = LoggerFactory.getLogger(this.getClass.getName)
就是这么简单,现在您的应用程序使用的是与Spark基于相同的日志库和设置。
现在要做一些更有意义的事情,我们必须注入自定义记录器,该记录器将收集信息并将其写入弹性搜索或发布到某些REST端点或发送警报。
让我们一步一步去做
构建自定义日志附加程序
由于spark 2.X是基于logback的,因此我们必须编写logback logger。
自定义登录记录器的代码段
class MetricsLogbackAppender extends UnsynchronizedAppenderBase[ILoggingEvent] {override def append(e: ILoggingEvent) = {//Send this message to elastic search or REST end pointmessageCount.compute(Thread.currentThread().getName, mergeValue)System.out.println(messageCount + " " + e)}val messageCount = new ConcurrentHashMap[String, AtomicInteger]()val mergeValue = new BiFunction[String, AtomicInteger, AtomicInteger] {def apply(key: String, currentValue: AtomicInteger) = {val nextValue = currentValue match {case null => new AtomicInteger(0)case _ => currentValue}nextValue.incrementAndGet()nextValue}}}
这是一个非常简单的记录器,它按线程统计消息,您要做的所有事情都将覆盖附加函数。
这种类型的记录器可以执行任何操作,例如写入数据库或发送到REST端点或发出警报。
启用记录器
要使用新的记录器,请创建logback.xml文件并为新的记录器添加条目。
该文件可以打包在Shaded jar中,也可以指定为运行时参数。
样本logback.xml
<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- encoders are assigned the typech.qos.logback.classic.encoder.PatternLayoutEncoder by default --><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><appender name="METRICS" class="micro.logback.MetricsLogbackAppender"/><root level="info"><appender-ref ref="STDOUT" /></root><logger level="info" name="micro" additivity="true"><appender-ref ref="METRICS" /></logger><logger level="info" name="org.apache.spark.scheduler.DAGScheduler" additivity="true"><appender-ref ref="METRICS" /></logger></configuration>
此配置文件将MetricsLogbackAppender添加为METRICS
<appender name="METRICS" class="micro.logback.MetricsLogbackAppender"/>
接下来为应使用此功能的包/类启用它
<logger level="info" name="micro" additivity="true"> <appender-ref ref="METRICS" /></logger>
<logger level="info" name="org.apache.spark.scheduler.DAGScheduler" additivity="true"> <appender-ref ref="METRICS" /></logger
大功告成!
从'micro'包或DAGScheduler类记录的任何消息都将使用new logger。
使用这种技术,执行者日志也可以被捕获,当Spark作业在成百上千的执行者上运行时,这变得非常有用。
现在,它提供了许多让BI实时显示所有这些消息的选项,允许团队提出一些有趣的问题或在情况不佳时订阅变更。
警告:请确保此新记录器减慢了应用程序的执行速度,建议使其异步。
在正确的时间获取见解并将其付诸实践
此博客中使用的代码在github中的@sparkmicroservices回购中可用。
我有兴趣知道您正在为Spark使用哪种日志记录模式。
翻译自: https://www.javacodegeeks.com/2018/05/custom-logs-in-apache-spark.html
Apache Spark中的自定义日志相关推荐
- apache spark_Apache Spark中的自定义日志
apache spark 您是否曾经对运行了几个小时的Spark作业感到沮丧,但由于基础设施问题而失败了. 您会很晚才知道此故障,并浪费了数小时的时间,当Spark UI日志也无法进行事后检查时,它会 ...
- 在 Apache Spark 中利用 HyperLogLog 函数实现高级分析
在 Apache Spark 中利用 HyperLogLog 函数实现高级分析 预聚合是高性能分析中的常用技术,例如,每小时100亿条的网站访问数据可以通过对常用的查询纬度进行聚合,被降低到1000万 ...
- 如何在ASP.NET Core中编写自定义日志记录提供程序
目录 介绍 如何实现所需的接口 基础类和附件 FileLoggerProvider具体类及其附件 1. ConfigureLogging() 2. appsettings.json文件 介绍 源代码可 ...
- spark java udf_在 Apache Spark 中使用 UDF
用户定义函数(User-defined functions, UDFs)是大多数 SQL 环境的关键特性,用于扩展系统的内置功能. UDF允许开发人员通过抽象其低级语言实现来在更高级语言(如SQL)中 ...
- Apache Spark中的有向无环图DAG
Apache Spark中的有向无环图DAG 由DATAFLAIR TEAM ·更新· 2018年11月21日 1.目的 在本Apache Spark教程中,我们将了解Apache Spark中的DA ...
- apache spark_如何将自定义数据源集成到Apache Spark中
apache spark 如今,流数据是一个热门话题,而Apache Spark是出色的流框架. 在此博客文章中,我将向您展示如何将自定义数据源集成到Spark中. Spark Streaming使我 ...
- 如何将自定义数据源集成到Apache Spark中
如今,流数据是一个热门话题,而Apache Spark是出色的流框架. 在此博客文章中,我将向您展示如何将自定义数据源集成到Spark中. Spark Streaming使我们能够从各种来源进行流传输 ...
- Apache Spark中实现的MapReduce设计模式
该博客是该系列文章的第一篇,讨论了MapReduce设计模式一书中的一些设计模式,并展示了如何在Apache Spark(R)中实现这些模式. 在编写MapReduce或Spark程序时,考虑执行作业 ...
- spark 读取ftp_scala – 使用ftp在Apache Spark中的远程计算机上读取文件
我正在尝试使用ftp在Apache Spark( Scala版本)中的远程计算机上读取文件.目前,我在 GitHub上关注Databricks的Learning Spark回购中的一个例子.使用cur ...
最新文章
- 戴尔怎样把计算机放在桌面,戴尔台式机桌面图标不见了怎么办
- excel查找窗口被拉边上_你会做 Excel目录 吗?这个奇葩方法100%的人不知道
- ubuntu系统home(主文件夹)中的内容在桌面的显示
- 无法识别system.web.extensions的处理方法
- Let's Fork | 11 款 Github 最新「机器学习」开源项目
- 使用BootStrap编写网页,如何设置全屏页面背景?
- Shutdown SpringBoot App
- ES6基础(var let const 箭头函数)-学习笔记
- 外国人最常说的100个“中国词”出炉,第一个你绝对想不到…
- Mac eclipse找不到source的解决办法
- FFmpeg解码音频代码
- 【转】脉络清晰的BP神经网络讲解,赞
- [实用技巧]如何关闭VS中烦人的reference提示
- 6级20170601
- 记坑Method threw ‘feign.RetryableException‘ exception.
- 采集全国疫情数据(Python)
- 2021年保育员(中级)考试题及保育员(中级)考试报名
- ORA-01034: ORACLE not available Process ID: 0 Session ID: 0 Serial number: 0
- 2021 react学习资料
- git 撤销上次提交 commit