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" 应该也能加速,但是我没有尝试
  • 相关阅读:
    opennebula 编译日志
    eclipse scons 使用指南
    eclipse 安装scons
    在Windows7上搭建Cocos2d-x 3.2alpha0开发环境
    Centos6.3 jekyll环境安装
    CNN-利用1*1进行降维和升维
    偏导数
    卷积神经网络--CNN
    struts2 模型驱动
    Struts2 数据驱动
  • 原文地址:https://www.cnblogs.com/keepthinking/p/10324935.html
Copyright © 2011-2022 走看看