【问题标题】:Spark SQL performance is very badSpark SQL 性能很差
【发布时间】:2015-01-09 08:38:40
【问题描述】:

我想使用 SPARK SQL。我发现性能很差。

在我的第一个解决方案中: 当每个 SQL 查询到来时, 将数据从 hbase 实体加载到 dataRDD, 然后将此dataRDD注册到SQLcontext。 最后执行 spark SQL 查询。 显然这个解决方案很糟糕,因为它每次都需要加载数据。

所以我改进了第一个解决方案。
在我的第二个解决方案中,不要考虑 hbase 数据更新和插入
应用启动时,从HBASE entity to a dataRDD, named cachedDataRDD加载当前数据。
将 cachedDataRDD 注册到 SQLcontext
当每个 SQL 查询到来时,执行 spark SQL 查询。性能非常好。

但有些实体需要考虑更新和插入。
所以我在第二个解决方案的基础上改变了解决方案。

在我的第三个解决方案中需要考虑 hbase 数据更新和插入
应用启动时,从HBASE entity to a dataRDD, named cachedDataRDD加载当前数据。
SQL查询来时,加载the new updates and inserts data to another dataRDD, named newDataRDD.
然后set cachedDataRDD = cachedDataRDD.union(dataRDD);
将 cachedDataRDD 注册到 SQLcontext
最后执行 spark SQL 查询。
但是我发现联合转换会导致获取查询结果的收集动作很慢。比 hbase api 查询慢很多。

有没有办法调优第三个方案的性能?
一般什么情况下使用spark SQL比较好?
有什么好的使用spark SQL的用例吗?
谢谢

【问题讨论】:

  • 请贴出相关代码,让我们看看你到底在做什么。

标签: apache-spark apache-spark-sql


【解决方案1】:

考虑为newDataRDD 创建一个新表并在 Spark SQL 端执行 UNION。因此,例如,不要联合 RDD,而是这样做:

SELECT * FROM data
UNION
SELECT * FROM newData

这应该会为查询优化器提供更多信息,并有望帮助您加快查询速度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    相关资源
    最近更新 更多