以下の私のコードのアルゴリズム
Step1。1 つの hbase エンティティ データを hBaseRDD に取得する
JavaPairRDD<ImmutableBytesWritable, Result> hBaseRDD =
jsc.newAPIHadoopRDD(hbase_conf, TableInputFormat.class,
ImmutableBytesWritable.class, Result.class);
Step2 . hBaseRDD を rowPairRDD に変換する
// in the rowPairRDD the key is hbase's row key, The Row is the hbase's Row data
JavaPairRDD<String, Row> rowPairRDD = hBaseRDD
.mapToPair(***);
dataRDD.repartition(500);
dataRDD.cache();
Step3 . rowPairRDD を schemaRDD に変換する
JavaSchemaRDD schemaRDD = sqlContext.applySchema(rowPairRDD.values(), schema);
schemaRDD.registerTempTable("testentity");
sqlContext.sqlContext().cacheTable("testentity");
Step4 . spark sql を使用して、最初の単純な sql クエリを実行します。
JavaSQLContext sqlContext = new org.apache.spark.sql.api.java.JavaSQLContext(jsc);
JavaSchemaRDD retRDD=sqlContext.sql("SELECT column1, column2 FROM testentity WHERE
column3 = 'value1' ")
List<org.apache.spark.sql.api.java.Row> rows = retRDD.collect();
Step5 . spark sql を使用して、2 番目の単純な sql クエリを実行します。
JavaSchemaRDD retRDD=sqlContext.sql("SELECT column1, column2 FROM testentity
WHERE column3 = 'value2' ")
List<org.apache.spark.sql.api.java.Row> rows = retRDD.collect();
Step6. spark sql を使用して、3 番目の単純な sql クエリを実行します。
JavaSchemaRDD retRDD=sqlContext.sql("SELECT column1, column2 FROM testentity WHERE column3 = 'value3' ");
List<org.apache.spark.sql.api.java.Row> rows = retRDD.collect();
テスト結果は次のとおりです。
テスト ケース 1 :
300,000 レコードを挿入すると、hbase エンティティがコードを実行します。
- 最初のクエリには 60407 ミリ秒が必要です
- 2 番目のクエリには 838 ミリ秒が必要です
- 3 番目のクエリには 792 ミリ秒が必要です
hbase Api を使用して同様のクエリを実行すると、2000 ミリ秒しかかかりません。どうやら、最後の 2 つの spark sql クエリは、hbase api クエリよりもはるかに高速です。
最初の spark sql クエリは、hbase からデータをロードするのに多くの時間を費やしていると思います。
したがって、最初のクエリは最後の 2 つのクエリよりもはるかに遅くなります。効果は期待できると思います
テスト ケース 2 :
400,000 レコードを挿入すると。hbase エンティティ、コードを実行します。
- 最初のクエリには 87213 ミリ秒が必要です
- 2 番目のクエリには 83238 ミリ秒が必要です
- 3 番目のクエリには 82092 ミリ秒が必要です
hbase Api を使用して同様のクエリを実行すると、3500 ミリ秒しかかかりません。どうやら 3 つの spark sql クエリは、hbase api クエリよりもはるかに遅いようです。
また、最後の 2 つの Spark SQL クエリも非常に遅く、パフォーマンスは最初のクエリと似ています。パフォーマンスを調整するにはどうすればよいですか?