1. 程式人生 > >Hive SQl語句的執行

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端執行。

在Reduce端執行的重要特點就是有分發的key,比如group by key, join ona.key=b.key, count(distinct key), distrbute by key, cluster by key

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...

本文系整理所得。