Spark SQL性能非常糟糕

时间:2015-01-09 08:38:40

标签: apache-spark apache-spark-sql

我想使用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的好用例?
谢谢< / p>

1 个答案:

答案 0 :(得分:0)

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

SELECT * FROM data
UNION
SELECT * FROM newData

这应该为查询优化器提供更多信息,并希望有助于提高查询速度。