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

  • 相关阅读:
    【iOS】去掉Tabbar顶部线条
    iOS中控制器的释放问题
    码云平台帮助文档_V1.2
    iOS键盘 样式/风格
    cocoapods的安装 升级版
    Unity异常捕获
    tomcat和jdk的安装配置
    Unity读取Excel表格
    NFS
    K8S存储相关yaml
  • 原文地址:https://www.cnblogs.com/barneywill/p/10187827.html
Copyright © 2011-2022 走看看