< h1 id"蜂巢架構和構造方法">Hive 架構和構造方法</h1>
[目錄]
< h2 id ,"前言">前言</h2>
本文檔基于配置單元 3.1.2
< h2 id "hive" >hive 的基礎知識</h2>
< h3 id,"基本架構">基本架構</h3>

整個 hpe 由 hpeserver2 和 hpe 用戶端組成
有三種類型的蜂巢用戶端,直線,使用jdbc連結蜂巢伺服器,或使用蜂巢CLI(這已經過時了,蜂巢官員不再推薦,推薦直行)
Hive 伺服器本身由 hiv server2 和 metastore 組成
元存儲是配置單元的中繼資料管理元件
hcatalog 在元存儲上設定,公開一組 API,允許其他架構(如 Pig)使用實時中繼資料管理功能從表的角度管理資料
Webchat是基于hcatalog的公開的甯靜界面
蜂巢的實際資料存儲在hadoop的hodfs中
Hue為使用者提供了一種基于sql的開發的圖形化方式,當然還有其他附加功能<h3 id""metastore">元存儲</h3>蜂巢資料基本上存儲在hdffs中。如何從表的角度看資料,這是元存儲的功勞,它存儲了表的架構資訊、序列化資訊、存儲位置資訊等
元存儲本身由兩部分組成
元存儲伺服器
metatore db
這種經典的架構,就像任何單體java應用程式一樣,伺服器本身就是應用程式,db來存儲資料。但整體上有三種特定的元存儲部署模式
< h4 id,"内聯服務和資料庫">嵌入式服務和資料庫</h4>
Metastore 伺服器和 metatastore DB 與 hive 伺服器一起内聯部署,其中 metastore DB 使用嵌入式 Derby 資料庫啟動
< h4 id - 内聯服務>内聯服務</h4>
元存儲伺服器仍與配置單元一起部署。但是元存儲資料庫使用一個單獨的Mysql來承擔
< h4 id"服務和資料庫單獨部署">服務和資料庫單獨部署</h4>
除了資料庫獨立部署之外,元存儲服務本身也是獨立部署的
<h3 id="hcatalog">hcatalog</h3>
示範
上面的指令首先将檔案複制到 hdfs,然後使用 hatalog 作為表 rawevents 的新分區
<用戶端> h3 id"用戶端"</h3>
< h4 id"用戶端的本地模式">用戶端的本地模式</h4>
上面描述的元存儲的嵌入或遠端部署是從 hiveserver 的角度出發的。Hiveserver 本身是一個獨立的部署。但是,對于實時用戶端,您可以通過遠端模式連接配接到已部署的遠端伺服器。您還可以使用本地實時伺服器及其相應的元存儲啟動用戶端。找出答案很重要
<h4 id="beeline">beeline</h4>
作為hive推薦的下一代用戶端。他使用Thrift遠端通話。直線的本地模式
直線的本地模式
本地和遠端之間的差別在于是否指定遠端主機和端口。如果不是,則為本地模式
< h4 id"直線自動模式">直線自動模式</h4>
每次通過直線連接配接到遠端 hpeserver 時,都需要指定一個較長的 jdbc url,這很麻煩,如果我們想點選直線指令,請直接連接配接到遠端的 liveserver2,可以将其添加到實時配置檔案目錄中
<code>蜜蜂網站.xml</code>
配置檔案,檔案的内容大緻如下
有兩種方法可以配置直線連接配接和特定的 jdbc 連接配接字元串。一個使用 tcp,一個使用 http。預設情況下使用 Tcp
<h4 id="jdbc">jdbc</h4>
Jdbc 連結配置單元還有兩種模式
對于遠端伺服器,URL 格式為
<code>jdbc:hive2://<host>:<port>/<db>; initFile=<file></code>
(HiveServer2 的預設端口為 10000)。
對于嵌入式伺服器,URL 格式為
<code>jdbc:hive2:///; initFile=<file></code>
(無主機或端口)。
< h2 id"部署"的>部署</h2>
蜂巢的全面部署涉及五個元件,主要是前三個元件
元存儲的部署
部署蜂巢伺服器2
用戶端的部署
部署 hcatalog 伺服器(不是必需的)
部署 webhcat 伺服器(不需要)
1,2個中的一個可以放在一起,即lifeverver2嵌入式元存儲,隻是METAstore DB,挂在Mysql上。
特别是在實體伺服器上,上述三個元件可以部署到三台不同的計算機上,盡管 hp 用戶端通常位于多台計算機上。
所有三個元件的配置都可以是實時站點.xml,但配置内容不一定相同。例如,需要配置 liveserver2、中繼資料庫連接配接資訊,但 clin 不需要此資訊。
除了實時站點.xml之外,hive 還支援在其他幾個位置進行配置
在指令啟動時傳遞
<code>--蜂巢</code>
參數,指定自定義配置,例如
<code>bin/hive --hiveconf hive.exec.scratchdir=/tmp/mydir</code>
與元存儲相關的配置在 hivemetastore-site .xml 檔案中指定
hiveserver2 的獨占配置在 liveserver2 站點.xml中指定。
當這些路徑和配置檔案具有相同的配置時,配置單元識别優先級如下所示,從左到右,将配置單元站點.xml -> hivemetastore-site .xml -> hiveserver2-site .xml ->'-hiveconf'
是以,最佳配置政策是:
在實時站點.xml中配置,hiveserver2 和 hive 用戶端用戶端共享一個配置,進而可以輕松地将配置直接分發到多台計算機
将與元存儲相關的配置放在 hivemetastore-site .xml。與中繼資料庫相關的配置(僅存在于元伺服器部署的計算機上)不會在四個分區中頒發資料庫密碼
将 hiveserver2 的唯一配置放在 liveserver2 站點.xml
< h3 id " "Deployiveserver2" > deploy hivserver2</h3>
以下配置以嵌入式元存儲伺服器(遠端元存儲資料庫)的形式進行配置,用于生命伺服器部署
在需要部署配置單元的計算機上。建立一個真實賬戶,
<code>添加使用者配置單元</code>
并将其添加到hadoop組中,所有後續配置和啟動都由蜂巢使用者執行
下載下傳實時安裝包。删除 conf 下的單個模闆檔案,并根據需要對其進行配置。配置單元預設值.xml.template 需要更改為實時站點.xml
配置單元預設.xml.template 包含所有配置單元元件的預設配置。
詳細的部署文檔:https://cwiki.apache.org/confluence/display/Hive/AdminManual+Configuration#AdminManualConfiguration-HiveMetastoreConfigurationVariables
<h4 id"在 hdfs 中建立實時資料存儲路徑"> hdfs 中建立配置單中繼資料存儲路徑</h4>
在 hdfs 中建立以下檔案,并向配置單元所屬的組授予寫入權限
/user/hive/warehouse 是實際存儲配置單元中表資料的位置。這是預設路徑,您當然可以在實時站點.xml
<code>hive.metastore.warehouse.dir</code>
用于指定新路徑的屬性
< h4 id"配置配置配置環境變量></h4>
< h4 id ,配置日志輸出路徑>配置日志輸出路徑</h4>
配置單元的預設輸出路徑為
<code>/tmp/<user.name>/hive.log</code>
如果我們從蜂巢使用者開始,則路徑為
<code>/tmp/hive/hive.log</code>
/tmp 路徑是 linux 用于存儲每個應用程式的運作時的中間狀态資料,通常在作業系統重新啟動後自動清理。當然,您可以修改實時log4j檔案以指定
<code>hive.log.dir=<other_location></code>
路徑
您還可以動态地通過 liveconf 參數在啟動 liveserver2 時指定路徑
<code>bin/hiveserver2 --hiveconf hive.root.logger=INFO,DRFA</code>
< h4 id""hive" >hive 的臨時檔案配置</h4>
hive 運作時還會在本地和 hdfs 中存儲臨時檔案(稱為暫存檔案)。存儲的檔案路徑為 hdfs:
<code>/tmp/hive-<使用者名></code>
當地:
<code>/tmp/<使用者名></code>
值得注意的是,蜂巢站點.xml模闆,有許多路徑配置
<code>${java.io.tmpdir}/${user.name}/</code>
,
<code>${java.io.tmpdir}</code>
此配置的預設值是使用臨時目錄(通常在 linux 下)擷取 Java
<code>/噸/噸</code>
<code>${user.name}</code>
表示正在采用目前啟動配置單元的使用者。如果未具體指定,則可以删除相應的配置項目。并且不要直接在配置中編寫
在 xml 中無法識别這些占位符。
<h4 id"配置元存儲的資料庫資訊,并初始化>配置元存儲的資料庫資訊并對其進行初始化</h4>
在與.xml對應的目錄中,為指定人員建立一個.xml檔案,以配置元存儲相關資訊
初始化元存儲資料庫
dbType 的值可以在哪裡
<code>derby, oracle, mysql, mssql, postgres</code>
參考 https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administration
<h4 id""start liveserver2" > start hiveserver2</h4>
上述指令針對前台運作,最好是在無挂斷加背景模式下運作
啟動後 hpe 的 Web 界面的端口為:10002
< h3 id,"基本用戶端部署">基本用戶端部署</h3>
< h4 id"包分發">包分發</h4>
将上述帶有配置的hpe發包複制到需要啟動直線的機器上,即完成用戶端的配置。配置檔案隻需要實時站點的.xml,根據特定的機器環境修改相應的路徑配置資訊,并且不需要 livemetastore-site .xml 和 hiveserver2-site 的.xml檔案
< h4 id ,"環境變量配置">環境變量配置</h4>
< h4 id,"日志路徑配置">日志路徑配置</h4>
與 lifeerver 一樣,根據具體情況進行一些路徑配置修改
< h4 id"開始">開始</h4>
用
<code>$HIVE_HOME/bin/beeline -u jdbc:hive2://$HS 2_HOST:$HS 2_PORT</code>
你可以連接配接到liveerver2。
由于 hpe 在 hdfs 中使用的目錄,是以預設值為
<code>/使用者/配置單元/倉庫</code>
,是以,為了避免與權限相關的錯誤,您需要通過直線添加連結
<code>-n</code>
參數,指定目前用戶端正在使用的使用者。使用者必須
而它下面的檔案的相關權限,如果不需要單獨添加的話。權限模型,類似于 Linux。如果存在權限問題,則一般錯誤類似
具有使用者名的連結采用以下形式:
這是蜂巢使用者到蜂巢伺服器的連結
Beeline 将文檔作為一個整體使用:https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients
<h3 id"蜂巢伺服器高可用性部署">hiveserver 高可用性部署</h3>
< h4 id,"服務端配置">端配置</h4>
在需要啟動 hiverserver 的所有計算機上,配置 liveserver2-site .xml。其中有以下配置
還要記住,需要部署的計算機都具有相同的元存儲配置,確定它們連接配接到相同的mysql,并且livemetastore-site.xml配置可以複制到需要啟動lifeerver的多台計算機上
參考資料: http://lxw1234.com/archives/2016/05/675.htm
< h4 id - "用戶端連接配接">用戶端連接配接</h4>
與直線的連接配接如下:
請注意,其中的 jdbc 網址必須用引号括起來
< h3 id - "認證">認證</h3>
此處選擇 Kerberos 作為身份驗證選項。需要配置的三個配置項如下:
<h4 id"在kerberos認證後使用直線連結方法">在kerberos認證後使用直線連結方法</h4>
在使用上述指令之前,可以保證目前機器的 kerberos 認證已認證 kinit 實作。"無直線"指令将報告錯誤,因為未擷取 Kerberos 認證票證。
該指令會自動讀取目前登入的 kerberos 使用者資訊,該資訊在執行指令時随您一起擷取
例如,目前的 kerberos tgt 是測試使用者,則與所有者對應的 hivesql 就是測試。實際元件之間的通信身份驗證由實時/[email protected] 使用者使用。但是,将控制授權的粒度以進行測試。
此功能由 hpe 配置
<code>hive.server2.enable.doAs</code>
要控制的屬性(當該屬性為 true 時)表示運作以将使用者送出為最終 sql 執行的使用者
另外,我們最好在蜂巢伺服器的配置檔案中
<code>hive.server2.allow.user.substitution</code>
關閉為 false。由于此選項,允許使用者使用
該參數指定使用者。這會導緻一個使用者使用自己的 kerberos 憑據操作其他人的庫表。但是,禁用時,Hue 無法将其登入使用者設為送出作業的人員。
<h3 id"基于實時站點xml的用戶端連接配接">基于實時站點.xml的用戶端連接配接</h3>
上述記錄以 jdbc 實作的方式連接配接到 hpeserver2。但是,某些依賴于 hpe 的程式隻能通過.xml以這種方式連接配接到 hiveserver。典型色調
順化會走
<code>${HIVE_CONF_DIR}</code>
環境變量或
<code>/etc/hive/conf</code>
往下看
<code>網站.xml</code>
和
<code>蜜蜂-hs2-連接配接.xml</code>
兩個配置檔案,讀取其中的資訊,實作與生命伺服器的連接配接。
如果群集配置了 kerberos,則需要在實時站點.xml中對其進行配置,例如,與 liveserver2-site .xml相同的 kerberos 身份驗證配置
與 hue 使用直線連接配接一樣,您也可以配置 beeline-hs2 連接配接.xml,您可以在其中指定一些連接配接到 hiveserver2 的代理使用者資訊,但目前未發現該配置仍然可用。如下:
< h3 id ,"一些錯誤">一些錯誤</h3>
< h4 id"錯誤 1-芭樂">錯誤 1 芭樂</h4>
初始化元存儲架構是一個錯誤
原因是hadoop路徑
<code>share/hadoop/common/lib/</code>
下面的芭樂包與 live lib 下的芭樂包版本不一緻。
解決方案是删除hpe的芭樂包,并将hadoop的相應芭樂包複制過來
<h4 id"錯誤2,mysql驅動器">錯誤2,mysql驅動器</h4>
問題的原因,蜂巢缺乏mysql驅動器
解決方案是下載下傳一個mysql驅動程式并将其安裝在實時庫下
< h4 id"錯誤 3">錯誤 3</h4>
使用直線用戶端時:
<code>beeline -u jdbc:hive2://master:10000</code>
連結,蜂巢伺服器 2,報告了以下錯誤
我們是由蜂巢使用者啟動的 hpeserver2。是以,所有用戶端,無論是否以書面形式連結到 hpeserver2,最終都會使用 hiveserver2 來通路 hadoop 叢集,所有這些用戶端都由 hive 的使用者通路。
但是,如果你不在hadoop中,做相關的配置,那麼hadoop預設不允許使用者将叢集作為其他使用者的代理使用者,是以你需要在hadoop的代碼站點.xml做以下配置。
< h2 id , "資源" > 參考文獻</h2>
https://cwiki.apache.org/confluence/display/Hive/GettingStartedhttps://cwiki.apache.org/confluence/display/Hive/HCatalog+InstallHCathttps://stackoverflow.com/questions/22533814/what-is-use-of-hcatalog-in-hadoophttps://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients
歡迎來到我的個人公衆号"西北UP",記錄代碼生活,行業思考,科技評論