今天遇到一个问题,spark应用中在一个循环里执行sql,每个sql都会向一张表写入数据,比如

insert overwrite table test_table partition(dt) select * from test_table_another;

除了执行sql没有其他逻辑,每个sql都会对应1个job,在spark web ui上看到job和job之间会停顿几分钟,并且非常有规律,任何两个job之间都会停顿,是不是很神奇?

答案揭晓:

spark在执行insert overwrite table partition的时候,分为两个部分,一个是执行select(读数据),一个是执行load partition(写数据),具体详见执行计划;

每个sql对应1个job,这个job执行的select部分(读数据),不包含load partition部分(写数据),因为spark为了兼容hive,直接使用hive的元数据库,所有ddl操作都是通过反射直接调用hive的代码(spark2.1依赖的是hive1.2),这个过程并不包含在spark job中,所以看起来job执行完之后停顿了几分钟才执行下个job,这里停顿的几分钟其实是在做load partition操作(写数据);

这里还有另外一个问题,hive1.2在loadPartition删除文件时是串行操作,非常慢,这个问题在hive2时改为线程池解决,具体代码及问题解析详见:https://www.cnblogs.com/barneywill/p/10154922.html

【原创】大叔经验分享(20)spark job之间会停顿几分钟的更多相关文章

  1. 【原创】经验分享:一个小小emoji尽然牵扯出来这么多东西?

    前言 之前也分享过很多工作中踩坑的经验: 一个线上问题的思考:Eureka注册中心集群如何实现客户端请求负载及故障转移? [原创]经验分享:一个Content-Length引发的血案(almost.. ...

  2. 【原创】大叔经验分享(23)spark sql插入表时的文件个数研究

    spark sql执行insert overwrite table时,写到新表或者新分区的文件个数,有可能是200个,也有可能是任意个,为什么会有这种差别? 首先看一下spark sql执行inser ...

  3. 【原创】大叔经验分享(19)spark on yarn提交任务之后执行进度总是10%

    spark 2.1.1 系统中希望监控spark on yarn任务的执行进度,但是监控过程发现提交任务之后执行进度总是10%,直到执行成功或者失败,进度会突然变为100%,很神奇, 下面看spark ...

  4. 【原创】大叔经验分享(15)spark sql limit实现原理

    之前讨论过hive中limit的实现,详见 https://www.cnblogs.com/barneywill/p/10109217.html下面看spark sql中limit的实现,首先看执行计 ...

  5. 【原创】大叔经验分享(14)spark on yarn提交任务到集群后spark-submit进程一直等待

    spark on yarn通过--deploy-mode cluster提交任务之后,应用已经在yarn上执行了,但是spark-submit提交进程还在,直到应用执行结束,提交进程才会退出,有时这会 ...

  6. 【原创】大叔经验分享(13)spark运行报错WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting port 1.

    本地运行spark报错 18/12/18 12:56:55 WARN Utils: Service 'sparkDriver' could not bind on port 0. Attempting ...

  7. 【原创】大叔经验分享(12)如何程序化kill提交到spark thrift上的sql

    spark 2.1.1 hive正在执行中的sql可以很容易的中止,因为可以从console输出中拿到当前在yarn上的application id,然后就可以kill任务, WARNING: Hiv ...

  8. 【原创】大叔经验分享(5)oozie提交spark任务如何添加依赖

    spark任务添加依赖的方式: 1 如果是local方式运行,可以通过--jars来添加依赖: 2 如果是yarn方式运行,可以通过spark.yarn.jars来添加依赖: 这两种方式在oozie上 ...

  9. 【原创】大叔经验分享(39)spark cache unpersist级联操作

    问题:spark中如果有两个DataFrame(或者DataSet),DataFrameA依赖DataFrameB,并且两个DataFrame都进行了cache,将DataFrameB unpersi ...

随机推荐

  1. Java 创建一个简单的验证码图片

    代码如下: package lixin.gan.test; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2 ...

  2. Linux 默认连接数

    Linux 默认连接数 - 国内版 Binghttps://cn.bing.com/search?FORM=U227DF&PC=U227&q=Linux+%E9%BB%98%E8%AE ...

  3. 【win7】安装开发环境

    1. 通用版主分支合并到v3,并删除data下无用文件或添加data有用文件 2. xampp php7与php5切换 是否可以行? 换phpstudy 默认支持php 32位,而我们要下载支持64的 ...

  4. CCProxy使用说明

    CCProxy:通过手机调试webservice工具 第一步配置,点击设置 弹出如下页面点击E 弹出如下页面 配置端口,点击确定配置完成!! c#项目在路径为DCYS\.vs\config下找到文件a ...

  5. bzoj 4260: Codechef REBXOR (01 Trie)

    链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4260 题面: 4260: Codechef REBXOR Time Limit: 10 S ...

  6. n98-magerun2.phar

    installl: 1,cd /usr/local/bin && curl -O https://files.magerun.net/n98-magerun2.phar 2,chmod ...

  7. python yield 理解与用法

    1.一句话快速理解 yield 等于 return  这么简单理解 2.详细说明: yield和return的关系和区别了,带yield的函数是一个生成器,而不是一个函数了 这个生成器有一个函数就是n ...

  8. Java【第七篇】面向对象之类设计

    Java类的继承 类继承语法规则 < 修饰符> class < 子类名称> [extends < 父类>] { <属性和方法的声明> }  类的继承 子 ...

  9. Matlab常用函数集锦

    ndims(A)返回A的维数size(A)返回A各个维的最大元素个数length(A)返回max(size(A))[m,n]=size(A)如果A是二维数组,返回行数和列数nnz(A)返回A中非0元素 ...

  10. [BJOI2019] 光线

    看起来很麻烦,做起来并不难的题 以下设:$a_i=\frac{a_i}{100},b_i=\frac{b_i}{100}$ 显然,如果$b_i=0$的话,直接求$\Pi a_i$就是答案. 解决反射问 ...