Hive簡介
- hive的起源
許多公司需要對數(shù)據(jù)進行分析凯旋、存儲乞而。但是mapreduce程序去分析數(shù)據(jù)需要按照八股文格式去編寫代碼路捧,但是當(dāng)時很多公司沒有很多的java程序員检激,并且學(xué)習(xí)mapreduce成本也高。隨后facebook公司開發(fā)了hive领跛,擁有學(xué)習(xí)成本低乏德、入門快的特點;只需要你懂sql語句,不會mapreduce編程也能做大數(shù)據(jù)分析喊括。 - hive的功能
- 可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射成一張表胧瓜,并提供類SQL查詢功能
- 可以對數(shù)據(jù)提取轉(zhuǎn)化加載(ETL)
- hive的特性
- Hive是構(gòu)建在Hadoop之上的,所有數(shù)據(jù)都是存儲在HDFS中郑什。
- 分析查詢SQL語句被轉(zhuǎn)化為MapReduce任務(wù)在Hadoop框架中運行府喳。
- Hive的執(zhí)行延遲高,不適合做實時的數(shù)據(jù)分析蘑拯。
- 靈活性高钝满,可以自定義用戶函數(shù)(UDF)和自定義存儲格式。
- 使用HQL作為查詢接口申窘。
- 易擴展弯蚜,因為是基于HDFS+MapReduce,集群擴展容易剃法。
Hive架構(gòu)
hive2.png
- 用戶接口主要有:CLI,Clinet,WUI三個組成碎捺。Cli(commmand line interface)為命令行接口。Client是Hive的客戶端贷洲,用戶連接至Hive Server收厨。在啟動Client模式的時候,需要指出Hive Server所在節(jié)點优构,并且在該節(jié)點啟動Hive Server诵叁。WUI是通過瀏覽器訪問Hive,使用之前要啟動hwi服務(wù)钦椭。
- Meta store是用來存儲Hive的元數(shù)據(jù)黎休,默認元數(shù)據(jù)是存儲在derby關(guān)系型數(shù)據(jù)庫中,但是derby是能同時只有一個實例玉凯,也就是說不能多個命令行接口同時使用势腮,所以可以設(shè)置成mysql。元數(shù)據(jù)其中包括漫仆,數(shù)據(jù)庫和表的hdfs位置捎拯、名稱、列的屬性等信息盲厌。為什么會把元數(shù)據(jù)的存儲設(shè)置為單獨的署照,而不是存儲在HIVE里面?是為了把元數(shù)據(jù)分離出來吗浩,提高了數(shù)據(jù)的安全性和方便管理建芙。
- Parser、Optimizer懂扼、Execution分別用來作HQL的解析器禁荸、編譯優(yōu)化右蒲、生成執(zhí)行計劃,然后由MapReduce調(diào)用執(zhí)行赶熟。但是不是所有的HQL命令都會生成mapreduce任務(wù)瑰妄,例如select * from table_name就不會生成。
Hive與關(guān)系型數(shù)據(jù)庫的差別
- 在關(guān)系型數(shù)據(jù)庫中映砖,向表中加載數(shù)據(jù)時间坐,因為會涉及到對列鍵索引和對數(shù)據(jù)進行壓縮,會檢查加載的數(shù)據(jù)文件格式是否與表存儲數(shù)據(jù)的格式是否相同邑退,如果不同竹宋,則會加載數(shù)據(jù)失敗。但是Hive在加載數(shù)據(jù)時不會對數(shù)據(jù)格式進行檢查地技,而是在查詢時去檢查蜈七。雖然這樣查詢效率會降低,而且數(shù)據(jù)量很大乓土,與hive只適合離線數(shù)據(jù)存儲分析相對應(yīng)宪潮。
- 關(guān)系型數(shù)據(jù)庫可以對表中具體的某一行進行增刪改查操作溯警、索引趣苏、事物,但是hive不支持梯轻,只能覆蓋原數(shù)據(jù)和追加數(shù)據(jù)食磕。因為hive本來是用來應(yīng)對大數(shù)據(jù)分析存儲,對某一行進行操作喳挑,效率會非常的差彬伦。