2016-09-22 49 views
4

爲了提高性能(例如對於連接),建議首先計算表靜態值。在蜂巢或黑斑羚中計算表格統計信息是否會加速apache的火花?

在蜂巢我可以做::

analyze table <table name> compute statistics; 

在帕拉:

compute stats <table name>; 

難道我的火花的應用程序(從蜂房表讀數)也從預先計算的統計數據中受益?如果是的話,我需要運行哪一個?他們是否都將這些統計數據保存在蜂房的Metastore中?我使用Cloudera的火花1.6.1 5.5.4

注: 在火花1.6.1(https://spark.apache.org/docs/1.6.1/sql-programming-guide.html)爲參數spark.sql.autoBroadcastJoinThreshold的文檔,我發現一個提示:

注意,目前的統計數據僅支持Hive Metastore 表,其中命令ANALYZE TABLE COMPUTE STATISTICS noscan已運行。

回答

0

根據我的理解,計算impala上的統計數據是最新的實施方案,並將您從調整配置單元設置中解脫出來。

來自官方的文檔:

如果使用收集統計數據的基於配置單元的方法,請參閱 蜂巢維基關於蜂房 側所需的配置信息。 Cloudera建議將Impala COMPUTE STATS語句用於 ,以避免與統計數據收集過程相關的潛在配置和可伸縮性問題。

如果運行蜂巢聲明ANALYZE TABLE計算統計FOR 柱,黑斑羚只有在 表是未分區的使用所產生的列統計信息。 Impala不能使用分區表的Hive生成列 統計信息。

有用的鏈接: https://www.cloudera.com/documentation/enterprise/5-5-x/topics/impala_perf_stats.html

1

我假設你正在使用蜂箱火花(或)火花-SQL與蜂巢環境。如果是這種情況,您應該在配置單元中運行分析。

分析表< ...>通常需要在創建表之後或存在重要的插入/更改時運行。如果這是MR或火花作業,您可以在加載步驟結束時執行此操作。

在分析時,如果您在火花上使用配置單元 - 請同時使用下面鏈接中的配置。您可以在每個查詢的會話級別上設置它。我已經在生產中使用了這個鏈接https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started中的參數,它工作正常。

0

這是即將到來的星火2.3.0(也許還包括一些功能已經在2.2.1或ealier釋放)。

我的火花應用程序(從配置表中讀取)是否也受益於預先計算的統計信息?

它可以,如果黑斑羚或蜂巢記錄表的統計信息(如表的大小或行數)在火花可以讀取(並轉化爲自己的星火統計查詢規劃)表元數據的蜂巢metastore。

您可以使用DESCRIBE EXTENDED SQL命令spark-shell輕鬆檢查出來。

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計算火花使用一個統計量,即表的總大小(沒有行計數由於noscan選項度量)。如果Impala和Hive將其記錄到「適當」位置,則Spark SQL將在DESC EXTENDED中顯示它。

對錶級統計信息使用DESC EXTENDED tableName,並查看是否找到由Impala或Hive生成的信息。如果它們在DESC EXTENDED的輸出中,它們將用於優化連接(並且還針對聚合和過濾器打開了基於成本的優化)。


列統計信息存儲(在特定的火花序列化格式),在表的屬性,我真的很懷疑,黑斑羚或蜂巢可以計算的統計數據,並將它們存儲在SQL星火兼容的格式。