日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Apache Spark中的自定义日志

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中的自定义日志的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。