接著上次的hive安裝配置http://www.reibang.com/p/2f284bd01344前痘,這次記錄別的。
那Hive到底能干啥担忧?芹缔?
基于Hadoop的數(shù)據(jù)倉庫,可以把結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張表瓶盛,然后提供類SQL的查詢功能最欠、
本質(zhì)是把HQL轉(zhuǎn)化為MR程序,當(dāng)然這個MR可以被Spark或者Flink代替惩猫。
Hive架構(gòu)
這個Metadata配置存在mysql里面芝硬,其實(shí)客戶端是先找了MetaData,然后再根據(jù)定位去HDFS里訪問DataNode轧房。
然后里面有好幾個器拌阴,這個是Hive主要做的事,順序:解析器->編譯器->優(yōu)化器->執(zhí)行器
1.解析器看SQL語法奶镶,語法通過了去編譯器迟赃。
2.編譯器負(fù)責(zé)翻譯,把HQL翻譯成MR任務(wù)厂镇,然后交給優(yōu)化器纤壁。
3.優(yōu)化器對MR任務(wù)進(jìn)行優(yōu)化。
4.最后交給執(zhí)行器執(zhí)行任務(wù)捺信。
Hive運(yùn)行過程
寫:
用戶創(chuàng)建一個Table酌媒,通過映射關(guān)系在HDFS中創(chuàng)建數(shù)據(jù)文件,MetaData中記錄對應(yīng)文件的path,根據(jù)這個秒咨,記錄到Hive的元數(shù)據(jù)中喇辽。
讀:
用戶寫SQL,然后這邊其實(shí)是先訪問元數(shù)據(jù)雨席,找到HDFS文件位置茵臭。整個過程如上面架構(gòu)中寫的。
元數(shù)據(jù)Metadata
Hive對應(yīng)Mysql元數(shù)據(jù)的位置是一個默認(rèn)叫做metastore的數(shù)據(jù)庫舅世。
這里面比較重要的表:DBS旦委、TBLS、PARTITONS雏亚、PARTITONS_*
DBS記錄的是庫缨硝,TBLS記錄的是表,另外那幾個是分區(qū)信息罢低。
測一下遠(yuǎn)程連接
在hive的bin目錄下有一個beeline查辩,他是在linux系統(tǒng)里啟動一個hive的jdbc的連接客戶端。
在啟動它之前网持,我們要先啟動一下hiveserver2
nohup hive --service hiveserver2 2>&1 &
啟動beelin之后可以測一下遠(yuǎn)程連接宜岛,不過想要遠(yuǎn)程連接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了萍倡,這么配好之后,就可以遠(yuǎn)程了辟汰,否則會報(bào)錯列敲。
啟動beeline。然后執(zhí)行:
> !connect jdbc:hive2://Master:10000
會讓我們輸入密碼帖汞,這個時候輸入就行了戴而,我用戶hadoop,密碼沒設(shè)置翩蘸。
然后提示我們成功了所意!默認(rèn)的事務(wù)隔離級別是重復(fù)讀〈呤祝可以看一下數(shù)據(jù)庫:
> show databases;
基本數(shù)據(jù)類型
String類型相當(dāng)于varchar扶踊,理論上它能存2G的字符數(shù)。
集合數(shù)據(jù)類型
啊翅帜,這個就是你想象中的姻檀,Array和Map就是你腦海里java里面的Array和Map,Struct就是C里面的Struct
類型轉(zhuǎn)換
Hive不能反向轉(zhuǎn)化涝滴。
隱式類型轉(zhuǎn)化規(guī)則:
1.tinyint能轉(zhuǎn)成int,int能轉(zhuǎn)成bigint
2.整數(shù)類型,包括純數(shù)字的string能隱式轉(zhuǎn)成double
3.tinyint歼疮、smallint杂抽、int能轉(zhuǎn)為float
4.boolean類型不能轉(zhuǎn)化為任何類型