HiveServer2配置
翻譯: https://cwiki.apache.org/confluence/display/Hive/Setting+Up+HiveServer2
版本: 2.3.3
HiveServer2
HiveServer2(HS2)是伺服器介面,使遠端客戶端執行對hive的查詢和檢索結果(更詳細的介紹這裡)。目前基於Thrift RPC的實現,是HiveServer的改進版本,並支援多客戶端併發和身份驗證。它旨在為JDBC和ODBC等開放API客戶端提供更好的支援。
- HiveServer2的Thrift介面定義語言(IDL)可在https://github.com/apache/hive/blob/trunk/service/if/TCLIService.thrift上找到。
- Thrift文件可在http://thrift.apache.org/docs/獲得。
本文件介紹如何設定伺服器。HiveServer2客戶端文件中描述瞭如何使用客戶端。
如何配置
hive-site.xml
檔案中的配置屬性
hive.server2.thrift.min.worker.threads - 工作執行緒的最小數量,預設為5。
hive.server2.thrift.max.worker.threads - 最大工作執行緒數,預設值為500。
hive.server2.thrift.port - 偵聽的TCP埠號,預設為10000。
hive.server2.thrift.bind.host - 繫結到的TCP介面。
有關可以為HiveServer2設定的其他屬性,請參閱“配置屬性”文件中的HiveServer2。
可選的環境設定
HIVE_SERVER2_THRIFT_BIND_HOST - 要繫結的可選TCP主機介面。覆蓋配置檔案設定。
HIVE_SERVER2_THRIFT_PORT - 要偵聽的可選TCP埠號,預設為10000.覆蓋配置檔案設定。
以HTTP模式執行
HiveServer2支援通過HTTP傳輸傳送Thrift RPC訊息(Hive 0.13以上,請參閱HIVE-4752)。這對於支援客戶端和伺服器之間的代理中介(例如,出於負載平衡或安全原因)特別有用。目前,您可以在TCP模式或HTTP模式下執行HiveServer2,但不能同時執行這兩種模式。對於相應的JDBC URL,請檢查此連結:HiveServer2客戶端 - JDBC連線URL。使用以下設定啟用和配置HTTP模式:
設定 | 預設 | 描述 |
---|---|---|
hive.server2.transport.mode | binary | 設定為http以啟用HTTP傳輸模式 |
hive.server2.thrift.http.port | 10001 | 要監聽的HTTP埠號 |
hive.server2.thrift.http.max.worker.threads | 500 | 伺服器池中的最大工作執行緒數 |
hive.server2.thrift.http.min.worker.threads | 5 | 伺服器池中的最小工作執行緒數 |
hive.server2.thrift.http.path | cliservice | 服務端點(service endpoint) |
基於Cookie的認證
HIVE-9709和HIVE-9710在HTTP模式下為HiveServer2引入了基於cookie的認證。可以在此處找到與此更改相關的HiveServer2引數(hive.server2.thrift.http.cookie.*)。
可選全域性初始化檔案
全域性init檔案可以放置在配置的 hive.server2.global.init.file.location位置(Hive 0.14以後,參見HIVE-5160,HIVE-7497和HIVE-8138)。這可以是init檔案本身的路徑,也可以是包含名為“.hiverc”的目錄。
init檔案列出了一組將為此HiveServer2例項的使用者執行的命令,例如註冊一組標準的jar和函式。
日誌配置
HiveServer2操作日誌可用於Beeline客戶端(Hive 0.14以上)。這些引數配置記錄:
- hive.server2.logging.operation.enabled
- hive.server2.logging.operation.log.location
- hive.server2.logging.operation.verbose (Hive 0.14到1.1)
- hive.server2.logging.operation.level (Hive 1.2以上)
如何開始
$HIVE_HOME/bin/hiveserver2
OR
$HIVE_HOME/bin/hive --service hiveserver2
Usage資訊
-H
或--help
選項顯示用法訊息,例如:
`$HIVE_HOME/bin/hive --service hiveserver2 -H`
`Starting HiveServer2`
`usage: hiveserver2`
`-H,--help Print help information`
`--hiveconf <property=value> Use value for given property`
認證/安全配置
HiveServer2支援匿名(不啟用認證)和使用SASL,Kerberos(GSSAPI),通過LDAP,可插入自定義認證和可插入認證模組(PAM,支援Hive 0.13以上)。
配置
認證模式:
hive.server2.authentication - 身份驗證模式,預設為NONE。可選項是NONE(使用普通SASL),NOSASL,KERBEROS,LDAP,PAM和CUSTOM。設定啟用KERBEROS模式:
hive.server2.authentication.kerberos.principal - 伺服器的Kerberos主體。
hive.server2.authentication.kerberos.keytab - 伺服器主體的Keytab。
- 設定LDAP模式的以下內容:
hive.server2.authentication.ldap.url - LDAP URL(例如,ldap://hostname.com:389)。
hive.server2.authentication.ldap.baseDN - LDAP基本DN。(對AD可選)
hive.server2.authentication.ldap.Domain - LDAP域。(Hive 0.12.0及更高版本)。
有關 Hive 1.3.0及更高版本中的其他LDAP配置引數,請參閱HiveServer2中的LDAP Atn Provider的使用者和組過濾器支援。
- 設定自定義模式:
hive.server2.custom.authentication.class - 實現org.apache.hive.service.auth.PasswdAuthenticationProvider
介面的定製認證類。
- 對於PAM模式,請參閱下面關於PAM的章節。
Impersonation
預設情況下,HiveServer2以提交查詢的使用者身份執行查詢處理。但是,如果以下引數設定為false,則查詢將以執行hiveserver2
程式的使用者身份執行。
hive.server2.enable.doAs - 模擬連線的使用者,預設為true。
要防止在不安全模式下發生記憶體洩漏,請通過將以下引數設定為true來禁用檔案系統快取(請參閱 HIVE-4501):
fs.hdfs.impl.disable.cache - 禁用HDFS檔案系統快取,預設為false。
fs.file.impl.disable.cache - 禁用本地檔案系統快取,預設為false。
完整性/機密性保護*
Hive JDBC驅動程式與HiveServer2之間進行通訊的完整性保護和機密性保護(不僅僅是預設認證)已啟用(Hive 0.12以上,請參閱HIVE-4911)。您可以使用SASL QOP屬性來配置它。
- 這僅在Kerberos用於HiveServer2的HS2客戶端(JDBC / ODBC應用程式)身份驗證時使用。
-
hive-site.xml
必須將hive.server2.thrift.sasl.qop 設定為有效的QOP值之一('auth','auth-int'或'auth-conf')。
SSL加密
支援SSL加密(Hive 0.13以上,請參閱 HIVE-5351)。要啟用,請在以下位置設定以下配置 hive-site.xml
:
hive.server2.use.SSL - 將其設定為true。
hive.server2.keystore.path - 將其設定為您的金鑰庫路徑。
hive.server2.keystore.password - 將其設定為您的金鑰庫密碼。
注意
當hive.server2.transport.mode是binary並且hive.server2.authentication是KERBEROS時,SSL加密在Hive 2.0之前不起作用。將hive.server2.thrift.sasl.qop設定為auth-conf以啟用加密。詳情請參閱HIVE-14019。
使用自簽名證照設定SSL
使用以下步驟建立並驗證用於HiveServer2的自簽名SSL證照:
使用以下命令建立自簽名證照並將其新增到金鑰庫檔案: keytool -genkey -alias example.com -keyalg RSA -keystore keystore.jks -keysize 2048,確保自簽名證照中使用的名稱與HiveServer2將執行的主機名相匹配。
列出金鑰庫條目以驗證是否新增了證照。請注意,金鑰庫可以包含多個此類證照:keytool -list -keystore keystore.jks
將此證照從keystore.jks匯出到證照檔案:keytool -export -alias example.com -file example.com.crt -keystore keystore.jks
將此證照新增到客戶端的信任庫以建立信任關係:keytool -import -trustcacerts -alias example.com -file example.com.crt -keystore truststore.jks
驗證truststore.jks中是否存在證照:keytool -list -keystore truststore.jks
然後啟動HiveServer2,並嘗試使用以下命令連線直線: jdbc:hive2://<host>:<port>/<database>;ssl=true;sslTrustStore=<path-to-truststore>;trustStorePassword=<truststore-password>
選擇性地禁用SSL協議版本
要禁用特定的SSL協議版本,請使用以下步驟:
- 執行openssl ciphers -v(或者不使用openssl的相應命令)檢視所有協議版本。
- 除了1之外,可能還需要執行額外的步驟來檢視HiveServer2日誌,以檢視執行HiveServer2的節點支援的所有協議。為此,請在HiveServer2日誌檔案中搜尋“啟用SSL伺服器套接字的協議:”。
- 將所有需要禁用的SSL協議新增到hive.ssl.protocol.blacklist。確保hiveserver2-site.xml中的屬性不覆蓋hive-site.xml中的屬性。
可插入認證模組(PAM)
警告
如果使用者的密碼已過期,用於提供PAM身份驗證模式的JPAM庫可能會導致HiveServer2關閉。發生這種情況是因為JPAM呼叫原生程式碼的segfault / core轉儲。在其他情況下,某些使用者也在登入過程中報告了崩潰。建議使用LDAP或KERBEROS。
PAM提供了支援(Hive 0.13,參見HIVE-6466)。配置PAM:
- 下載 相關體系結構的JPAM 本機庫。
- 解壓並將libjpam.so複製到系統上的目錄(<libjmap-directory>)。
- 將目錄新增到LD_LIBRARY_PATH環境變數中,如下所示:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<libjmap-directory>
- 對於某些PAM模組,您必須確保執行HiveServer2程式的使用者可以讀取您的檔案
/etc/shadow
和/etc/login.defs
檔案。
最後,在以下位置設定以下配置 hive-site.xml
:
hive.server2.authentication - 將其設定為PAM。
hive.server2.authentication.pam.services - 將其設定為將使用的以逗號分隔的PAM服務列表。請注意,名稱與PAM服務同名的檔案必須存在於/etc/pam.d中。
設定HiveServer2作業憑證提供程式
啟動Hive 2.2.0(參見 HIVE-14822)Hiveserver2支援MR和Spark作業的作業特定hadoop憑證提供程式。當通過Hadoop Credential Provider使用加密密碼時,HiveServer2需要將足夠的資訊轉發到作業配置,以便跨群集啟動的作業可以讀取這些祕密。此外,HiveServer2可能具有作業不應該具有的祕密,例如Hive Metastore資料庫密碼。如果你的工作需要訪問這些祕密,比如S3憑證,那麼你可以使用下面的配置步驟來配置它們:
- 在HDFS中的安全位置使用Hadoop Credential Provider API建立特定於作業的金鑰庫。此金鑰庫應包含作業所需配置的加密金鑰/值對。例如:對於S3憑證,金鑰庫應該包含fs.s3a.secret.key和fs.s3a.access.key及其相應的值。
- 解密金鑰庫的密碼應設定為名為HIVE_JOB_CREDSTORE_PASSWORD的HiveServer2環境變數
- 將hive.server2.job.credential.provider.path設定 為URL,指向上面(1)中建立的金鑰儲存的型別和位置。如果沒有作業特定的金鑰庫,則HiveServer2將使用core-site.xml中使用hadoop.credential.provider.path的一個集(如果可用)。
- 如果未提供步驟2中設定的密碼使用環境變數,則HiveServer2將使用HADOOP_CREDSTORE_PASSWORD環境變數(如果可用)。
- HiveServer2現在將修改使用MR或Spark執行引擎啟動的作業的作業配置,以包含作業憑證提供程式,以便作業任務可以使用祕密訪問加密的金鑰庫。
hive.server2.job.credential.provider.path - 將其設定為您的作業特定的hadoop憑據提供程式。例如:jceks://hdfs/user/hive/secret/jobcreds.jceks。
HIVE_JOB_CREDSTORE_PASSWORD - 將此HiveServer2環境變數設定為上面設定的特定於作業的Hadoop憑據提供程式密碼。
臨時目錄管理
HiveServer2允許配置Hive用來儲存臨時輸出和計劃的暫存目錄的各個方面。
配置屬性
以下是可以配置與臨時目錄相關的屬性:
ClearDanglingScratchDir工具
可以執行Cleardanglingscratchdir工具來清理Hive不正常關閉時可能遺留的任何懸掛臨時目錄,例如當虛擬機器重新啟動並且Hive無法執行關閉掛鉤時。
hive --service cleardanglingscratchdir [-r] [-v] [-s scratchdir]
-r dry-run mode, which produces a list on console
-v verbose mode, which prints extra debugging information
-s if you are using non-standard scratch directory
該工具測試是否正在使用暫存目錄,如果沒有,將刪除它。這依賴於HDFS寫鎖定來檢測暫存目錄是否正在使用中。HDFS客戶端開啟一個HDFS檔案($scratchdir/inuse.lck
)進行寫入,並且僅在會話關閉時關閉它。cleardanglingscratchdir將嘗試開啟$scratchdir/inuse.lck
以測試相應的HiveCli / HiveServer2是否仍在執行。如果鎖正在使用中,則暫存目錄不會被清除。如果鎖定可用,則暫存目錄將被清除。請注意,NameNode最多可能需要10分鐘才能從死亡的HiveCli / HiveServer2中收回臨時檔案鎖定的契約,屆時cleardanglingscratchdir將能夠在再次執行時將其刪除。
HiveServer2的Web UI
版
在Hive 2.0.0中引入。參見HIVE-12338及其子任務。
HiveServer2的Web使用者介面(UI)提供配置,日誌記錄,指標和活動會話資訊。預設情況下,Web UI在埠10002(127.0.0.1:10002)可用。
- 可以在hive-site.xml中自定義 Web UI的配置屬性,包括hive.server2.webui.host,hive.server2.webui.port,hive.server2.webui.max.threads和其他。
- 配置單元度量標準可以通過使用“度量轉儲”選項卡進行檢視。
- 日誌 可以通過使用“本地日誌”選項卡中檢視。
該介面目前正在開發 HIVE-12338。
Python客戶端驅動
HiveServer2的Python客戶端驅動程式可在 https://github.com/BradRuderman/pyhs2上找到 (謝謝Brad)。它包括所有必需的軟體包,如SASL和Thrift包裝。
該驅動程式已經通過了Python 2.6及更新版本的認證。
要使用pyhs2驅動程式:pip install pyhs2
`import` `pyhs2`
`with [pyhs2.connect(host](https://cwiki.apache.org/confluence/display/Hive/pyhs2.connect(host)``=``'localhost'``,`
`port``=``10000``,`
`authMechanism``=``"PLAIN"``,`
`user``=``'root'``,`
`password``=``'test'``,`
`database``=``'default'``) as conn:`
`with [conn.cursor()](https://cwiki.apache.org/confluence/display/Hive/conn.cursor()) as cur:`
`#Show databases`
`print` `[cur.getDatabases()](https://cwiki.apache.org/confluence/display/Hive/cur.getDatabases())`
`#Execute query`
`[cur.execute(](https://cwiki.apache.org/confluence/display/Hive/cur.execute()``"select * from table"``)`
`#Return column info from query`
`print` `[cur.getSchema()](https://cwiki.apache.org/confluence/display/Hive/cur.getSchema())`
`#Fetch table results`
`for` `i ``in` `[cur.fetch():](https://cwiki.apache.org/confluence/display/Hive/cur.fetch():)`
`print` `i`
您可以在user@hive.apache.org郵件列表上討論此驅動程式 。
Ruby客戶端驅動
在https://github.com/forward3d/rbhive上的github上提供了一個Ruby客戶端驅動程式 。
相關文章
- Using HiveServer2 - AuthenticationHiveServer
- HiveServer2 檔案描述符洩漏HiveServer
- 其它語言通過HiveServer2訪問HiveHiveServer
- Hive原始碼分析(1)——HiveServer2啟動過程Hive原始碼Server
- Hadoop2.7實戰v1.0之Hive-2.0.0的Hiveserver2服務和beeline遠端除錯HadoopHiveServer除錯
- nvim 配置,neovim配置
- Git配置配置檔案Git
- webpack(11)配置檔案分離為開發配置、生成配置和基礎配置Web
- mongodb配置檔案常用配置項MongoDB
- apache 配置檔案的配置(轉)Apache
- cmake配置VS工程配置使用dll
- Profile配置和載入配置檔案
- 【Python】配置檔案配置路徑Python
- webpack配置Plugin/配置檔案分離WebPlugin
- nginx配置+uwsgi+負載均衡配置Nginx負載
- mysql--my.ini配置檔案配置MySql
- 網路配置2:靜態路由配置路由
- 配置HP-UNIX下配置IP地址
- python讀配置檔案配置資訊Python
- MyBatis 配置MyBatis
- 配置RedisRedis
- webpack配置Web
- Ubuntu 配置Ubuntu
- mysql配置MySql
- 配置nginxNginx
- rocketmq配置MQ
- RIP配置
- babelrc配置Babel
- RabbitMQ配置MQ
- Nginx 配置Nginx
- iptables配置
- ftp 配置FTP
- larvelnginx配置Nginx
- 配置MySQLclusterMySql
- nginxphp配置NginxPHP
- fastcgi配置AST
- 配置vncserverVNCServer
- sendmail配置AI