spark6. 如何设置spark 日志

news2024/11/28 3:53:05

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 true
	spark.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, LOGFILE

log4j.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=ERROR

log4j.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=false

log4j.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本省的配置, 不会影响原本的日志聚合, 以及原本的日志采集。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1008575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#,数值计算——哈希表的实现代码

1 文本格式 using System; using System.Collections; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Hash<K, V> : Hashtable<K> { private List<V> els { get; set; } new List<V>(); public Ha…

iPhone苹果15手机圆点怎么设置让屏幕上显示出来圆形图标?

iPhone苹果15手机圆点怎么设置让屏幕上显示出来圆形图标&#xff1f; 1、在iPhone苹果手机上找到「设置」并点击打开&#xff1b; 2、在苹果iPhone设置内找到「辅助功能」并点击打开&#xff1b; 3、在苹果iPhone手机辅助功能内的动作交互内找到「触控」并点击打开&#xff1b…

车联网远程监控管理提升车辆调度效率,实现高效运营

随着智慧城市建设与物联网技术发展&#xff0c;车辆使用4G工业路由器网络实现车联网&#xff0c;并对车上视频监控、GPS定位以及温湿度传感器等信息进行数据采集和实时传输。这些数据的采集和监测将通过4G网络上传到管理平台&#xff0c;为车辆调度和运行效率的优化提供了有力的…

全局滚动条样式修改,elementUI table底部滚动条遮挡

/* 整个滚动条 */ ::-webkit-scrollbar {width: 15px !important;height: 15px !important; } /* 滚动条上的滚动滑块 */ ::-webkit-scrollbar-thumb {border-radius: 32px; } /* 滚动条轨道 */ ::-webkit-scrollbar-track {border-radius: 32px; }// 如果想作用组件 可以 .xxx…

项目--苍穹外卖

1.| constant | 存放相关常量类 | | context | 存放上下文类 | | enumeration | 项目的枚举类存储 | | exception | 存放自定义异常类 | | json | 处理json转换的类 | | properties | 存放SpringBoot相关的配置属性类 | | result | 返回结果类的封装 | | utils | 常用工具类 | …

✔ ★算法基础笔记(Acwing)(二)—— 数据结构(17道题)【java版本】

数据结构 1. 单链表模板1. 单链表(7分钟) 2. 双链表模板1. 双链表 3. 模拟栈1. 模拟栈(一个数组即可)2. 表达式求值(20分钟) 4. 队列 tt -1,hh 0;1. 模拟队列 5. 单调栈1. 单调栈(4分钟)3.14 6. 单调队列1. 滑动窗口例题(10分钟) 7. KMP1. KMP字符串(10分钟)二刷体会★三刷体…

Python之glob

import os import glob import datetime # for dirpath, dirname, files in os.walk(rE:\htdos\Project): # print(dirpath, dirname, files)# glob.glob(**) 当前目录的所有文件和文件夹 # glob.glob(**/) 当前目录的所有文件夹 # glob.glob(20*) 找到当前目录以20开头的…

HDMI协议Ver2.0a(学习笔记)

1 简介 本规范由HDMI论坛制定 2.目的和范围 本文件构成了高清多媒体接口2.0版规范&#xff08;HDMI规范2.0版&#xff09;。本规范通过引用纳入了HDMI规范1.4b版&#xff0c;并定义了附加和改进的功能。对Source、Sink、中继器和电缆的合规性所需的机械、电气、行为和协议要…

解决java.lang.reflect.ReflectionException: Reflection error

解决java.lang.reflect.ReflectionException: Reflection error 摘要引言正文1. 理解异常的根本原因2. 处理反射操作错误用法获取类的方式不正确&#xff1a;调用方法的方式不正确&#xff1a; 3. 处理访问权限问题4. 异常处理 总结参考资料 博主 默语带您 Go to New World. ✍…

Unity 课时 1 : No.1 模拟面试题

课时 1 : No.1 模拟面试题 C# 1.装箱和拆箱是什么&#xff1f; ​ 对于应用类型。将基类的子类转化成基类称为装箱。将基类转换成子类&#xff0c;成为拆箱。装箱通常使用隐式转换&#xff0c;拆箱可以使用 as 或者 强制转换。同样对于值类型也可以进行装箱和拆箱。 答案&a…

C++11—线程库

C线程库 文章目录 C线程库线程的创建thread提供的成员函数get_idthis_thread命名空间线程的回收策略join detach 线程函数参数mutex的种类lock_guardunique_lock原子性操作库(atomic)cas操作windows和Linux创建进程的区别 线程的创建 调用无参的构造函数 thread() noexcept;#in…

视频云存储/安防监控/AI分析/视频AI智能分析网关行为分析算法应用场景汇总

随着城市经济的日益发展&#xff0c;城市建设也如火如荼。很多施工人员为了自身方便&#xff0c;无视安全规章制度&#xff0c;不按照安全施工要求进行着装、施工。具有很大的安全隐患&#xff0c;一旦发生事故&#xff0c;就会造成人员损伤和工程进度的挤压。为了改善此问题&a…

QT实战之翻金币游戏【详细过程及介绍】

目录 前言 一、游戏整体分析 二、创建项目 三、添加资源 四、主界面实现 1、设置游戏主场景基本配置 2、设置背景图片 3、创建开始按钮并设置动画 4、创建关卡选择界面并实现主界面与其的切换 五、关卡选择界面实现 1、设置关卡选择场景基本配置 2、设置关卡选择场…

2-2 自动微分机制

神经网络是如何更新网络参数的呢&#xff1f; 为什么需要自动微分机制&#xff1f; 以及什么是自动微分机制&#xff1f; 神经网络通常依赖反向传播求梯度来更新网络参数&#xff0c;求梯度过程通常是一件非常复杂而容易出错的事情。而深度学习框架可以帮助我们自动地完成这种求…

PostgreSQL数据库IPC——SI Message Queue

SI Message Queue代码位于src/backend/storage/ipc/sinvaladt.c和src/backend/storage/ipc/sinval.c文件中&#xff0c;属于PostgreSQL数据库IPC进程间通信的一种方式【之前介绍过PostgreSQL数据库PMsignal——后端进程\Postmaster信号通信也是作为PostgreSQL数据库IPC进程间通…

Linux下Minio分布式存储安装配置(图文详细)

文章目录 Linux下Minio分布式存储安装配置(图文详细)1 资源准备1.1 创建存储目录1.2 获取Minio Server资源1.3 获取Minio Client资源 2 Minio Server安装配置2.1 切换目录2.2 后台启动2.3 查看进程2.4 控制台测试 3 Minio Client安装配置3.1 切换目录3.2 移动mc脚本3.2 运行mc命…

记录一次LiteFlow项目实战

文章目录 学习LiteFlowspring boot整合LiteFlow依赖配置组件定义spring boot配置文件规则文件的定义 执行 组件EL规则串行并行 动态构建组件动态构建chain&#xff08;流程&#xff09;销毁chain高级特性 题外话&#xff1a; 最近喜欢上骑摩托车了&#xff0c;不是多大排量的摩…

C++ if...else 语句

一个 if 语句 后可跟一个可选的 else 语句&#xff0c;else 语句在布尔表达式为假时执行。 语法 C 中 if…else 语句的语法&#xff1a; if(boolean_expression) {// 如果布尔表达式为真将执行的语句 } else {// 如果布尔表达式为假将执行的语句 }如果布尔表达式为 true&…

联想拯救者Lenovo Legion Y7000 2020H(81Y7)原厂Win10系统

链接&#xff1a;https://pan.baidu.com/s/15GwrfjvhK3-_OlhkfPyUbA?pwd4v03 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;ISO 文件大小&#xff1a;10.7GB 注&#xff1a;恢复…

用vb语言编写一个抄底的源代码程序实例

以下是一个基于通达信软件编写的简单抄底源代码程序&#xff0c;用于自动识别股票的底部形态并发出买入信号&#xff1a; vbs 复制 导入通达信软件自带的股票数据接口 Dim TdxApi Set TdxApi CreateObject("TdxApi.TdxLocalAPI") 设置股票代码、周期、数据类型等参…