HIVE 基本概念

Hive架構


這裏寫圖片描述

hive架構圖

  • hive組件

    • 用戶接口
      CLI、JDBC/ODBC和WebGUI。其中,CLI爲shell命令行;JDBC/ODBC是Hive的JAVA實現,與傳統數據庫JDBC類似;WebGUI是通過瀏覽器訪問Hive。

    • 元數據存儲
      Hive 將元數據存儲在數據庫中。Hive 中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否爲外部表等),表的數據所在目錄等。

    • 解釋器、編譯器、優化器、執行器
      解釋器、編譯器、優化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在 HDFS 中,並在隨後有 MapReduce 調用執行。

      Hive的數據存儲在HDFS中,大部分的查詢、計算由MapReduce完成(包含的查詢,比如select from tbl不會生成MapRedcue任務)。

  • Hive與Hadoop的關係
    Hive利用HDFS存儲數據,利用MapReduce查詢數據


    Hive與Hadoop關係

    Hive與Hadoop關係圖

  • Hive的數據存儲
    1、Hive中所有的數據都存儲在 HDFS 中,沒有專門的數據存儲格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)

    2、只需要在創建表的時候告訴 Hive 數據中的列分隔符和行分隔符,Hive 就可以解析數據。

    3、Hive 中包含以下數據模型:DB、Table,External Table,Partition,Bucket。

    • db:在hdfs中表現爲${hive.metastore.warehouse.dir}目錄下一個文件夾
    • table:在hdfs中表現所屬db目錄下一個文件夾
    • external table:與table類似,不過其數據存放位置可以在任意指定路徑
    • partition:在hdfs中表現爲table目錄下的子目錄
    • bucket:在hdfs中表現爲同一個表目錄下根據hash散列之後的多個文件
  • Hive操作符Operator
    • 編譯器將一個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等操作


HiveSql執行流程

1、 提交sql ,交給驅動

2、驅動編譯,解析相關的字段表信息

3、去metastore查詢相關的信息,返回字段表信息

4、編譯返回信息 發給驅動

5、驅動發送一個執行計劃,交給執行引擎

6.0、DDLs 對數據庫表的操作的 直接和metastore交互
        create table tab(name string);

6.1、把job交給job tracker 讓task tracker執行 返回執行信息

6.2、完成job返回數據信息,找namenode查數據

6.3、namenode交互
        select count(1) from tab;

6.1、dfs ops 直接和直接去數據
        select * from tab;

7、返回結果信息集

發佈了59 篇原創文章 · 獲贊 7 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章