SparkSql调用hive Insert语句执行超级慢

问题描述

在使用Spark SQL 执行

    sparkseccion.sql("insert overwrite table xxxx partition(date_time) select * from zzzz")

的时候,非常慢,大约需要3个小时跑完1.4m的数据。而如果将其保存在本地大约2分钟跑完。查询Hive的数据基本上是秒查。

问题出现的环境背景及自己尝试过哪些方法

版本信息:

  • Spark 2.1.0
  • Hive 1.2.0
  • scala 2.11

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

val ss = SparkSession.builder().appName("test spark sql").config(conf).enableHiveSupport().getOrCreate()
// 将zzzz表的数据插入到xxxx表中
ss.sql("insert overwrite table xxxx partition(date_time) select * from zzzz")

你期待的结果是什么?实际看到的错误信息又是什么?

5分钟内将其执行完毕,并且xxxx的数据写入成功。
目前可以写入成功,但是却需要3个小时的时间。

阅读 10.8k
2 个回答

你可以把数据保存成 parquet 或者 orc 格式,作为 hive 的外部表加载,这样很快。

新手上路,请多包涵

看你的hive有个date_time 的动态分区, 你想看看你的动态分区,是不是非常多
这个玩意很大的话,非常影响性能的
还有就是,要学会看日志, 明白自己的程序到底在做什么,在那个步骤运行时间长,就会比较好的解决问题了

sparksql 还要注意一点就是小文件问题spark 输出到hdfs小文件过多,如何解决spark小文件问题呢?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进