接着上次的hive安裝配置https://www.jianshu.com/p/2f284bd01344,這次記錄別的。
那Hive到底能幹啥??
基於Hadoop的數據倉庫,可以把結構化的數據文件映射爲一張表,然後提供類SQL的查詢功能、
本質是把HQL轉化爲MR程序,當然這個MR可以被Spark或者Flink代替。
Hive架構
這個Metadata配置存在mysql裏面,其實客戶端是先找了MetaData,然後再根據定位去HDFS裏訪問DataNode。
然後裏面有好幾個器,這個是Hive主要做的事,順序:解析器->編譯器->優化器->執行器
1.解析器看SQL語法,語法通過了去編譯器。
2.編譯器負責翻譯,把HQL翻譯成MR任務,然後交給優化器。
3.優化器對MR任務進行優化。
4.最後交給執行器執行任務。
Hive運行過程
寫:
用戶創建一個Table,通過映射關係在HDFS中創建數據文件,MetaData中記錄對應文件的path,根據這個,記錄到Hive的元數據中。
讀:
用戶寫SQL,然後這邊其實是先訪問元數據,找到HDFS文件位置。整個過程如上面架構中寫的。
元數據Metadata
Hive對應Mysql元數據的位置是一個默認叫做metastore的數據庫。
這裏面比較重要的表:DBS、TBLS、PARTITONS、PARTITONS_*
DBS記錄的是庫,TBLS記錄的是表,另外那幾個是分區信息。
測一下遠程連接
在hive的bin目錄下有一個beeline,他是在linux系統裏啓動一個hive的jdbc的連接客戶端。
在啓動它之前,我們要先啓動一下hiveserver2
nohup hive --service hiveserver2 2>&1 &
啓動beelin之後可以測一下遠程連接,不過想要遠程連接hadoop需要在hadoop的core-site.xml配置一下:
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
由於我linux用戶是hadoop,所以name那裏,proxyuser寫的就是hadoop了,這麼配好之後,就可以遠程了,否則會報錯。
啓動beeline。然後執行:
> !connect jdbc:hive2://Master:10000
會讓我們輸入密碼,這個時候輸入就行了,我用戶hadoop,密碼沒設置。
然後提示我們成功了!默認的事務隔離級別是重複讀。可以看一下數據庫:
> show databases;
基本數據類型
String類型相當於varchar,理論上它能存2G的字符數。
集合數據類型
啊,這個就是你想象中的,Array和Map就是你腦海裏java裏面的Array和Map,Struct就是C裏面的Struct
類型轉換
Hive不能反向轉化。
隱式類型轉化規則:
1.tinyint能轉成int,int能轉成bigint
2.整數類型,包括純數字的string能隱式轉成double
3.tinyint、smallint、int能轉爲float
4.boolean類型不能轉化爲任何類型