Hive 一、什麼是Hive,Hive有什麼用

  

1、什麼是Hivemysql

  Hive是創建在 Hadoop 上的數據倉庫基礎構架。它提供了一系列的工具,能夠用來進行數據提取轉化加載(ETL),這是一種能夠存儲、查詢和分析存儲在 Hadoop 中的大規模數據的機制。Hive 定義了簡單的類 SQL 查詢語言,稱爲 HQL,它容許熟悉 SQL 的用戶查詢數據。同時,這個語言也容許熟悉 MapReduce 開發者的開發自定義的 mapper 和 reducer 來處理內建的 mapper 和 reducer 沒法完成的複雜的分析工做。sql


  Hive 沒有專門的數據格式。 Hive 能夠很好的工做在 Thrift 之上,控制分隔符,也容許用戶指定數據格式。數據庫

2、Hive的應用場景apache

  Hive 構建在基於靜態批處理的Hadoop 之上,Hadoop 一般都有較高的延遲而且在做業提交和調度的時候須要大量的開銷。所以,Hive 並不可以在大規模數據集上實現低延遲快速的查詢,例如,Hive 在幾百MB 的數據集上執行查詢通常有分鐘級的時間延遲。所以, Hive 並不適合那些須要低延遲的應用,例如,聯機事務處理(OLTP)。Hive 查詢操做過程嚴格遵照Hadoop MapReduce 的做業執行模型,Hive 將用戶的HiveQL 語句經過解釋器轉換爲MapReduce 做業提交到Hadoop 集羣上,Hadoop 監控做業執行過程,而後返回做業執行結果給用戶。Hive 並不是爲聯機事務處理而設計,Hive 並不提供實時的查詢和基於行級的數據更新操做。Hive 的最佳使用場合是大數據集的批處理做業,例如,網絡日誌分析。
 
3、Hive的體系結構
  主要分爲如下幾個部分:
  
   用戶接口
  用戶接口主要有三個:CLI,Client 和 WUI。其中最經常使用的是 CLI,Cli 啓動的時候,會同時啓動一個 Hive 副本。Client 是 Hive 的客戶端,用戶鏈接至 Hive Server。在啓動 Client 模式的時候,須要指出 Hive Server 所在節點,而且在該節點啓動 Hive Server。 WUI 是經過瀏覽器訪問 Hive。
 
   元數據存儲
  Hive 將元數據存儲在數據庫中,如 mysql、derby。Hive 中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否爲外部表等),表的數據所在目錄等。
 
   解釋器、編譯器、優化器、執行器
  解釋器、編譯器、優化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在 HDFS 中,並隨後由 MapReduce 調用執行。

    .編譯器將一個Hive QL轉換操做符
    .操做符是Hive的最小的處理單元
    .每一個操做符表明HDFS的一個操做或者一道MapReduce做業瀏覽器

    Hive編譯器
 
 
 
     編譯流程

 
 
  Hadoop
  Hive 的數據存儲在 HDFS 中,大部分的查詢由 MapReduce 完成(包含 * 的查詢,好比 select * from tbl 不會生成 MapReduce 任務)。
 
4、數據存儲
  首先,Hive 沒有專門的數據存儲格式,也沒有爲數據創建索引,用戶能夠很是自由的組織 Hive 中的表,只須要在建立表的時候告訴 Hive 數據中的列分隔符和行分隔符,Hive 就能夠解析數據。
 
  其次,Hive 中全部的數據都存儲在 HDFS 中,Hive 中包含如下數據模型:表(Table),外部表(External Table),分區(Partition),桶(Bucket)。
 
  Hive 中的 Table 和數據庫中的 Table 在概念上是相似的,每個 Table 在 Hive 中都有一個相應的目錄存儲數據。例如,一個表 pvs,它在 HDFS 中的路徑爲:/wh/pvs,其中,wh 是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的數據倉庫的目錄,全部的 Table 數據(不包括 External Table)都保存在這個目錄中。
 
  Partition 對應於數據庫中的 Partition 列的密集索引,可是 Hive 中 Partition 的組織方式和數據庫中的很不相同。在 Hive 中,表中的一個 Partition 對應於表下的一個目錄,全部的 Partition 的數據都存儲在對應的目錄中。例如:pvs 表中包含 ds 和 city 兩個 Partition,則對應於 ds = 20090801, ctry = US 的 HDFS 子目錄爲:/wh/pvs/ds=20090801/ctry=US;對應於 ds = 20090801, ctry = CA 的 HDFS 子目錄爲;/wh/pvs/ds=20090801/ctry=CA
 
  Buckets 對指定列計算 hash,根據 hash 值切分數據,目的是爲了並行,每個 Bucket 對應一個文件。將 user 列分散至 32 個 bucket,首先對 user 列的值計算 hash,對應 hash 值爲 0 的 HDFS 目錄爲:/wh/pvs/ds=20090801/ctry=US/part-00000;hash 值爲 20 的 HDFS 目錄爲:/wh/pvs/ds=20090801/ctry=US/part-00020
  External Table 指向已經在 HDFS 中存在的數據,能夠建立 Partition。它和 Table 在元數據的組織上是相同的,而實際數據的存儲則有較大的差別。
 
  Table 的建立過程和數據加載過程(這兩個過程能夠在同一個語句中完成),在加載數據的過程當中,實際數據會被移動到數據倉庫目錄中;以後對數據對訪問將會直接在數據倉庫目錄中完成。刪除表時,表中的數據和元數據將會被同時刪除。
 
  External Table 只有一個過程,加載數據和建立表同時完成(CREATE EXTERNAL TABLE ……LOCATION),實際數據是存儲在 LOCATION 後面指定的 HDFS 路徑中,並不會移動到數據倉庫目錄中。當刪除一個 External Table 時,僅刪除元數據,表中的數據不會真正被刪除。
 
5、Hive的模式
   單用戶數據庫模式
  單用戶數據庫模式:經過網絡鏈接到一個數據庫中,是最常用到的模式。
  
  
   單用戶Derby模式
  單用戶Derby模式:此模式鏈接到一個In-memory 的數據庫Derby,通常用於Unit Test。
  
 
   多用戶遠程服務器模式
  多用戶遠程服務器模式:用於非Java客戶端訪問元數據庫,在服務器端啓動MetaStoreServer,客戶端利用Thrift協議經過MetaStoreServer訪問元數據庫。
  
 
6、Hive執行流程
    •編譯器將一個Hive QL轉換操做符
    •操做符是Hive的最小的處理單元
    •每一個操做符表明HDFS的一個操做或者一道MapReduce做業
  Operator
    •Operator都是hive定義的一個處理過程
    •Operator都定義有:
    •protected List  <Operator<?   extends Serializable  >> childOperators; 
    •protected List  <Operator<?   extends Serializable  >> parentOperators; 
    •protected boolean done; // 初始化值爲false
    •全部的操做構成了 Operator圖,hive正是基於這些圖關係來處理諸如limit, group by, join等操做
 
操做符
描述
TableScanOperator
掃描hive表數據
ReduceSinkOperator
建立將發送到Reducer端的<Key,Value>對
JoinOperator
Join兩份數據
SelectOperator
選擇輸出列
FileSinkOperator
創建結果數據,輸出至文件
FilterOperator
過濾輸入數據
GroupByOperator
GroupBy語句
MapJoinOperator
/*+mapjoin(t) */
LimitOperator
Limit語句
UnionOperator
Union語句
    
    •Hive經過ExecMapper和ExecReducer執行MapReduce任務
    •在執行MapReduce時有兩種模式
    •本地模式
    •分佈式模式
 
   ANTLR詞法語法分析工具
    •ANTLR—Another Tool for Language Recognition
    •ANTLR 是開源的
    •爲包括Java,C++,C#在內的語言提供了一個經過語法描述來自動構造自定義語言的識別器(recognizer),編譯器(parser)和解釋器(translator)的框架
    •Hibernate就是使用了該分析工具
 
  
7、一條HQL引起的思考
    案例HQL
    •select key from test_limit  limit 1
    •Stage-1
    •TableScan Operator>Select Operator-> Limit->File Output Operator
    •Stage-0
    •Fetch Operator
    •讀取文件
 
    Mapper與InputFormat
    •該hive MR做業中指定的mapper是:
    •mapred.mapper.class = org.apache.hadoop.hive.ql.exec.ExecMapper
    •input format是:
    •hive.input.format  = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat 
相關文章
相關標籤/搜索