本节讨论Spark Standalone Mode 模式下的日志配置及作用运行过程中的历史文件的清理,避免线上环境的不合理配置导致大量的遗留数据填满磁盘导致节点服务不可用的情况。
日志文件
Spark原生支持使用log4j配置文件,针对于Spark集群的log4j日志文件应该放置在SPARK_HOME下的conf目录下使用log4j.properties进行配置,该配置文件针对于Spark集群中所有的作业进行配置,一般不建议做针对与特定应用的配置.对于特定应用程序的日志配置可以在Spark服务提交的时候使用专用的配置文件来完成,具体在使用spark-submit 提交作业的时候使用--fiels 参数将特定的配置文件提交到集群应用到各个Work节点 中生效.
标准错误&标准输出
默认情况下Spark Work目录下作业目录中的stderr stdout文件会持续写入默认没有滚动特性,对于长时间运行的服务且日志处置不合理的应用很有可能让stderr stdout文件变的很大,最终导致磁盘写满,服务宕机,Spark提供了如下参数用来控制标准错误和标准数据的输出行为:
spark.executor.logs.rolling.maxRetainedFiles 执行器保留的最大日志的个数
spark.executor.logs.rolling.strategy 执行器日志删除策略[time,size]
spark.executor.logs.rolling.maxSize 执行器记录的最大文件大小[size/字节]
spark.executor.logs.rolling.time.interval 执行器日志滚动时间间隔daily, hourly, minutely
参考http://spark.apache.org/docs/1.5.2/configuration.html#runtime-environment
Work目录清理
默认情况下,Spark对于工作目录并没有启用自动的清理流程,在具有大量调度任务的情况下,不清理工作目录极容易引发磁盘饱满的情况,导致服务异常.Spark也提供了相关参数来控制Work进程对工作目录的清理配置,相关参数如下:
spark.worker.cleanup.enabled 是否清理work目录[false]
spark.worker.cleanup.interval work目录清理周期[1800秒]
spark.worker.cleanup.appDataTtl work目录下的不活动目录的保留时间[7*24*3600秒]
参考http://spark.apache.org/docs/1.5.2/spark-standalone.html
线上环境配置
针对于Work的配置可在Spark安装目录下conf目录下的spark-env.sh文件中进行配置,以下配置来源于线上生产环境
#对WORK目录进行清理一小时检查一次,对于标准输出/标准错误的数据每小时一个文件保留最近的10个
SPARK_WORKER_OPTS='-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.interval=3600 -Dspark.executor.logs.rolling.strategy=time -Dspark.executor.logs.rolling.maxRetainedFiles=10 -Dspark.executor.logs.rolling.time.interval=hourly'