天天看點

Hive架構及搭建方式Hive架構及搭建方式

< h1 id"蜂巢架構和構造方法">Hive 架構和構造方法</h1>

[目錄]

< h2 id ,"前言">前言</h2>

本文檔基于配置單元 3.1.2

< h2 id "hive" >hive 的基礎知識</h2>

< h3 id,"基本架構">基本架構</h3>

Hive架構及搭建方式Hive架構及搭建方式

整個 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>

Hive架構及搭建方式Hive架構及搭建方式

Metastore 伺服器和 metatastore DB 與 hive 伺服器一起内聯部署,其中 metastore DB 使用嵌入式 Derby 資料庫啟動

< h4 id - 内聯服務>内聯服務</h4>

Hive架構及搭建方式Hive架構及搭建方式

元存儲伺服器仍與配置單元一起部署。但是元存儲資料庫使用一個單獨的Mysql來承擔

< h4 id"服務和資料庫單獨部署">服務和資料庫單獨部署</h4>

Hive架構及搭建方式Hive架構及搭建方式

除了資料庫獨立部署之外,元存儲服務本身也是獨立部署的

<h3 id="hcatalog">hcatalog</h3>

Hive架構及搭建方式Hive架構及搭建方式

示範

上面的指令首先将檔案複制到 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 格式為

&lt;code&gt;jdbc:hive2://&lt;host&gt;:&lt;port&gt;/&lt;db&gt;; initFile=&lt;file&gt;&lt;/code&gt;

(HiveServer2 的預設端口為 10000)。

對于嵌入式伺服器,URL 格式為

&lt;code&gt;jdbc:hive2:///; initFile=&lt;file&gt;&lt;/code&gt;

(無主機或端口)。

< 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 -&gt; hivemetastore-site .xml -&gt; hiveserver2-site .xml -&gt;'-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>

配置單元的預設輸出路徑為

&lt;code&gt;/tmp/&lt;user.name&gt;/hive.log&lt;/code&gt;

如果我們從蜂巢使用者開始,則路徑為

<code>/tmp/hive/hive.log</code>

/tmp 路徑是 linux 用于存儲每個應用程式的運作時的中間狀态資料,通常在作業系統重新啟動後自動清理。當然,您可以修改實時log4j檔案以指定

&lt;code&gt;hive.log.dir=&lt;other_location&gt;&lt;/code&gt;

路徑

您還可以動态地通過 liveconf 參數在啟動 liveserver2 時指定路徑

<code>bin/hiveserver2 --hiveconf hive.root.logger=INFO,DRFA</code>

< h4 id""hive" >hive 的臨時檔案配置</h4>

hive 運作時還會在本地和 hdfs 中存儲臨時檔案(稱為暫存檔案)。存儲的檔案路徑為 hdfs:

&lt;code&gt;/tmp/hive-&lt;使用者名&gt;&lt;/code&gt;

當地:

&lt;code&gt;/tmp/&lt;使用者名&gt;&lt;/code&gt;

值得注意的是,蜂巢站點.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檔案,以配置元存儲相關資訊

Hive架構及搭建方式Hive架構及搭建方式

初始化元存儲資料庫

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",記錄代碼生活,行業思考,科技評論