SPARK SQL を使用したい。パフォーマンスが非常に悪いことがわかりました。
私の最初の解決策: 各 SQL クエリが来ると、データを hbase エンティティから dataRDD にロードし、この dataRDD を SQLcontext に登録します。最後に、spark SQL クエリを実行します。毎回データをロードする必要があるため、明らかにソリューションは非常に悪いです。
だから私は最初の解決策を改善しました。
私の 2 番目のソリューションでは、hbase データの更新と挿入を考慮しません。
アプリの起動時に、現在のデータを から読み込みますHBASE entity to a dataRDD, named cachedDataRDD
。
cachedDataRDD を SQLcontext に登録
する 各 SQL クエリが来たら、spark SQL クエリを実行します。パフォーマンスはとても良いです。
ただし、エンティティによっては、更新と挿入を考慮する必要があります。
そこで、2 番目のソリューションに基づいてソリューションを変更しました。
私の 3 番目のソリューションでは、hbase データの更新と挿入を考慮する必要があります。
アプリの起動時に、現在のデータを から読み込みますHBASE entity to a dataRDD, named cachedDataRDD
。
SQL クエリが来たら、ロードし、
cachedDataRDD を SQLcontext に登録しthe new updates and inserts data to another dataRDD, named newDataRDD.
ます
。最後に、spark SQL クエリを実行します。
しかし、ユニオン変換により、クエリ結果を取得するための収集アクションが非常に遅くなることがわかりました。hbase api クエリよりもはるかに遅い。set cachedDataRDD = cachedDataRDD.union(dataRDD);
3 番目のソリューションのパフォーマンスを調整する方法はありますか?
通常、spark SQL を使用するのにどのような条件が適していますか?
spark SQL を使用する良いユースケースはありますか?
ありがとう