我想使用 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 有什么好的用例吗?
谢谢