您是否曾经对运行了几个小时的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中的自定义日志相关推荐

  1. apache spark_Apache Spark中的自定义日志

    apache spark 您是否曾经对运行了几个小时的Spark作业感到沮丧,但由于基础设施问题而失败了. 您会很晚才知道此故障,并浪费了数小时的时间,当Spark UI日志也无法进行事后检查时,它会 ...

  2. 在 Apache Spark 中利用 HyperLogLog 函数实现高级分析

    在 Apache Spark 中利用 HyperLogLog 函数实现高级分析 预聚合是高性能分析中的常用技术,例如,每小时100亿条的网站访问数据可以通过对常用的查询纬度进行聚合,被降低到1000万 ...

  3. 如何在ASP.NET Core中编写自定义日志记录提供程序

    目录 介绍 如何实现所需的接口 基础类和附件 FileLoggerProvider具体类及其附件 1. ConfigureLogging() 2. appsettings.json文件 介绍 源代码可 ...

  4. spark java udf_在 Apache Spark 中使用 UDF

    用户定义函数(User-defined functions, UDFs)是大多数 SQL 环境的关键特性,用于扩展系统的内置功能. UDF允许开发人员通过抽象其低级语言实现来在更高级语言(如SQL)中 ...

  5. Apache Spark中的有向无环图DAG

    Apache Spark中的有向无环图DAG 由DATAFLAIR TEAM ·更新· 2018年11月21日 1.目的 在本Apache Spark教程中,我们将了解Apache Spark中的DA ...

  6. apache spark_如何将自定义数据源集成到Apache Spark中

    apache spark 如今,流数据是一个热门话题,而Apache Spark是出色的流框架. 在此博客文章中,我将向您展示如何将自定义数据源集成到Spark中. Spark Streaming使我 ...

  7. 如何将自定义数据源集成到Apache Spark中

    如今,流数据是一个热门话题,而Apache Spark是出色的流框架. 在此博客文章中,我将向您展示如何将自定义数据源集成到Spark中. Spark Streaming使我们能够从各种来源进行流传输 ...

  8. Apache Spark中实现的MapReduce设计模式

    该博客是该系列文章的第一篇,讨论了MapReduce设计模式一书中的一些设计模式,并展示了如何在Apache Spark(R)中实现这些模式. 在编写MapReduce或Spark程序时,考虑执行作业 ...

  9. spark 读取ftp_scala – 使用ftp在Apache Spark中的远程计算机上读取文件

    我正在尝试使用ftp在Apache Spark( Scala版本)中的远程计算机上读取文件.目前,我在 GitHub上关注Databricks的Learning Spark回购中的一个例子.使用cur ...

最新文章

  1. 戴尔怎样把计算机放在桌面,戴尔台式机桌面图标不见了怎么办
  2. excel查找窗口被拉边上_你会做 Excel目录 吗?这个奇葩方法100%的人不知道
  3. ubuntu系统home(主文件夹)中的内容在桌面的显示
  4. 无法识别system.web.extensions的处理方法
  5. Let's Fork | 11 款 Github 最新「机器学习」开源项目
  6. 使用BootStrap编写网页,如何设置全屏页面背景?
  7. Shutdown SpringBoot App
  8. ES6基础(var let const 箭头函数)-学习笔记
  9. 外国人最常说的100个“中国词”出炉,第一个你绝对想不到…
  10. Mac eclipse找不到source的解决办法
  11. FFmpeg解码音频代码
  12. 【转】脉络清晰的BP神经网络讲解,赞
  13. [实用技巧]如何关闭VS中烦人的reference提示
  14. 6级20170601
  15. 记坑Method threw ‘feign.RetryableException‘ exception.
  16. 采集全国疫情数据(Python)
  17. 2021年保育员(中级)考试题及保育员(中级)考试报名
  18. ORA-01034: ORACLE not available Process ID: 0 Session ID: 0 Serial number: 0
  19. 2021 react学习资料
  20. git 撤销上次提交 commit

热门文章

  1. 7、mysql中的表结构操作
  2. 汇编语言(二十七)之身份证最后一位求和校验
  3. 如何使用MAT进行JVM内存泄露分析
  4. Mybatis简介与原理
  5. Tomcat Get请求的巨坑
  6. 11-分步查询懒加载
  7. (九)Spring 事务开发、事务属性详解
  8. 《金色梦乡》金句摘抄(四)
  9. java design按钮_DesignJava 设计模式,讲述 的各种 方便在项目中进行 框架结构 Develop 238万源代码下载- www.pudn.com...
  10. mysql删除索引 增加索引