码迷,mamicode.com
首页 > 其他好文 > 详细

Spark 写 Hive table 非常慢

时间:2019-01-26 21:38:53      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:情况下   row   情况   mes   rac   链接   form   view   apach   

代码如下:
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" 应该也能加速,但是我没有尝试

Spark 写 Hive table 非常慢

标签:情况下   row   情况   mes   rac   链接   form   view   apach   

原文地址:https://www.cnblogs.com/keepthinking/p/10324935.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!