1 Hive基本概念

Hive 基本概念

0 主要內容

 

① 什麼是Hive?

  • Hive用於解決海量結構化日誌的數據統計。
  • Hive 是基於 Hadoop 的一個數據倉庫工具,可以將結構化的數據文件映射爲一張表,並提供類 SQL 查詢功能。
  • 本質是:將 HQL 轉化成 MapReduce 程序。

大體過程:

  • MapReduce將常用的SQL操作寫成很多模板,封裝在Hive中;
  • 當客戶端用SQL語句查詢數據時,通過Hive框架匹配出相應的MR模板,運行相應的MR程序,將計算結果返回給客戶端;

在上述過程中:

  • Hive 處理的數據存儲在 HDFS;(數據存儲)
  • Hive 分析數據底層的默認實現是 MapReduce ;(數據計算)
  • 執行程序運行在 Yarn 上;(資源調度)

也就是說,Hive用到的都是Hadoop中的東西,自己什麼也沒有,可以理解爲:Hive是Hadoop的一個客戶端

 

② Hive的優缺點

其實就是Hadoop和MR的優缺點

 

③ Hive 架構原理 - 面試重點

Hive架構由4部分組成:1 客戶端;2 元數據(存儲在mysql等);3Hadoop;4 Hive。其中第4部分是重點

(面試題)

Hive部分的執行順序:解析器 --> 編譯器 --> 優化器 --> 執行器

  • 解析器:主要用於判斷SQL語句是否有語法問題,如表是否存在、字段是否存在、SQL 語義是否有誤;
  • 編譯器:將SQL語句翻譯成相應的MapReduce執行語句;
  • 優化器:對MR執行語句進行優化;
  • 執行器:提交給Yarn去執行任務;

 

④ Hive和數據庫比較 - 面試題

由於Hive採用了類似SQL的查詢語言HQL(Hive Query Language),因此很容易將Hive理解爲數據庫。其實從結構上來看,Hive 和數據庫除了擁有類似的查詢語言再無類似之處。

  • 查詢語言
    • 由於 SQL 被廣泛的應用在數據倉庫中,因此,專門針對 Hive 的特性設計了類 SQL 的查詢語言 HQL。熟悉 SQL 開發的開發者可以很方便的使用 Hive 進行開發。
  • 數據存儲位置
    • Hive是建立在 Hadoop 之上的,所有 Hive 的數據都是存儲在 HDFS 中的。
    • 而數據庫則可以將數據保存在塊設備或者本地文件系統中。
  • 數據更新
    • 由於 Hive 是針對數據倉庫應用設計的,而數據倉庫的內容是讀多寫少的。因此,Hive中不建議對數據的改寫,所有的數據都是在加載的時候確定好的。
    • 而數據庫中的數據通常是需要經常進行修改的 , 因此可使用 INSERT INTO … VALUES添加數據,使用 UPDATE … SET 修改數據。
  • 索引
    • Hive 在加載數據的過程中不會對數據進行任何處理,甚至不會對數據進行掃描,因此 也沒有對數據中的某些 Key 建立索引。Hive 要訪問數據中滿足條件的特定值時,需要暴力掃描整個數據,因此訪問延遲較高。由於 MapReduce 的引入, Hive 可以並行訪問數據,因此即使沒有索引,對於大數據量的訪問,Hive 仍然可以體現出優勢。
    • 數據庫中,通常會針對一個或者幾個列建立索引,因此對於少量的特定條件的數據的訪問,數據庫可以有很高的效率,較低的延遲。由於數據的訪問延遲較高,決定了 Hive 不適合在線數據查詢。
  • 執行
    • Hive 中大多數查詢的執行是通過 Hadoop 提供的 MapReduce 來實現的。
    • 而數據庫通常有自己的執行引擎。
  •  可擴展性
    • 由於 Hive 是建立在 Hadoop 之上的,因此 Hive 的可擴展性是和 Hadoop 的可擴展性是一致的。
    • 而數據庫由於 ACID 語義的嚴格限制,擴展行非常有限。

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章