7

以下の私のコードのアルゴリズム
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 クエリも非常に遅く、パフォーマンスは最初のクエリと似ています。パフォーマンスを調整するにはどうすればよいですか?

4

2 に答える 2

1

これらのクエリを一度に次々と実行していることを願っています。そうであれば、クエリごとに個別の sqlContext を作成するのはなぜですか? また、RDD を再分割して、並列性を高めることもできます。可能であれば、RDD をキャッシュします。

上記の手順でパフォーマンスが向上することを願っています。

于 2014-12-25T10:15:45.427 に答える