Hive的架構及元數據三種存儲模式

文章目錄
什麼是Hive?
Hive的特色
Hive的架構
元數據存儲模式
java


什麼是Hive?


  Hive最初是由FaceBook公司開發的一個基於Hadoop框架而且開源的一個數據倉庫工具,後貢獻給了Apache基金會由Apache來進行維護和更新。Hive能夠將結構化的文件映射爲一張數據表,但並不提供查詢功能,而是將SQL轉化爲MapReduce任務進行運行。同時,Hive自己不存儲數據,只是存儲數據的路徑或者操做信息,真的數據是存儲在可靠的文件系統當中(如HDFS、Derby等)。mysql

Hive的特色


  Hive的存儲是架構在一個數據庫中並將處理數據儲存到HDFS上web

  Hive專門爲聯機事務分析(OLAP)設計。sql

  Hive使用HSQL來提供SQL類型語言查詢。數據庫

  Hive快速、簡單而且可擴展。編程

Hive的架構

 

  由上圖可知,Hive架構主要包括以下組件:CLI(command line interface)、JDBC/ODBC、Thrift Server、HWI(Hive WEB Interface) 、metastore和Driver(Complier、Optimizer和Executor),這些組件能夠分爲兩大類:服務端組件和客戶端組件。瀏覽器

  (1)客戶端組件服務器

    一、CLI:命令行接口,是最經常使用的一種用戶接口,CLI啓動時會同時啓動一個Hive副本。CLI是和Hive交互的最簡單也是最經常使用方式,只須要在一個具有完整Hive環境下的Shell終端中鍵入hive便可啓動服務。 用戶能夠在CLI上輸入HQL來執行建立表、更改屬性以及查詢等操做。不過Hive CLI不適應於高併發的生產環境,僅僅是Hive管理員的好工具。網絡

    二、JDBC/ODBC: JDBC是java database connection的規範,它定義了一系列java訪問各種db的訪問接口,所以hive-jdbc其實本質上是扮演一個協議轉換的角色,把jdbc的標準協議轉換爲訪問HiveServer服務的協議。hive-jdbc除了扮演網絡協議轉化的工做,並不承擔他的工做,好比sql的合法性校驗和解析,一概忽略 。ODBC是一組對數據庫訪問的標準AP ,它的底層實現源碼是採用C/C++編寫的。JDBC/ODBC都是經過hiveclient與hiveserver保持通信的,藉助thrfit rpc協議來實現交互。架構

    三、HWI:HWI是Hive的web方爲接口,提供了一種能夠能夠經過瀏覽器來訪問Hive的服務。

  (2)服務端組件

    一、Thrift Server:Thrift是facebook開發的一個軟件框架,它用來進行可擴展且跨語言的服務的開發,hive集成了Thrift Server服務,能讓不一樣的編程語言調用hive的接口。

    二、元數據(Metastore):元數據服務組件,這個組件用於存儲hive的元數據, 包括表名、表所屬的數據庫、表的擁有者、列/分區字段、表的類型、表的數據所在目錄等內容。hive的元數據存儲在關係數據庫裏,支持derby、mysql兩種關係型數據庫。元數據對於hive十分重要,所以hive支持把metastore服務獨立出來,安裝到遠程的服務器集羣裏,從而解耦hive服務和metastore服務,保證hive運行的健壯性。

    三、Driver組件:該組件包括Interpreter、Complier、Optimizer和Executor,它的做用是將咱們寫的HiveQL(類SQL)語句進行解析、編譯、優化,生成執行計劃,而後調用底層的mapreduce計算框架。

      解釋器:將SQL字符串轉化爲抽象語法樹AST;

      編譯器:將AST編譯成邏輯執行計劃;

      優化器:對邏輯執行計劃進行優化;

      執行器:將邏輯執行計劃轉成可執行的物理計劃,如MR/Spark

元數據存儲模式


  Metastore的存儲有兩個部分,服務和存儲,Hive的存儲有三種部署模式,分別爲內嵌模式、本地模式和遠程模式。

             內嵌模式:這種模式也將單用戶模式,它是Hive Metastore的最簡單的部署方式,使用Hive內嵌的Derby數據庫來存儲元數據。可是Derby只能接受一個Hive會話的訪問,試圖啓動第二個Hive會話就會致使Metastore鏈接失敗。此模式鏈接到一個In-memory 的數據庫Derby,通常用於Unit Test 。
             內嵌模式:這種模式也將單用戶模式,它是Hive Metastore的最簡單的部署方式,使用Hive內嵌的Derby數據庫來存儲元數據。可是Derby只能接受一個Hive會話的訪問,試圖啓動第二個Hive會話就會致使Metastore鏈接失敗。此模式鏈接到一個In-memory 的數據庫Derby,通常用於Unit Test 。

    本地模式:本地模式也叫多用戶模式,它是Metastore的默認模式(懶人專用模式),該模式下,單Hive會話(一個Hive 服務JVM)以組件方式調用Metastore和Driver。

    在hive-site.xml中設置MySQL的Connection URL、用戶名和密碼以及ConnectionDriverName;

    將MySQL的JDBC驅動Jar文件放到Hive的lib目錄下。

hive.jdo.option.connectionURL="jdbc:mysql://{hostname}/{database name}?createDatabaseIfNotExist=true"

hive.jdo.option.ConnectionDriverName="com.mysql.jdbc.Driver"

hive.jdo.option.connectionUserName="{userName}"     

hive.jdo.option.connectionPassword="{userPassword}"



  遠程模式:用於非Java客戶端訪問元數據庫,在服務器端啓動MetaStoreServer,客戶端利用Thrift協議經過MetaStoreServer訪問元數據庫。 它將Metastore分離出來,成爲一個獨立的Hive服務(Metastore服務還能夠部署多個)。這樣的模式能夠將數據庫層徹底置於防火牆後,客戶就再也不須要用戶名和密碼登陸數據庫,避免了認證信息的泄漏。

屬性    默認值    描述

hive.metastore.local // false爲遠程模式
hive.metastore.uris // 遠端模式下Metastore的URI列表
hive.jdo.option.connectionURL // metastore數據庫的JDBC URL
hive.jdo.option.ConnectionDriverName // JDBC驅動名
hive.jdo.option.connectionUserName // JDBC用戶名
hive.jdo.option.connectionPassword // JDBC密碼


   總結 : 對於數據存儲,Hive沒有專門的數據存儲格式,也沒有爲數據創建索引,用戶能夠很是自由的組織Hive中的表,只須要在建立表的時候告訴Hive數據中的列分隔符和行分隔符,Hive就能夠解析數據。Hive中全部的數據都存儲在HDFS中,存儲結構主要包括數據庫、文件、表和視圖。  

相關文章
相關標籤/搜索