当前位置: 首页 > news >正文

spark6. 如何设置spark 日志

spark yarn日志全解

    • 一.前言
    • 二.开启日志聚合是什么样的
      • 2.1 开启日志聚合MapReduce history server
      • 2.2 如何开启Spark history server
    • 三.不开启日志聚合是什么样的
    • 四.正确使用log4j.properties

一.前言

本文只讲解再yarn 模式下的日志配置。

二.开启日志聚合是什么样的

在yarn模式下,executor 进程和ApplicationMaster进程都会运行在containers中。YARN 有两种方式处理 container logs(也就是我们的spark日志)开启日志聚合和不开启日志聚合

  1. MapReduce history server :
    是hadoop yarn的日志聚合服务,会把运行结束后的任务日志放在hdfs 上,复制完成后则每台机器上的本地日志就会被删除。 另外hdfs上 的所有日志可以设置保留一定时间,避免占用太多磁盘空间。此服务一般用19888端口
  2. Spark history server
    是spark的 ui页面, 默认spark只运行中才可以打开ui, 要想查看所有的历史任务的ui则必须开启此服务
    在Spark history server 中查看运行日志会重定向到MapReduce history server 中。 此服务一般用18080端口

2.1 开启日志聚合MapReduce history server

yarn-site.xml<property><!--开启日志聚合--><name>yarn.log-aggregation-enable</name><value>true</value></property><property><!--聚合的日志保留时间><name>yarn.log-aggregation.retain-seconds</name><value>106800</value></property><property><!--聚合的日志存储位置><name>yarn.nodemanager.remote-app-log-dir</name><value>/yarn/${yarn.resourcemanager.cluster-id}/logs</value></property><property><!-- 此配置是为了spark ui可以看到日志><name>yarn.log.server.url</name><value>http://master-1-1.c-ea09e2040b9f6c41.cn-shanghai.emr.aliyuncs.com:19888/jobhistory/logs</value></property>mapred-site.xml<property><--mapreduce job日志历史日志服务地址--><name>mapreduce.jobhistory.webapp.address</name><value>master-1-1.c-ea09e2040b9f6c41.cn-shanghai.emr.aliyuncs.com:19888</value></property><property><name>mapreduce.jobhistory.address</name><value>master-1-1.c-ea09e2040b9f6c41.cn-shanghai.emr.aliyuncs.com:10020</value></property>

启动 MapReduce history server服务 sbin/mr-jobhistory-daemon.sh start historyserver

在这里插入图片描述

则在程序结束之后container logs 会被copy到hdfs上,此时要查看日志可以通过:yarn logs -applicationId , 要注意的是当任务是accept的时候这个命令是没有日志的,因为还未分配containers, 另一个值得注意的是这个命令会打印出当前运行的日志,但是不是实时跟踪的。也可以使用 HDFS shell or API 来查看日志,这里不做过多解释。

The logs are also available on the Spark Web UI under the Executors Tab
but you have both the Spark history server and the MapReduce history server running and configure yarn.log.server.url in yarn-site.xml properly
这句话的意思是说在spark ui也是可以看到日志,前提条件是开始Spark history server and the MapReduce history server 并在yarn-site.xml 中配置yarn.log.server.url。
值得注意的是spark本身不存储日志, 当在sparkui 查看日志的时候,也是重定向到yarn.log.server.url

2.2 如何开启Spark history server

spark ui默认只展示正在运行的任务,如果想展示所有的任务,则需要开启Spark history server

  1. 打开hdfs-site.xml 找到如下配置查看端口,我的配置中是9000

    dfs.namenode.rpc-address.hdfs-cluster.nn1
    mast-ip:9000
  2. spark-default.conf 添加如下配置:
spark.eventLog.enabled truespark.eventLog.dir hdfs://mast-ip:9000/spark-history #注意端口为上面找到的端口spark.yarn.historyServer.address mast-ip:18080 #spark history 的webui
  1. ./sbin/start-history-server.sh (进入master 的spark安装目录的sbin中执行此命令)
  2. 打开 mast-ip:18080 (spark的history server)
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/4c1edab89a5a4033800524b6b7009b6a.pn
    仔细看途中的绿色箭头,点击之后会重定向到:mast-ip:19888, 这正是hadoop yarn 的history server 地址。这也证明了spark本身不存储日志。

三.不开启日志聚合是什么样的

当日志聚合不打开的时候,再yarn运行的任务日志被保留在每个container所在的机器上,这个日志目录由以下参数决定:

    <property><name>yarn.nodemanager.log-dirs</name><value>/mnt/disk1/yarn/userlogs,/mnt/disk2/yarn/userlogs</value></property>

这些日志路径中包含applicationID 和containerID,很容易找到,这些日志再 Spark Web UI也能看到 并且不需要启动hadoop的
MapReduce history server
在本地不止有日志,为了方便追溯历史任务的执行信息,还缓存了任务执行的需要的各种信息,比如filecache,
甚至还可以找到曾经任务的启动脚本(如下)launch_container.sh()缓存时间通过:yarn.nodemanager.delete.debug-delay-sec设置( 在任务结束多长时间后,删除本地化的日志缓存【缓存包含启动命令脚本文件jar缓存文件日志等】) 此设置需要重启集群。

四.正确使用log4j.properties

  1. 配置全局log4j.properties
    意思是所有的任务用同一个log4j.properties
  2. 独立配置log4j.properties

考虑一个使用场景,比如我们想每个任务使用独立的log4j.proprtties, 且再log4j.properties中用自定义变量定义一个路径,
这样可以达到每个任务 输出到独立的文件中,方便我们做日志采集。
上面的场景就不适合用默认的log4j.properties了

如果想要使用自定义的log4j日志配置,需要下面几个步骤:
第一种写法带 –file

  • 使用spark-submit的–files参数,上传自定义 log4j-driver.properties(名字随便)和log4j-executor.properties(名字随便)
  • 使用 --conf spark.driver.extraJavaOptions=-Dlog4j.configuration=log4j-driver.propertie
  • 使用 --conf spark.executor.extraJavaOptions=-Dlog4j.configuration=log4j-executor.properties

第二种写法不带 –file, 要求配置文件在每台机器上都存在,且必须以file: 开头,意思是本地路径协议

  • 使用 --conf spark.driver.extraJavaOptions=-Dlog4j.configuration=file:/…/…/…/log4j-driver.propertie
  • 使用 --conf spark.executor.extraJavaOptions=-Dlog4j.configuration=file:/…/…/…/log4j-executor.properties

下面附上我自己用的一个例子:

spark-submit \
--master yarn \
--deploy-mode cluster \
--class alg.test.SparSocketDemo \
--conf spark.driver.extraJavaOptions="-Dlog4j2.formatMsgNoLookups=true -Ddriver.path=/driver/mm/ -Dlog4j.configuration=dr.log4j.properties -noverify -javaagent:/opt/apps/TAIHAODOCTOR/taihaodoctor-current/emr-agent/btrace-agent.jar=libs=spark-3.2" \
--conf spark.executor.extraJavaOptions="-Dlog4j2.formatMsgNoLookups=true -Dexecutor.path=/executor/mm/ -Dlog4j.configuration=ex.log4j.properties -noverify -javaagent:/opt/apps/TAIHAODOCTOR/taihaodoctor-current/emr-agent/btrace-agent.jar=libs=spark-3.2" \
--files /root/dr.log4j.properties,/root/ex.log4j.properties \
/root/JavaAndScala-1.0-SNAPSHOT.jar 

下面是dr.log4j.properties ,仅供参考

# Set everything to be logged to the console
log4j.rootCategory=INFO, console, LOGFILElog4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p [%t] %c{1}: %m%n# Set the default spark-shell log level to WARN. When running the spark-shell, the
# log level for this class is used to overwrite the root logger's log level, so that
# the user can have different defaults for the shell and regular Spark apps.
log4j.logger.org.apache.spark.repl.Main=WARN# Settings to quiet third party logs that are too verbose
log4j.logger.org.spark_project.jetty=WARN
log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
log4j.logger.org.apache.parquet=ERROR
log4j.logger.parquet=ERROR# SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive support
log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERRORlog4j.logger.org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver=WARN# For deploying Spark ThriftServer
# SPARK-34128: Suppress undesirable TTransportException warnings involved in THRIFT-4805
log4j.appender.console.filter.1=org.apache.log4j.varia.StringMatchFilter
log4j.appender.console.filter.1.StringToMatch=Thrift error occurred during processing of message
log4j.appender.console.filter.1.AcceptOnMatch=falselog4j.appender.LOGFILE = org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File = /tmp/${driver.path}/driver.log
log4j.appender.LOGFILE.Append = true
log4j.appender.LOGFILE.layout = org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

注意我的LOGFILE 中有个 ${driver.path}, 这会接收启动命令中的 -Ddriver.path=/driver/mm/
这意味着 我的每次启动都通过-Ddriver.path=XXX 传递不同的路径,这样我的每个任务都会在不同的目录下生成日志文件。
我可以自定义appName 并将appName 凭借在上面的路径上,这在实际开发中很有意义。

大家可能会注意到上面的启动命令driver和executor分别用的不i同的log4j 配置文件, 这是为了防止driver的日志和executor混杂在一起。spark官网推荐我们这么做,这种自定义的方式还可以吧。并且我们只是在原来的基础加了一个 LOGFILE appender, 并未修log4j.properties本省的配置, 不会影响原本的日志聚合, 以及原本的日志采集。

相关文章:

spark6. 如何设置spark 日志

spark yarn日志全解 一.前言二.开启日志聚合是什么样的2.1 开启日志聚合MapReduce history server2.2 如何开启Spark history server 三.不开启日志聚合是什么样的四.正确使用log4j.properties 一.前言 本文只讲解再yarn 模式下的日志配置。 二.开启日志聚合是什么样的 在ya…...

glibc: strlcpy

https://zine.dev/2023/07/strlcpy-and-strlcat-added-to-glibc/ https://sourceware.org/git/?pglibc.git;acommit;h454a20c8756c9c1d55419153255fc7692b3d2199 https://linux.die.net/man/3/strlcpy https://lwn.net/Articles/612244/ 从这里看&#xff0c;这个strlcpy、st…...

如何在 Buildroot 中配置 Samba

在 Buildroot 中配置 Samba 在 Buildroot 中配置 Samba 可以通过以下步骤完成&#xff1a; 1. 进入 Buildroot 的根目录。 2. 执行 make menuconfig 命令&#xff0c;打开 Buildroot 的配置菜单。 3. 在配置菜单中&#xff0c;使用键盘导航到 "Target packages" 选…...

SSM02

SSM02 此时我们已经做好了登录模块接下来可以做一下学生管理系统的增删改查操作 首先&#xff0c;我们应当有一个登录成功后的主界面 在webapp下新建 1.main.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"&…...

day3_QT

day3_QT 1、文件保存2、始终事件 -闹钟 1、文件保存 2、始终事件 -闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QTime> #include <QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { clas…...

js-map方法中调用服务器接口

在 Array.prototype.map() 方法中调用服务器接口时&#xff0c;可以使用异步函数来处理。 示例&#xff1a; async function fetchData() {try {const response await fetch(https://api.example.com/data); // 通过 fetch 发送请求const data await response.json(); // 解…...

docker 已经配置了国内镜像源,但是拉取镜像速度还是很慢(gcr.io、quay.io、ghcr.io)

前言 国内用户在使用 docker 时&#xff0c;想必都遇到过镜像拉取慢的问题&#xff0c;那是因为 docker 默认指向的镜像下载地址是 https://hub.docker.com&#xff0c;服务器在国外。 网上有关配置 docker 国内镜像源的教程很多&#xff0c;像 腾讯、阿里、网易 等等都会提供…...

[linux(静态文件服务)] 部署vue发布后的dist网页到nginx

所以说&#xff1a; 1.windows下把开发好的vue工程打包为dist文件然后配置下nginx目录即可。 2.linux上不需要安装node.js环境。 3.这样子默认访问服务器ip地址&#xff0c;就可以打开&#xff0c;毕竟默认就是&#xff1a;80端口。...

智华计算机终端保护检查系统使用笔记

使用说明 【智华保密检查右键管理员运行后粘贴密码】—— 点击脚本更改系统时间【智华计算机终端保护检查系统】—— 打开检测软件进行保密检查 检测文件格式 .pdf .doc .docx .xls .pptx 检测时间日志 2023年9月14日A&#xff1a;【34:03秒】2023年9月14日B&#xff1a;【…...

前端面试话术集锦第 15 篇:高频考点(React常考进阶知识点)

这是记录前端面试的话术集锦第十五篇博文——高频考点(React常考进阶知识点),我会不断更新该博文。❗❗❗ 1. HOC 是什么?相比 mixins 有什么优点? 很多人看到高阶组件(HOC)这个概念就被吓到了,认为这东西很难,其实这东西概念真的很简单,我们先来看一个例子: func…...

汽车电子——产品标准规范汇总和梳理(适应可靠性)

文章目录 前言 一、电气性能要求 二、机械性能要求 三、气候性能要求 四、材料性能要求 五、耐久性能要求 六、防护性能要求 总结 前言 见《汽车电子——产品标准规范汇总和梳理》 一、电气性能要求 《GB/T 28046.2-2019&#xff08;ISO 16750-2&#xff1a;2012&#…...

计算机是如何工作的(上篇)

计算机发展史 世界上很多的高科技发明,来自于军事领域 计算机最初是用来计算弹道导弹轨迹的 弹道导弹 ~~国之重器,非常重要 两弹一星 原子弹,氢弹,卫星(背后的火箭发射技术) 计算弹道导弹轨迹的计算过程非常复杂,计算量也很大 ~~ 但是可以手动计算出来的(当年我国研究两弹一…...

数学建模| 优化入门+多目标规划

优化入门多目标规划 优化入门知识什么是优化问题如何判断是不是优化问题优化模型建模求解器优化问题的分类 多目标规划 优化入门知识 什么是优化问题 优化问题&#xff1a;求最优&#xff0c;例如获利最大、最少损失、最短路径、最小化风险等等。 例如&#xff1a;之前文章提…...

SSM整合Thymeleaf时,抽取公共页面并向其传递参数

第一步 创建一个名为 header.html 的公共头部页面模板&#xff0c;放在 WEB-INF 目录下的 common 文件夹中。在 header.html 中可以编写头部页面的HTML代码&#xff0c;并通过Thymeleaf的语法来接收参数&#xff0c;如下所示&#xff1a; <!DOCTYPE html> <html xml…...

接口测试 —— requests 的基本了解

● requests介绍及安装 ● requests原理及源码介绍 ● 使用requests发送请求 ● 使用requests处理响应 ● get请求参数 ● 发送post请求参数 ● 请求header设置 ● cookie的处理 ● https证书的处理 ● 文件上传、下载 requests介绍 ● requests是python第三方的HTT…...

2023年华为杯数学建模研赛D题思路解析+代码+论文

下文包含&#xff1a;2023华为杯研究生数学建模竞赛&#xff08;研赛&#xff09;D题思路解析代码参考论文等及如何准备数学建模竞赛&#xff08;22号比赛开始后逐步更新&#xff09; C君将会第一时间发布选题建议、所有题目的思路解析、相关代码、参考文献、参考论文等多项资…...

AB试验(三)一次试验的规范流程

AB试验&#xff08;三&#xff09;一次试验的规范流程 一次完整且规范的A/B试验可参考下图&#xff1a; 确定目标和假设 核心&#xff1a;A/B测试是因果推断&#xff0c;所以我们首先要确定原因和结果。目标决定了结果&#xff0c;而假设又决定了原因。 如何确定 分析问题&am…...

ROI tracking by using OpenCV

目录 source code: source code: import cv2tracker cv2.TrackerKCF_create() video cv2.VideoCapture(1)while True:ret,frame video.read()cv2.imshow("source frame",frame)k cv2.waitKey(30)if k q:break bbox cv2.selectROI(frame, False) ok tracker.i…...

(leetcode)二叉树最大深度

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 题目&#xff1a; 思路&#xff1a; 代码&#xff1a; 图解&#xff1a; 题目&#xff1a; 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数…...

【golang】调度系列之P

调度系列 调度系列之goroutine 调度系列之m 在前面两篇中&#xff0c;分别介绍了G和M&#xff0c;当然介绍的不够全面&#xff08;在写后面的文章时我也在不断地完善前面的文章&#xff0c;后面可能也会有更加汇总的文章来统筹介绍GMP&#xff09;。但是&#xff0c;抛开技术细…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...

土建施工员考试:建筑施工技术重点知识有哪些?

《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目&#xff0c;核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容&#xff0c;附学习方向和应试技巧&#xff1a; 一、施工组织与进度管理 核心目标&#xff1a; 规…...