Hive基本概念
Hive基本概念
目錄
1. 什么是Hive
- Hive 處理的數據存儲在 HDFS。
- Hive 分析數據底層的實現是 MapReduce。
- 執行程序運行在 Yarn 上。
2. Hive的優缺點
1. 優點
2. 缺點
Hive 的 HQL 的表達能力有限。
Hive 的效率比較低
3. Hive架構原理
用戶接口:Client
CLI(command-line interface)、JDBC/ODBC(jdbc 訪問 hive)、WEBUI(游覽器訪問 hive)
元數據:Matestore
元數據包括:表名、表所屬的數據庫(默認為default)、表的擁有者、列/分區字段、表的類型(是否為外部表)、表的數據所在目錄等。
默認存儲在自帶的 derby 數據庫中,推薦使用 MySQL 存儲 Metastore。
Hadoop
使用 HDFS 進行存儲,使用 MapReduce 進行計算。
驅動器:Driver
Hive通過給用戶提供的一系列交互接口,接收到用戶的指令(SQL),使用自己的Driver,結合元數據(MetaStore),將這些指令翻譯成MapReduce,提交到Hadoop中執行,最后,將執行返回的結果輸出到用戶交互接口。
4. Hive和數據庫比較
由于 Hive 采用了類似SQL 的查詢語言 HQL(Hive Query Language),因此很容易將 Hive 理解為數據庫。其實從結構上來看,Hive 和數據庫除了擁有類似的查詢語言,再無類似之處。本文將從多個方面來闡述 Hive 和數據庫的差異。數據庫可以用在 Online 的應用中,但是Hive 是為數據倉庫而設計的,清楚這一點,有助于從應用角度理解 Hive 的特性。
由于SQL被廣泛的應用在數據倉庫中,因此,專門針對Hive的特性設計了類SQL的查詢語言HQL。熟悉SQL開發的開發者可以很方便的使用Hive進行開發。
Hive 是建立在 Hadoop 之上的,所有 Hive 的數據都是存儲在 HDFS 中的。而數據庫則可以將數據保存在塊設備或者本地文件系統中。
由于Hive是針對數據倉庫應用設計的,而數據倉庫的內容是讀多寫少的。因此,Hive中不建議對數據的改寫,所有的數據都是在加載的時候確定好的。而數據庫中的數據通常是需要經常進行修改的,因此可以使用 INSERT INTO … VALUES 添加數據,使用 UPDATE … SET修改數據。
Hive中大多數查詢的執行是通過 Hadoop 提供的 MapReduce 來實現的。而數據庫通常有自己的執行引擎。
Hive 在查詢數據的時候,由于沒有索引,需要掃描整個表,因此延遲較高。另外一個導致 Hive 執行延遲高的因素是 MapReduce框架。由于MapReduce 本身具有較高的延遲,因此在利用MapReduce 執行Hive查詢時,也會有較高的延遲。相對的,數據庫的執行延遲較低。當然,這個低是有條件的,即數據規模較小,當數據規模大到超過數據庫的處理能力的時候,Hive的并行計算顯然能體現出優勢。
由于Hive是建立在Hadoop之上的,因此Hive的可擴展性是和Hadoop的可擴展性是一致的(世界上最大的Hadoop 集群在 Yahoo!,2009年的規模在4000 臺節點左右)。而數據庫由于 ACID 語義的嚴格限制,擴展性非常有限。目前最先進的并行數據庫 Oracle 在理論上的擴展能力也只有100臺左右。
由于Hive建立在集群上并可以利用MapReduce進行并行計算,因此可以支持很大規模的數據;對應的,數據庫可以支持的數據規模較小。
總結
- 上一篇: 百度Java电面一面面经
- 下一篇: Hive安装及常用交互命令