hiveql是一種宣告式語言,使用者提交查詢,而hive會將其轉換成mapreduce job,如下圖。一般來說大部分時間可以無視這個執行過程的內部邏輯,但是如果能了解這些底層實現細節,在調優的時候就會更得心應手。
將hiveql轉化為mapreduce任務,整個編譯過程主要分為六個階段:
(1)antlr(another tool for language recognition)
是乙個語法分析器(parser),可以用來構造領域語言。它允許我們定義識別字元流的詞法規則和用於解釋token流的語法分析規則,然後,antlr將根據使用者提供的語法檔案自動生成相應的詞法/語法分析器。使用者可以利用他們將輸入的文字進行編譯,並轉換成其他形式,如ast。
(2)ast(abstract syntax tree)
ast表明hive是如何將查詢解析成token(符號)和literal(字面值)的,以下面的hql為例:
select轉化為ast的形式為:sum(number) from onecol;
abstract syntax tree;這個過程主要是遍歷ast,抽象出查詢的基本組成單元查詢塊queryblock。queryblock是一條sql最基本的組成單元,包括三個部分:輸入源,計算過程,輸出。簡單來講乙個queryblock就是乙個子查詢。(tok_query
(tok_from (tok_tabref (tok_tabname onecol)))
(tok_insert (tok_destination (tok_dir tok_tmp_file))
(tok_select
(tok_selexpr
(tok_function
sum (tok_table_or_col number))))))
遍歷queryblock,生成operatortree,operatortree由很多邏輯操作符組成,如tablescanoperator、selectoperator、filteroperator、joinoperator、groupbyoperator和reducesinkoperator等。這些邏輯操作符可在map、reduce階段完成某一特定操作。
hive驅動模組中的邏輯優化器對operatortree進行優化,變換operatortree的形式,合併多餘的操作符,減少mr任務數、以及shuffle階段的資料量;
遍歷優化後的operatortree,根據operatortree中的邏輯操作符生成需要執行的mr任務。
啟動hive驅動模組中的物理優化器,對生成的mr任務進行優化,生成最終的mr任務執行計畫。
整體流程如下:
2. 大資料時代--hive技術原理解析
3. 基於hadoop的資料倉儲hive 基礎知識
4. hive sql的編譯過程
(完)
從資料到資訊到決策
俗話說,忘記歷史就是背叛自己,今天這篇用此做開場再合適不過。這一篇將根據乙個虛擬的故事,來介紹如何通過歷史資料來幫助乙個銷售人員發現規律資訊從而輔助他來做一些決策資訊。本文的主角是tim,tim在乙個銷售部門,部門最近決定做新一輪銷售計畫,然後根據計畫結束時,各個銷售人員的銷售業績來進行kpi考核。...
從南京到北京
從南京到北京 從南京到北京,買的沒有賣的精。這是梁小民用來分析資訊不對稱的一句話。這算是南京和北京的乙個共同點。它們的不同點呢,也許乙個籍貫在這兩地之外不帶偏見,又是在兩地生活過有一定了解,又從南京到北京的直接和突然的感覺兩者差別的人才能更好感覺出來吧。呵,符合以上這些我所列出條件的,就有這個列出條...
從能力到素質
談談個人能力的系統性 周愛民什麼是能力,而什麼又是素質呢?前者可以變成行動方案,是可以有技術方法,進而有技巧的 後者 則是涵養,先天因素或許有一部分,但更多的則要靠累積。素質提公升與能力提公升有一定的關係,但並不是強耦合的,例如我們不能指望乙個沒有 經驗的人能 在除錯時準確地設下斷點,同樣也不能指望...