hive原理 未完。。

2021-09-01 14:53:30 字數 1129 閱讀 1425

[size=medium]hive就是乙個將hiveql(其實是sql的子集或者說一點點的超集)語句轉化為一系列可以在hadoop集群上執行的mr的工具,通常在客戶端執行 hive 命令(**有ide,所以不用安裝hive啦 :wink: )然後輸入 sql 語句後, hive 將 sql 語句生成多個 mr 的 job ,然後將這些 job 提交給 hadoop 進行執行,完成後,再把結果放入到 hdfs 或者本地的臨時檔案中。

如下圖[img]

以下摘自**周忱《hive原理》的技術文件[img]

[img]

[img]

[img]

直譯器、編譯器、優化器完成 hql 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計畫的生成。生成的查詢計畫儲存在 hdfs 中,並在隨後有 mapreduce 呼叫執行。

hive 的資料儲存在 hdfs 中,大部分的查詢由 mapreduce 完成(包含 * 的查詢,比如 select * from tbl 不會生成 mapredcue 任務)。

一條sql語句的結構:

一條sql主要包括,insert子句,select子句,from子句,groupby子句,以及其他的條件子句,如limit,orderby等,還有join和union等操作符。其中的from子句,一般可以直接跟乙個表,多個表(笛卡爾積等同於join),或者乙個子查詢,或者由join或union連線的兩個表,或者兩個子查詢。包含子查詢則意味著sql語句自身會包含這一些遞迴的操作。

hive對一條sql執行的過程:

一條sql語句(以查詢sql為例)的目的最終是將乙個表或者若干個表中的所有行資料,一條一條的進行處理,最終生成一組目標記錄。為了實現這樣的目的,首先將處理過程分解為若干個運算元,將初始的表資料記錄依次通過這些運算元來計算,最終得出結果。

例如:select a from tbl where b>1 order by c,對於這條sql,首先需要乙個ts(table scan)運算元,從表中讀出資料,然後讀出的資料經過乙個fil(filter)運算元,過濾那些不滿足條件b>1的資料,最後經過乙個fetch算 子,將正確的資料返回。對於任意複雜的sql語句都可以生成這樣的運算元樹進行處理。

[color=violet]hive的原理還是比較複雜,一點點學習中,一口吃不成胖子 :cry: 。。。[/color][/size]

Hive架構原理

1 使用者介面 client cli command line inte ce jdbc odbc jdbc訪問hive webui 瀏覽器訪問hive 2 元資料 metastore 元資料報括 表名 表所屬的資料庫 預設是default 表的擁有者 列 分割槽字段 表的型別 是否是外部表 表的資...

Hive工作原理

使用者提交查詢等任務給driver。編譯器獲得該使用者的任務plan。編譯器compiler根據使用者任務去metastore中獲取需要的hive的元資料資訊。編譯器compiler得到元資料資訊,對任務進行編譯,先將hiveql轉換為抽象語法樹,然後將抽象語法樹轉換成查詢塊,將查詢塊轉化為邏輯的查...

Hive工作原理

hdfs中儲存的是資料 hive只裝在一台機器上,hive只是乙個工具乙個客戶端,而且他的資料時儲存在hdfs中的,只要hive能讀取hdfs的資料,能和msql進行互動底層就能轉換成mr程式,mr程式交給yarn之後就進行分布式執行了 hive來處理hdfs中儲存的結構化的靜態化資料,這個資料可以...