zoukankan      html  css  js  c++  java
  • Spark 写 Hive table 非常慢【解决】

    代码如下:
    dataFrame.createOrReplaceTempView("view_page_utm")

    val sql =
    s"""
    |insert overwrite table data_lake_v1.urchin_tracking_module PARTITION(cd='$date', tag ='ads')
    | select p_id, platform, utm_campaign, utm_source, utm_term, utm_medium, ext_timestamp
    | from view_page_utm
    """.stripMargin
    logger.info(s"sql -> $sql")
    spark.sql(sql)
    logger.info("sql done.")

    执行代码 spark.sql 执行了 15分钟,看到 spark job 也结束了,但是 sql done 的日志,过了 40 分钟才出来。观察了 spark driver 上的日志,感觉时间花在 Hive 在拷贝文件上。


    解决方案
    1. 默认情况下, dataFrame 有 200 个分区,往hive中也写入了 200 的文件。这儿做了
       dataFrame.reparition(1)
    速度就有了巨大提升
    2. 具体原理没有特别理解,查到一个相关的问题:
    https://issues.apache.org/jira/browse/HIVE-13382
    https://issues.apache.org/jira/browse/HIVE-11940
    其中第二的链接说,hive为每一个分区创建一个 distcp 任务,所以分区越多越慢。
    设置 "exec.stagingdir=/tmp/hive" 应该也能加速,但是我没有尝试
  • 相关阅读:
    Django —— DateTimeField格式
    Django——权限组件(中间件判断用户权限--URL初级)
    linux命令
    性能测试--测试分类
    web安全之csrf攻击
    web安全之xss攻击
    测试用例规范
    禅道操作手册
    fiddler弱网测试
    Web测试系列之测试工具
  • 原文地址:https://www.cnblogs.com/keepthinking/p/10324935.html
Copyright © 2011-2022 走看看