【发布时间】: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