zoukankan      html  css  js  c++  java
  • 【原创】大叔经验分享(20)spark job之间会停顿几分钟

    今天遇到一个问题,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

  • 相关阅读:
    jQuery 全选-------左右移动select
    圆饼 折线图的 js
    折线图
    圆饼图
    el 表达式的if else
    list查询出来后存到map里
    spring Mvc 二级联动(3)
    Python之列表
    SAS 中的数据拼接
    Git 安装不是默认路径,生成密钥
  • 原文地址:https://www.cnblogs.com/barneywill/p/10187827.html
Copyright © 2011-2022 走看看