前言
Hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供類SQL查詢功能。
其本質(zhì)是將SQL轉(zhuǎn)換為MapReduce的任務(wù)進(jìn)行運(yùn)算,底層由HDFS來提供數(shù)據(jù)的存儲,Hive可以理解為一個將SQL轉(zhuǎn)換為MapReduce任務(wù)的工具,甚至更進(jìn)一步可以說Hive就是一個MapReduce的客戶端。
Hive的特點(diǎn)
- 可擴(kuò)展
Hive可以自由的擴(kuò)展集群的規(guī)模,一般情況下不需要重啟服務(wù)。 - 延展性
Hive支持用戶自定義函數(shù),用戶可以根據(jù)自己的需求來實(shí)現(xiàn)自己的函數(shù)。 - 容錯
Hive有良好的容錯性,節(jié)點(diǎn)出現(xiàn)問題SQL仍可完成執(zhí)行。
Hive架構(gòu)
- 用戶接口
包括CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)為shell命令行;JDBC/ODBC是Hive的JAVA實(shí)現(xiàn),與傳統(tǒng)數(shù)據(jù)庫JDBC類似;WebGUI是通過瀏覽器訪問Hive。 - 元數(shù)據(jù)存儲
通常是存儲在關(guān)系數(shù)據(jù)庫如mysql/derby中。Hive 將元數(shù)據(jù)存儲在數(shù)據(jù)庫中。Hive 中的元數(shù)據(jù)包括表的名字,表的列和分區(qū)及其屬性,表的屬性(是否為外部表等),表的數(shù)據(jù)所在目錄等。 - 解釋器、編譯器、優(yōu)化器、執(zhí)行器
完成HQL 查詢語句從詞法分析、語法分析、編譯、優(yōu)化以及查詢計劃的生成。生成的查詢計劃存儲在HDFS 中,并在隨后有MapReduce 調(diào)用執(zhí)行。
Hive的數(shù)據(jù)存儲
1、Hive中所有的數(shù)據(jù)都存儲在 HDFS 中,沒有專門的數(shù)據(jù)存儲格式(可支持Text,SequenceFile,ParquetFile,ORC格式RCFILE等)
2、只需要在創(chuàng)建表的時候告訴 Hive 數(shù)據(jù)中的列分隔符和行分隔符,Hive 就可以解析數(shù)據(jù)。
3、Hive 中包含以下數(shù)據(jù)模型:DB、Table,External Table,Partition,Bucket。
- db:在hdfs中表現(xiàn)為
${hive.metastore.warehouse.dir}目錄下一個文件夾 - table:在hdfs中表現(xiàn)所屬db目錄下一個文件夾
- external table:與table類似,不過其數(shù)據(jù)存放位置可以在任意指定路徑
- partition:在hdfs中表現(xiàn)為table目錄下的子目錄(分區(qū))
- bucket:在hdfs中表現(xiàn)為同一個表目錄下根據(jù)hash散列之后的多個文件(分桶)