Hive On Spark執行計畫總結

2021-07-15 18:10:35 字數 2817 閱讀 2063

1、  hive on spark explain statement

在hive中,命令explain可以用來檢視查詢的執行計畫。對於hive on spark,這個命令本身不會改變,還會表現的和以前一樣。它仍然會顯示依賴語法樹和每個stage階段的執行計畫。

然後,如果hive.execution.engine設定為spark,它將代替預設的mapreduce的查詢引擎,而是顯示spark查詢引擎的執行計畫。

2、  dependency graph

依賴圖顯示了stages之間的依賴關係,對於hive on spark來說,將使用spark stages代替mapreduce的stages。

對於絕大多數查詢,因為很多map和reduce的works能夠在spark的乙個work中完成,所以spark的查詢引擎只有乙個spark stage。因此,對於同樣的查詢,使用hive on spark,這裡可能會有更少的stages數量。對於一些查詢,會有多個spark stages,比如map join,skew join等等。

需要指出的是,hive中的stage與spark中的stage的概念是不同的。乙個hive的stage可以相當於spark中的多個stages。在spark中,乙個stage通常意味著一組tasks,這些task在乙個executor中執行。而在hive中,乙個stage包含一系列操作,這些操作在乙個job中處理。

3、  spark stage plan

spark的stage顯示spark的work graph,是乙個dag(有向無環圖)。它包括:

l  dag名稱,spark工作的dag名稱

l  edges邊界,顯示在這個dag中works直接的依賴關係

l  vertices頂點,顯示每個work的操作樹

edge(邊界)資訊對於hive on spark來說是新的內容。不同的邊界型別表示不同的shuffle需要。比如partition­-level sort意味著在shuffling期間,行記錄應該在分割槽級別上排序。

4、  sample query plans

下面將介紹一些hive on spark的查詢計畫的例子。這裡必不會涉及太多的優化設定和計畫。

l  common join

在hive on spark中的查詢計畫為:

這是乙個common join,並且這裡僅有乙個spark stage, the fetch stage還是和mapreduce一樣。在spark stage中,這裡有兩個map works(map 1和map 4)。reduce 2依賴這兩個map works,並且reduce 3依賴reduce 2。

這裡有兩個map reduce stages,因此對於mapreduce有兩個jobs,而對於hive on spark,這裡只有乙個job。

l  map join

如果設定set hive.auto.convert.join為true,那麼hive onspark的執行計畫為:

stagedependencies:

stage­2 is a root stage

stage­1 depends on stages:stage­2

stage­0 depends on stages:stage­1

stageplans:

stage: stage­2

現在,我們使用map join。這裡有兩個spark stages。第乙個spark stages(stage-2)有乙個map操作。第二個spark stage(stage-1)包含乙個map操作和乙個reducer操作。

下面的**顯示了reducer工作依賴與map工作。在map 1中這裡是乙個group by操作。這個reducer工作僅有乙個reducer:

reducer 2 <- map 1(group,1)

對於map join,hive on spark至少有兩個stages。第乙個stage載入小表並處理它,然後輸出到hdfs上的一些檔案中。剩餘的stages載入檔案並且執行map join。

l  bucket map join

對於bucket map join,查詢計畫和map join類似。然而,如果你使用命令」explain extended」,它將顯示如下:

bucketmapjoin: true 和bucketmapjoin context:

如果表被bucketed,並且hive.optimize.bucketmapjoin設為true,則extendedplan為:

stage: stage­0

fetch operator

limit: ­1

processor tree:

listsink

l  sorted merge bucket map join

如果hive.auto.convert.sortmerge.join設為true,優化器將檢查查詢是否可以被轉化為sorted merge bucket(smb)的join。如果可以的話,查詢計畫如下:

l  skew join

如果表資料傾斜,我們設定hive.optimize.skewjoin為true,並且設定hive.skewjoin.key為乙個傾斜鍵的資料量,在傾斜鍵上的join將被轉化為乙個skew join,查詢計畫如下:

listsink

ocacle 執行計畫 Oracle執行計畫

一 什麼是oracle執行計畫?執行計畫是一條查詢語句在oracle中的執行過程或訪問路徑的描述 二 怎樣檢視oracle執行計畫?因為我一直用的plsql遠端連線的公司資料庫,所以這裡以plsql為例 配置執行計畫需要顯示的項 工具 首選項 視窗型別 計畫視窗 根據需要配置要顯示在執行計畫中的列 ...

mysql執行計畫 MySQL 執行計畫

1.執行計畫的定義 什麼是執行計畫 查詢計畫 呢?執行計畫就是一系列的操作步驟。sql是宣告性語言,它只告訴資料庫要查詢什麼,但並不告訴資料庫如何去查。資料庫所要做的就是基於演算法和統計資訊計算出一條最佳的訪問路徑。這個工作是由優化器來完成的。優化器會比較不同的執行計畫,然後選擇其中最優的一套。2....

配置hive on spark後啟動報錯

因為hive底層用的執行引擎是mapreduce,所以導致了執行起來非常慢,所以我們要更換執行引擎,就有了hive on spark,基於hive的基礎上將執行引擎換成spark 版本 hive 3.1.2 spark3.0.0 需要配置的資訊 在spark的配置檔案spark defaults.c...