hive學習1(hive基本概念)


hive基本概念

hive簡介

hive是什么

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供類SQL查詢功能。

為什么使用hive

1)簡單易上手。提供了類sql查詢語言HQL,提供快速開發的能力。

2)避免了去寫MapReduce,減少開發人員的學習成本。

3)統一的元數據管理(HCalalog)。可與pig,presto等共享。

4)為超大數據集設計的計算/擴展能力。MR作為計算引擎,HDFS作為存儲系統。

hive的特點

  • 可擴展
    Hive可以自由的擴展集群的規模,一般情況下不需要重啟服務。

  • 延展性
    Hive支持用戶自定義函數,用戶可以根據自己的需求來實現自己的函數。

  • 容錯
    良好的容錯性,節點出現問題SQL仍可完成執行。

hive的系統架構

hive基本組成

1)用戶接口

  • CLI,JDBC/ODBC,WebUI

2)元數據存儲(matastore)

  • 默認存儲在自帶的數據庫derby中,線上使用時一般換為MySQL

3)驅動器(Driver)

  • 解析器,編譯器,優化器,執行器

4)Hadoop

  • 用MR計算,用HDFS存儲

hive各組件基本功能

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

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

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

Hive與SQL的比較

1)查詢語言

  • hive使用類SQL的HQL
  • sql使用sql

2)數據存儲位置

  • hive是將數據存儲在HDFS中
  • sql可以將數據保存在塊設備或者本地文件系統中

3)數據格式

  • Hive 中沒有定義專門的數據格式,數據格式可以由用戶指定,用戶定義數據格式需要指定三個屬性:列分隔符(通常為空格、”\t”、”\x001″)、行分隔符(”\n”)以及讀取文件數據的方法(Hive 中默認有三個文件格式 TextFile,SequenceFile 以及 RCFile)
  • 數據庫中,不同的數據庫有不同的存儲引擎,定義了自己的數據格式

4)數據更新

  • Hive 中不支持對數據的改寫和添加,所有的數據都是在加載的時候中確定好的
  • sql支持數據更新

5)執行延遲

  • hive延遲性高
  • sql延遲性低

6)擴展性

  • hive擴展性好
  • sql擴展性有限

7)索引

  • hive和sql都支持索引

8)分區

hive和sql都支持分區

hive的數據存儲

  • hive的所有數據存儲基於hadoop的HDFS,hive沒有專門的數據存儲格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)

  • 在創建表時,指定Hive 數據的列分隔符和行分隔符,Hive 就可以解析數據

  • 存儲結構主要包括:數據庫、文件、表、視圖、索引

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

1) db:在hdfs中表現為${hive.metastore.warehouse.dir}目錄下一個文件夾

2) table:在hdfs中表現所屬db目錄下一個文件夾
3) external table:外部表, 與table類似,不過其數據存放位置可以在任意指定路徑。普通表:刪除表后,hdfs上的文件都刪了;外部表刪除后, hdfs上的文件沒有刪除, 只是把文件刪除了
4) partition:在hdfs中表現為table目錄下的子目錄
5) bucket:桶, 在hdfs中表現為同一個表目錄下根據hash散列之后的多個文件, 會根據不同的文件把數據放到不同的文件中


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM