此文已由作者岳猛授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

任何时候日志都是定位问题的关键,spark也不会例外,合适的配置和获取spark的driver,am,及executor日志将会提升问题定位的效率,这里初步整理了spark的一些配置,更好的日志配置还需要根据实际的情况。

1)dirver日志的配置,可以通过spark.driver.extraJavaOptions设置加载log4j.properties文件的路径,如:

spark.driver.extraJavaOptions        -Dlog4j.configuration=file:/home/hadoop/ym/spark-1.6.1-bin-hadoop2.6/conf/log4j.properties

具体log4j.properties参考:

# Set everything to be logged to the console
log4j.rootCategory=INFO, console,rolling
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 %c{1}: %m%n
# 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.appender.rolling=org.apache.log4j.RollingFileAppender
log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
log4j.appender.rolling.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} - [%p] - [%l] %m%n
log4j.appender.rolling.Append=true
log4j.appender.rolling.Encoding=UTF-8
log4j.appender.rolling.MaxBackupIndex=5
log4j.appender.rolling.MaxFileSize=200MB
log4j.appender.rolling.file=/home/hadoop/ym/logs/${spark.app.name}.driver.log
log4j.logger.org.apache.spark=INFO
log4j.logger.org.eclipse.jetty=WARN

这样的配置可以使Application的日志以AppName.driver.log的形式存放于你指定的目录。

2)executor的日志,可以通过spark.executor.extraJavaOptions设置加载log4j.properties文件的路径,如:

spark.executor.extraJavaOptions     -Dlog4j.configuration=file:/home/hadoop/ym/spark-1.6.1-bin-hadoop2.6/conf/log4j-executor.properties

具体log4j.properties参考:

# Set everything to be logged to the console
log4j.rootCategory=INFO,rolling
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 %c{1}: %m%n
# 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.appender.rolling=org.apache.log4j.RollingFileAppender
log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
log4j.appender.rolling.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} - [%p] - [%l] %m%n
log4j.appender.rolling.Append=true
log4j.appender.rolling.Encoding=UTF-8
log4j.appender.rolling.MaxBackupIndex=5
log4j.appender.rolling.MaxFileSize=2MB
log4j.appender.rolling.file=${spark.yarn.app.container.log.dir}/stdout
log4j.logger.org.apache.spark=DEBUG
log4j.logger.org.eclipse.jetty=WARN
其中executor日志分为运行时日志以及结束日志,两种日志分别存放于不同的位置,运行时候的日志文件存放于yarn.nodemanager.log−dirs/{ApplicationID},如:
<property>
   <name>yarn.nodemanager.log-dirs</name>
   <value>file:/mnt/ddb/2/hadoop/nm</value>
</property>

那么运行时候的executor日志存放于:

root@xxx:/mnt/ddb/2/hadoop/nm/application_1471515078641_0007# ls

container_1471515078641_0007_01_000001  container_1471515078641_0007_01_000002  container_1471515078641_0007_01_000003

其中container_1471515078641_0007_01_000001为RM为application_1471515078641_0007分配的第一个container,即AM所在的container,第一个container都是运来启动AM的,containerID形式为,container_APPID_01_000001,你在RM日志文件里面根据container_APPID搜索即可看到为该APPID分配的container的分布情况及生命周期。

运行结束以后日志会聚合到HDFS上面去,具体路径为/tmp/logs/${user}/logs,如:

drwxrwx---   - root supergroup          0 2016-08-18 18:29 /tmp/logs/root/logs/application_1471515078641_0002

drwxrwx---   - root supergroup          0 2016-08-18 19:10 /tmp/logs/root/logs/application_1471515078641_0003

drwxrwx---   - root supergroup          0 2016-08-18 19:17 /tmp/logs/root/logs/application_1471515078641_0004

3)am的日志配置,可以通过spark.yarn.am.extraJavaOptions设置加载log4j.properties文件的路径,如:

spark.yarn.am.extraJavaOptions     -Dlog4j.configuration=file:/home/hadoop/ym/spark-1.6.1-bin-hadoop2.6/conf/log4j-executor.properties

因为am和executor都是运行在container里面,具体log4j.properties可以参考executor的,这里不再多说。

补充一些:

下面重点说下,遇见spark问题该怎么去排查日志,都排查哪些日志,spark的运行流程可以参考http://ks.netease.com/blog?id=5174,这这边每个过程都代表着不同的日志文件。

一,SC初始化的过程中出现问题的排查方式

1)driver提交到RM的时候,如果提交不上去,首先排查driver日志,其次根据APPID排查RM日志看下APP生命周期

2)RM启动AM的过程出现问题,首先排查RM日志看为APP分配的第一个container下发到哪个NM上面去了,到对应的NM上面去根据containerID查看其生命周期哪里出现问题了

3)AM启动了,向RM申请container的过程出现了问题,首先查看am的日志,即第一个container的日志,排查下都申请了哪些container,这些container都下发了哪些节点,然后到对应节点的NM日志上根据containerID查看其生命周期情况

4)executor启动了,无法注册到driver,这时候就要去查看对应的executor的日志

二,SC.action以后的问题排查

1)首先在driver日志里面去查看都有哪些job,哪些job failed了,然后找到failed的job,查看该job都有哪些stage,然后排查下那个stage失败了,然后去查看该stage都有哪些task,哪个task失败了,找到失败的task下发的executor,然后去这个executor日志上,根据task id排查这个task的生命周期。

2)如果是executorLost的,除了要看这个executor的日志外,还要看这个container所在的nm日志,看下根据containerID看下器生命周期

3)如果是写HDFS上出现问题了,首先排查nm日志,根据nm日志去排查出现问题的datanode日志。

中间有些由于自己理解的不事很好,可能存在问题,请见谅。

最后说一点,排查问题是学习的最好方式,排查完之后能深入了的明白原理,问题处理的越多,学习也就越快,每个人都是从一头雾水走过来。

免费体验云安全(易盾)内容安全、验证码等服务

更多网易技术、产品、运营经验分享请点击

相关文章:
【推荐】 四两拨千斤式的攻击!如何应对Memcache服务器漏洞所带来的DDoS攻击?

spark日志配置及问题排查方式。的更多相关文章

  1. (转)spark日志配置

    一.第一部分 1.spark2.1与hadoop2.7.3集成,spark on yarn模式下,需要对hadoop的配置文件yarn-site.xml增加内容,如下: <property> ...

  2. Spark log4j日志配置详解(转载)

    一.spark job日志介绍    spark中提供了log4j的方式记录日志.可以在$SPARK_HOME/conf/下,将 log4j.properties.template 文件copy为 l ...

  3. spark入门(四)日志配置

    1 背景 在测试spark计算时,将作业提交到yarn(模式–master yarn-cluster)上,想查看print到控制台这是很难的,因为作业是提交到yarn的集群上,所以,去yarn集群上看 ...

  4. 6、架构--Nginx虚拟主机(基于多ip、端口、域名方式)、日志配置、Nginx模块(访问控制模块、状态监控模块、访问链接控制模块)

    笔记 1.晨考 2.昨日问题 3.今日内容 1.Nginx虚拟主机 - 基于多IP的方式 - 基于多端口的方式 - 基于多域名的方式 2.日志配置 Nginx有非常灵活的日志记录模式,每个级别的配置可 ...

  5. Hive on Spark安装配置详解(都是坑啊)

    个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/p/a7f75b868568 简介 本文主要记录如何安装配置Hive on Sp ...

  6. Nginx 日志分析及性能排查

    Nginx 日志分析及性能排查 2017-03-04 Linux爱好者 (点击上方公众号,可快速关注) 作者:-外星人- my.oschina.net/362228416/blog/844713 如有 ...

  7. Spark 属性配置

    1.Spark1.x 属性配置方式 Spark属性提供了大部分应用程序的控制项,并且可以单独为每个应用程序进行配置. 在Spark1.0.0提供了3种方式的属性配置: SparkConf方式 Spar ...

  8. Spark日志,及设置日志输出级别

    Spark日志,及设置日志输出级别 1.全局应用设置 2.局部应用设置日志输出级别 3.Spark log4j.properties配置详解与实例(摘录于铭霏的记事本) 文章内容来源: 作者:大葱拌豆 ...

  9. 功能:SpringBoot日志配置详情

    SpringBoot日志配置详情 一.介绍 在所有的项目中,日志是必不可少的,为了高效清晰的查找日志,可以配置日志输出的等级和格式. 在配置后,可以自定义输出日志到指定目录,可以按照天数来分割日志,可 ...

随机推荐

  1. 获取系统屏幕尺寸参数的类WxHxD

    获取系统屏幕尺寸参数的类WxHxD 源码: // // WxHxD.h // PM2.5 // // Created by YouXianMing on 14/10/29. // Copyright ...

  2. Jenkins定时构建和轮询SCM设置说明

    看图说事: 一.定时构建:不管SVN或Git中数据有无变化,均执行定时化的构建任务 : 二.轮询SCM:只要SVN或Git中数据有更新,则执行构建任务: 三.构建语法说明: 1.首先格式为:* * * ...

  3. 制作MacOS 系统启动盘

    1,首先需要在一台有MacOS系统,在Apple stroe下载MacOS High Sierra安装程序: 2,准备一个至少8G容量的U盘: 3,打开 “应用程序 → 实用工具 → 磁盘工具”,将U ...

  4. October 07th 2017 Week 40th Saturday

    Knowledge is a treasure but practice is the key to it. 知识是宝藏,但实践才是打开它的钥匙. Experience often comes fro ...

  5. Scala编写的打印乘法口诀和金字塔

       刚开始接触scala,觉得语法简单,一时兴起就写了两个简单的例子 public class Calculate { public static void test1(){ for(int i=1 ...

  6. 浅谈MyBatis缓存

    在谈论MyBatis的缓存之前,我们先说说它的延迟加载,所谓延迟加载, resultMap中的association和collection标签具有延迟加载的功能.延迟加载的意思是说,在关联查询时,利用 ...

  7. ajax跨域调用webservice例子

    [WebMethod(Description = "这是一个描述")] public void GetTIM() { try { SqlDataAdapter da = new S ...

  8. python基础整理6——爬虫基础知识点

    爬虫基础 什么是爬虫: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁. ...

  9. 关于lora标配SPDT大功率射频开关

    SPDT大功率的UltraCMOS ™DC - 3.0 GHz射频开关              PE4259的UltraCMOS ™射频开关被设计为覆盖广泛的,通过3000兆赫从近DC应用.这种反射 ...

  10. MySQL(二)索引背后的数据结构及算法原理

    本文转载自CodingLabs,原文链接 MySQL索引背后的数据结构及算法原理 目录 摘要 一.数据结构及算法基础 1. 索引的本质 2. B-Tree和B+Tree 3. 为什么使用B-Tree( ...