一、什麼是hive
如下圖所示,hive在Hadoop生態中處於比較高層的位置,其本質上就是將mapreduce轉換成了sql的寫法。
卻也sql不盡然相同,畢竟mysql等關係型數據的sql則是服務於web、應用等,是爲了讓數據更面向對象、更穩定、更原子性操作。而hive的目的則是數據分析,不需要對每一條數據都負責,只是分析數據的特性特徵。
二、hive的原理
我們知道了什麼是hive,那麼hive的原理是什麼呢?它和sql數據庫一樣基於本地文件系統上嗎?顯然並不是的,總結一下,:
1、hive底層文件系統爲HDFS(即分佈式文件系統,這就說明hive比起關係型數據庫,存儲的數據量可以倍數級提升)
2、hive的執行過程:hiveQL轉化爲mapreduce,mapreduce運行於yarn平臺(即hive運行的實質上是mapreduce,並不快,但是可處理數據量大)
三、hive使用
hive實際使用可以通過兩種方式:hive-cli客戶端中交互式操作;hive命令提交語句或sql文件。
hive在實際使用過程中只要編寫普通的sql即可,於一般sql操作無太大區別,需要注意的地方:
1、沒有指定databse,則默認使用default庫。
2、創建table的時候有三種方式:內部表(類似一般sql表)、外部表(通過hdfs上已存在的結構化數據直接創建出表)、臨時表(只對當前session有效)
3、table有分區的概念,table可以按照table內字段進行分區(比如員工表按照年和月進行分區)。分區後每一個分區都在hdfs上有單獨的存儲文件夾,這樣大大提高了單分區的操作速度。
4、hive在涉及join、groupby等操作的時候需要注意數據傾斜、資源分配不均的問題,這也是hive調優的重點。對於要處理的數據,要明白hive轉換成mapreduce後,每個節點處理多少數據,是否均勻。
5、hive有describe、explain等語句,可以查看我們所寫sql的執行計劃。