Hive SQl語句的執行
1. hive語句執行時哪些在map執行,哪些在reduce執行呢
Map/Reduce是在物理執行計劃的地方生成的。
很簡單,ReduceSinkOpertor之前的在Map執行,ReduceSinkOperator之後的在Reduce執行,ReduceSinkOperator的作用是把資料從Map發到Reduce.具體點:
FROM (TableScanOperator),WHERE(FilterOperator),MapJoinOperator,ReduceSinkOperator在Map端執行。 GROUP BY(GroupByOperator),JOIN(JoinOperator),DistributeBy,Sort By, Distinct,Having(FilterOperator)在Reduce端執行。
2.檢視語句的執行過程的Hvie SQl語句
Hive提供EXPLAIN命令,顯示查詢的執行計劃。語法如下:
EXPLAIN [EXTENDED] query
考慮下面的EXPLAIN查詢:
EXPLAIN
FROM src INSERT OVERWRITE TABLE dest_g1 SELECT src.key, sum(substr(src.value,4 )) GROUP BY src.key;
語句的輸出包含下面的部分
抽象語法樹
ABSTRACT SYNTAX TREE: (TOK_QUERY (TOK_FROM (TOK_TABREF src)) (TOK_INSERT (TOK_DESTINATION (TOK_TAB dest_g1)) (TOK_SELECT (TOK_SELEXPR (TOK_COLREF src key)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_FUNCTION substr (TOK_COLREF src value) 4)))) (TOK_GROUPBY (TOK_COLREF src key))))
依賴圖
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-2 depends on stages: Stage-1
Stage-0 depends on stages: Stage-2
這顯示,Stage-1是根階段,Stage-2在Stage-1完成後執行,Stage-0在Stage-2完成後執行。
map/reduce階段包含2部分:
map/reduce場景本身包含2個部分:表對映到Map運算子樹的別名--這個對映,通知mapper運算子樹呼叫,處理特定表的行或先前的map/reduce階段的結果。在上面例子的Stage-1,原始表的行,被Reduce輸出運算子的運算子樹處理。類似,在Stage-2中,Stage-1的結果的行被Reduce輸出運算子的其他運算子樹處理。每個Reduce輸出操作符,根據元資料的標準,把資料分割槽到reducers。
Reduce操作符樹——這個操作符樹處理map/reduce任務的reducer的所有行。在例子的Stage-1,Reducer操作符樹開展區域性聚合,而Stage-2的reduers操作符樹對Stage-1的區域性聚合,做最終的聚合的計算。
本部分翻譯自 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain
3.Hvie SQL語句的執行順序
from... where.... select...group by... having ... order by...
本文系整理所得。