1

我想使用 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.
然后 将 cachedDataRDD 注册到 SQLcontext 最后执行 spark SQL 查询。 但是我发现联合转换会导致获取查询结果的收集动作很慢。比 hbase api 查询慢得多。set cachedDataRDD = cachedDataRDD.union(dataRDD);


有没有办法调整第三个解决方案的性能?
通常在什么条件下使用spark SQL比较好?
使用 spark SQL 有什么好的用例吗?
谢谢

4

1 回答 1

0

考虑为 Spark SQL 端创建一个新表newDataRDD并执行 UNION。因此,例如,不要合并 RDD,而是执行以下操作:

SELECT * FROM data
UNION
SELECT * FROM newData

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

于 2015-08-12T05:40:35.560 回答