Hive架構和工作原理
from:https://cloud.tencent.com/developer/news/362488
一、Hive 架構
下面是Hive的架構圖。
Hive的體系結構可以分為以下幾部分:
1、用戶接口主要有三個:CLI,Client 和 WUI。其中最常用的是CLI,Cli啟動的時候,會同時啟動一個Hive副本。Client是Hive的客戶端,用戶連接至Hive Server。在啟動 Client模式的時候,需要指出Hive Server所在節點,並且在該節點啟動Hive Server。 WUI是通過瀏覽器訪問Hive。
2、Hive將元數據存儲在數據庫中,如mysql、derby。Hive中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等。
3、解釋器、編譯器、優化器完成HQL查詢語句從詞法分析、語法分析、編譯、優化以及查詢計划的生成。生成的查詢計划存儲在HDFS中,並在隨后有MapReduce調用執行。
4、Hive的數據存儲在HDFS中,大部分的查詢、計算由MapReduce完成(包含*的查詢,比如select * from tbl不會生成MapRedcue任務)。
二、元數據存儲
Hive將元數據存儲在RDBMS中,有三種模式可以連接到數據庫:
1、元數據庫內嵌模式:此模式連接到一個In-memory 的數據庫Derby,一般用於Unit Test。
2、元數據庫mysql模式:通過網絡連接到一個數據庫中,是最經常使用到的模式。
3、MetaStoreServe訪問元數據庫模式:用於非Java客戶端訪問元數據庫,在服務器端啟動MetaStoreServer,客戶端利用Thrift協議通過MetaStoreServer訪問元數據庫。
對於數據存儲,Hive沒有專門的數據存儲格式,也沒有為數據建立索引,用戶可以非常自由的組織Hive中的表,只需要在創建表的時候告訴Hive數據中的列分隔符和行分隔符,Hive就可以解析數據。Hive中所有的數據都存儲在HDFS中,存儲結構主要包括數據庫、文件、表和視圖。Hive中包含以下數據模型:Table內部表,External Table外部表,Partition分區,Bucket桶。Hive默認可以直接加載文本文件,還支持sequence file 、RCFile。
4、三種模式匯總:
三、Hive 工作原理
Hive 工作原理如下圖所示。
Hive構建在Hadoop之上
1、HQL中對查詢語句的解釋、優化、生成查詢計划是由Hive完成的
2、所有的數據都是存儲在Hadoop中
3、查詢計划被轉化為MapReduce任務,在Hadoop中執行(有些查詢沒有MR任務,如:select * from table)
4、Hadoop和Hive都是用UTF-8編碼的
Hive編譯器的組成:
Hive編譯流程如下
四、Hive安裝和部署
1、解壓縮 hive 安裝包
2、安裝並啟動mysql
3、修改 mysql 密碼
4、給root用戶訪問授權
5、建立鏈接,該命令在 hive 安裝目錄的 lib 目錄下建立軟鏈接,指向/usr/share/java/mysql-connector-java.jar
6、配置環境變量
生效環境變量
7、修改hadoop的配置文件core-site.xml
增加如下:
8、修改hive的配置文件hive-site.xml
增加如下:
注釋:
hive.metastore.uris 中的“hadoop“含義為 metastore 所在的機器(啟動metastore 的方法見下一節)
javax.jdo.option.ConnectionURL 中的“hadoop”為 mysql 安裝機器的hostname
javax.jdo.option.ConnectionUserName 和javax.jdo.option.ConnectionPassword
分別為 mysql 的訪問用戶和密碼
fs.defaultFS 為 HDFS 的 namenode 啟動的機器地址
beeline.hs2.connection.user 和 beeline.hs2.connection.password 是 beeline 方式
訪問的用戶名和密碼,可任意指定,但在 beeline 訪問時要寫入你指定的這個
(具體參考最后一部分)
9、啟動hive metastore
10、啟動 hiveserver2
11、hive 常見兩種訪問方式
hive
beeline
!connect jdbc:hive2://bigdata:10000/default bigdata bigdata
