2016-09-22 3 views
4

パフォーマンスを向上させるには(たとえば、結合の場合)、最初にテーブルの統計を計算することをお勧めします。ハイブやインパラのコンピューティングテーブルの統計情報は、apacheのスパークをスピードアップしますか?

私が行うことができますハイブで

::インパラで

analyze table <table name> compute statistics; 

compute stats <table name>; 

(ハイブ-テーブルからの読み取り)私のスパークアプリケーションは、事前に計算された統計の恩恵を受けるでしょうか?はいの場合は、どちらを実行する必要がありますか?彼らはどちらも、ハイブ転移地に統計を保存していますか?現在の統計

注:私はヒントを発見したパラメータspark.sql.autoBroadcastJoinThreshold用スパーク1.6.1(https://spark.apache.org/docs/1.6.1/sql-programming-guide.html)のドキュメントで :私は注意

5.5.4 Clouderaの上でスパーク1.6.1を使用していますHive Metastore テーブルでのみサポートされています。このテーブルは、ANALYZE TABLE COMPUTE STATISTICSコマンド noscanが実行されています。

答えて

0

私がimpalaの計算統計は最新の実装であり、ハイブ設定を調整できないことを理解しています。公式ドキュメントから

あなたは統計収集のハイブベースの方法を使用している場合は、ハイブ 側で必要な設定については、 ハイブのwikiを参照してください。 Clouderaは、 へのImpala COMPUTE STATSステートメントを使用して、 統計収集プロセスの設定とスケーラビリティの問題を回避することを推奨しています。

あなたはハイブ文が の列の表のCOMPUTE STATISTICSをANALYZEを実行した場合 表がパーティション化されていない場合は、インパラは結果の列の統計情報を使用することができます。 ImpalaはHiveで生成された列 の統計情報をパーティションテーブルに使用できません。

お役立ちリンク: https://www.cloudera.com/documentation/enterprise/5-5-x/topics/impala_perf_stats.html

1

私はあなたのハイブのコンテキストでスパークのハイブ(または)スパーク-SQLを使用していると仮定しています。そのような場合は、ハイブでanalyzeを実行する必要があります。

Analyze table < ...>通常、テーブルが作成された後、または重要な挿入/変更がある場合に実行する必要があります。 MRまたはスパーク・ジョブの場合は、ロード・ステップ自体の最後にこれを行うことができます。

sparkでハイブを使用している場合、分析の際には、以下のリンクの設定も使用してください。これは、クエリごとにセッションレベルで設定できます。私は生産のこのリンクhttps://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Startedのパラメータを使用して正常に動作します。

0

これからのSpark 2.3.0がここにあります(おそらく機能の一部は既に2.2.1またはealierでリリースされています)。

私のスパークアプリケーション(ハイブテーブルからの読み込み)も事前計算された統計の恩恵を受けるのですか?

インパラやハイブがスパークからの読み取り(およびクエリの計画のための独自のスパーク統計に変換)することができ、テーブルのメタデータにハイブのメタストアで(例えば、テーブルのサイズや行数)テーブルの統計情報を記録した場合、それはできました。

DESCRIBE EXTENDEDspark-shellのSQLコマンドを使用して簡単に確認できます。

scala> spark.version 
res0: String = 2.4.0-SNAPSHOT 

scala> sql("DESC EXTENDED t1 id").show 
+--------------+----------+ 
|info_name  |info_value| 
+--------------+----------+ 
|col_name  |id  | 
|data_type  |int  | 
|comment  |NULL  | 
|min   |0   | 
|max   |1   | 
|num_nulls  |0   | 
|distinct_count|2   | 
|avg_col_len |4   | 
|max_col_len |4   | 
|histogram  |NULL  | 
+--------------+----------+ 

ANALYZE TABLE COMPUTE STATISTICS noscanスパークが使用する1つの統計、テーブルのすなわち合計サイズ(NO行に起因noscanオプションにメトリックカウント)を計算します。 ImpalaとHiveがそれを「適切な」場所に記録した場合、Spark SQLはDESC EXTENDEDにそれを表示します。

テーブルレベルの統計情報としてDESC EXTENDED tableNameを使用して、ImpalaまたはHiveによって生成されたものが見つかったかどうかを確認してください。それらがDESC EXTENDEDの出力にある場合、それらは結合を最適化するために使用されます(また、集約とフィルタでもコストベースの最適化が有効になります)。


カラムの統計情報は、テーブルのプロパティで(スパーク固有の直列化形式で)保存されていると私は本当にインパラまたはハイブは、統計情報を計算し、スパークSQL互換形式に保存することができることを疑います。