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

记一次Spark 提交任务执行缓慢之问题解决了

任务背景

5分钟一个批次,实现大小表的join,单批次大表数据量3GB,小表数据量5MB。

提交任务参数

/usr/bin/spark-submit \
--master yarn \
--deploy-mode client \
--queue root.xxx \
--executor-memory 8g \
--num-executors 20 \
--executor-cores 4 \
--driver-memory 10G \
--conf spark.sql.shuffle.partitions=10 \
--class com.xxx.Xxx \
hdfs://xxx/xxx.jar 202208170015

现象

Spark History 页面

 Yarn 页面

思路步骤

  • 通过client 模式提交任务,打印执行日志到客户端

--deploy-mode client

  • 通过执行日志分析任务执行阶段的耗时情况,通过下图可以发现,在注册块管理器和之间有1分26秒的时间(11分47秒到13分13秒)是没有日志打印的,占整个任务时长的34%

  • 执行job之前,注册 Executor之后,有1分26秒的耗时,没有详细的日志,修改spark client log4j的日志等级为DEBUG

vim $SPARK_HOME/conf/log4j.properties

# Set everything to be logged to the console
# log4j.rootCategory=INFO, console # 默认是INFO
log4j.rootCategory=DEBUG, console
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.eclipse.jetty=WARN
log4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO

  • 重新执行任务,查看在注册和执行job之间,一直在跟resourcemanager通信,来获取 application 报告信息

问题产生原因

spark sql where 条件当中,分区字段的值没有用引号括起来,导致谓词没有成功下推,通过查看执行计划,现象如下:

 

解决办法

分区字段的值加上''就好了,通过查看执行计划,现象如下:

InMemroyFileIndex数组中包含要计算的hive分区对应的hdfs路径,避免了全hdfs目录扫描的过程,很大程度降低了任务耗时。

相关文章:

  • softmax函数计算时减去一个最大值的原因
  • MogDB逻辑解码与pg_recvlogical
  • OS--学习笔记:进程管理
  • CentOS8 安装Yapi
  • Git 详细教程之四: Git 对 GitHub 的配置和基本操作
  • 海外众筹:产品出海kickstarter海外众筹流程
  • JVM阶段(4)-回收策略
  • 万字长文保姆级教你制作自己的多功能QQ机器人
  • 365天深度学习 | 第7周:咖啡豆识别
  • 深入剖析JavaScript(二)——异步编程
  • 工业智能网关BL110应用之七: 支持 Modbus ,MQTT,opc 等协议,上传到阿里华为云等LOT
  • c和指针-struct结构
  • 计算机网络 二、网络协议
  • 容器编排工具鉴赏- docker-compose 、Kubernetes、OpenShift、Docker Swarm
  • 【论文笔记】—低光图像增强—Supervised—URetinex-Net—2022-CVPR
  • 30天自制操作系统-2
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • express如何解决request entity too large问题
  • FastReport在线报表设计器工作原理
  • gf框架之分页模块(五) - 自定义分页
  • gulp 教程
  • httpie使用详解
  • Java 23种设计模式 之单例模式 7种实现方式
  • Javascript设计模式学习之Observer(观察者)模式
  • python学习笔记-类对象的信息
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 安卓应用性能调试和优化经验分享
  • 产品三维模型在线预览
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • - 概述 - 《设计模式(极简c++版)》
  • 后端_MYSQL
  • 近期前端发展计划
  • 排序算法学习笔记
  • 前端存储 - localStorage
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 移动端解决方案学习记录
  • 与 ConTeXt MkIV 官方文档的接驳
  • 【云吞铺子】性能抖动剖析(二)
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • (13)Hive调优——动态分区导致的小文件问题
  • (C语言)fread与fwrite详解
  • (libusb) usb口自动刷新
  • (SpringBoot)第二章:Spring创建和使用
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (六)Hibernate的二级缓存
  • (一)基于IDEA的JAVA基础12
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)Oracle存储过程编写经验和优化措施
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .NET Core中Emit的使用
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON