【问题标题】:spark sql read table very slow when compare with hive与 hive 相比,spark sql 读取表非常慢
【发布时间】:2019-03-06 15:32:02
【问题描述】:

我有一个大约有 2500 列的 hive 表,当我像这样通过 spark sql 读取它时:

val df = spark.sql("select * from dbName.tableName")

读取hive表大约需要3个小时,而我使用hive sql读取这个表,它只需要几秒钟。

谁知道为什么 spark sql 和 hive sql 之间的性能差异如此之大?非常感谢!

【问题讨论】:

    标签: apache-spark hive apache-spark-sql


    【解决方案1】:

    假设您使用的是 Hive 而不是 Impala:Hive QL 查询 select * from table 甚至不是仅 Map 的作业,而是一个边缘情况,即创建“获取任务”而不是一个 MR 任务,它只是按原样转储数据而不对其进行任何操作。我似乎记得在我刚开始的时候也注意到了这一点。 IE。边缘情况,它不需要计数、求和、过滤等,可以这样做。

    val df ...另一方面,正在构建一个数据帧,它需要通过改组、资源分配(通过 YARN)等来完成。我们对环境一无所知,因为您没有说明,如果 Spark Standalone 或 YARN,则调度策略到位。

    在任何情况下,即使使用 MR 选择返回第一组行的速度也相对较快,我怀疑它与宽列几乎没有关系,当然除了更多的工作,但对你提出问题的方式。

    【讨论】:

    • 非常感谢,您的回答帮助我理解了为什么 Hive SQL 在执行器select * from db.table 时比 Spark SQL 更快。稍后我将更新我的问题,以显示窄列和宽列之间的火花性能差异。
    • 我发了一个关于performance of spark sql read wide hive table的新问题,希望您能给我一些建议,非常感谢。
    猜你喜欢
    • 2015-01-27
    • 1970-01-01
    • 2021-08-13
    • 2021-01-12
    • 2021-02-13
    • 2012-10-20
    • 2017-05-07
    • 1970-01-01
    • 2014-09-06
    相关资源
    最近更新 更多