Phoenix查詢服務(wù)器提供了與Phoenix和HBase交互的另一種方法诞外。很快澜沟,這將允許從JVM以外的環(huán)境進(jìn)行訪問。
概述
Phoenix4.4引入了一個獨立的服務(wù)器浅乔,公開了連接Phoenix的“thin”客戶端倔喂。它是基于Apache Calcite的一個Avatica組件铝条。查詢服務(wù)器由代表客戶端管理Phoenix連接的Java服務(wù)器組成靖苇∫郧客戶端實現(xiàn)目前是一個具有最小依賴性的JDBC驅(qū)動程序配并。目前支持兩種傳輸機(jī)制:JSON和Protocol Buffers(默認(rèn)情況下從Phoenix 4.7開始可用)。還有一個使用thin客戶機(jī)的sqlline腳本狂男。
Avatica仍處于其生命周期的相對早期階段埠忘。隨著Protobuf傳輸?shù)囊肫⒉穑珹vatica正朝著與提供的thin JDBC驅(qū)動程序向后兼容的方向發(fā)展。JSON API沒有這樣的向后兼容性保證莹妒。
重復(fù)一遍名船,不保證與JSON傳輸向后兼容;然而,與Protobuf傳輸?shù)募嫒菪哉诜€(wěn)定下來(盡管還沒有經(jīng)過充分的測試旨怠,不足以被稱為“保證”)渠驼。
安裝
在4.x和5.0發(fā)布的查詢服務(wù)器及其JDBC客戶端是標(biāo)準(zhǔn)Phoenix發(fā)行版的一部分。它們不需要額外的依賴關(guān)系鉴腻。
在5.0版本之后迷扇,查詢服務(wù)器被解壓縮到phoenix-queryserver倉庫中百揭,其版本號被重置為1.0。在撰寫本文時蜓席,還沒有獨立查詢服務(wù)器的發(fā)布版本器一。
使用
服務(wù)端
服務(wù)器組件是通過bin/queryserver.py管理的。其用法如下
bin/queryserver.py [start|stop]
在沒有參數(shù)調(diào)用時厨内,查詢服務(wù)器將在前臺啟動祈秕,日志記錄將定向到控制臺。
第一個參數(shù)是守護(hù)進(jìn)程的可選start或stop命令雏胃。當(dāng)提供了這兩種方法中的任何一種時踢步,它將對守護(hù)進(jìn)程(如果它存在的話)采取適當(dāng)?shù)牟僮鳌?br>
任何后續(xù)的參數(shù)都被傳遞給主類(main class)進(jìn)行解釋。
服務(wù)器被打包在一個獨立的jar中丑掺,phoenix-server-<version>-runnable.jar获印。這個jar和類路徑上的HBASE_CONF_DIR是啟動服務(wù)器所需的全部內(nèi)容。
客戶端
Phoenix提供了兩種與查詢服務(wù)器交互的機(jī)制街州。獨立的phoenix-<version>-thin-client.jar中提供了一個JDBC驅(qū)動程序兼丰。腳本bin/sqlline-thin.py可用于命令行。
JDBC連接字符串的組成如下:
jdbc:phoenix:thin:url=<scheme>://<server-hostname>:<port>[;option=value...]
<scheme>指定與服務(wù)器通信時使用的傳輸協(xié)議(http或https)唆缴。
<server-hostname>提供服務(wù)的主機(jī)的名稱鳍征。
<port>主機(jī)正在監(jiān)聽的端口號。默認(rèn)值是8765面徽,不過這是可配置的(參見下文)艳丛。
Avatica文檔中提供了可以通過JDBC URL字符串提供的選項的完整列表。
腳本bin/sqlline-thin.py的行為與它的同級的腳本bin/sqlline.py相同趟紊。它支持以下使用選項氮双。
bin/sqlline-thin.py [[scheme://]host[:port]] [sql_file]
第一個可選參數(shù)是一個連接URL,如前所述霎匈。如果沒有提供戴差,scheme默認(rèn)為http、主機(jī)到本地主機(jī)铛嘱、端口到8765暖释。
bin/sqlline-thin.py http://localhost:8765
第二個可選參數(shù)是要從中讀取命令的sql文件。
在線API文檔
API本身被記錄在Apache Calcite項目中墨吓,因為它是Avatica API——在Phoenix中沒有定義在線API球匕。
- JSON API
-
Protocol Buffer API
有關(guān)使用Avatica的其他語言構(gòu)建客戶機(jī)的更多信息,請隨時聯(lián)系Apache Calcite開發(fā)郵件列表帖烘。
偽裝
默認(rèn)情況下亮曹,Phoenix查詢服務(wù)器代表最終用戶執(zhí)行查詢。HBase權(quán)限是根據(jù)終端用戶而不是Phoenix查詢服務(wù)器的身份強制執(zhí)行的。在某些情況下乾忱,可能希望以其他用戶的身份執(zhí)行查詢—這稱為“偽裝”讥珍。這可以使可信用戶有權(quán)為其他用戶運行查詢的工作流。
這可以通過設(shè)置配置屬性phoenix.queryserver.withRemoteUserExtractor為true窄瘟≈缘瑁可以修改查詢服務(wù)器的URL以包含所需的請求參數(shù)。例如蹄葱,要讓“bob”以“alice”的身份運行查詢氏义,可以使用以下JDBC URL:
jdbc:phoenix:thin:url=http://localhost:8765?doAs=alice
檢查標(biāo)準(zhǔn)的Hadoop“proxyuser”配置鍵,以驗證是否允許“真正的”遠(yuǎn)程用戶模擬“doAs”用戶图云。有關(guān)如何配置這些規(guī)則的更多信息惯悠,請參閱Hadoop文檔。
警告:HBase 0.98和1.1 Phoenix版本沒有端到端測試覆蓋竣况,因為在那些HBase版本中缺少與測試相關(guān)的代碼克婶。雖然我們預(yù)計在這些Phoenix發(fā)布線上不會出現(xiàn)問題,但我們建議用戶進(jìn)行額外的測試丹泉,以驗證沒有問題情萤。
度量
默認(rèn)情況下,Phoenix查詢服務(wù)器通過JMX公開各種Phoenix全局客戶端指標(biāo)(適用于HBase版本1.3及以上)摹恨。度量標(biāo)準(zhǔn)的列表在這里筋岛。
PQS指標(biāo)在內(nèi)部使用Hadoop指標(biāo)2進(jìn)行指標(biāo)發(fā)布。因此晒哄,它發(fā)布各種與JVM相關(guān)的指標(biāo)睁宰。可以根據(jù)某些標(biāo)記過濾指標(biāo)寝凌,這些標(biāo)記可以通過類路徑上的hbase-site.xml中指定的屬性進(jìn)行配置柒傻。配置部分提供了進(jìn)一步的詳細(xì)信息。
配置
務(wù)器組件分布在許多java包中硫兰,因此有效的日志配置需要更新多個包诅愚。默認(rèn)的服務(wù)器日志配置設(shè)置如下日志級別:
log4j.logger.org.apache.calcite.avatica=INFO
log4j.logger.org.apache.phoenix.queryserver.server=INFO
log4j.logger.org.eclipse.jetty.server=INFO
在撰寫本文時,底層Avatica組件遵循以下配置選項劫映。它們通過hbase-site.xml配置公開。
與服務(wù)器實例化相關(guān)的配置:
屬性 | 描述 |
---|---|
phoenix.queryserver.http.port | 指定服務(wù)器將監(jiān)聽的端口刹前,默認(rèn)是8765 |
phoenix.queryserver.metafactory.class | Avatica的Meta.Factory類去實例化 |
phoenix.queryserver.serialization | 傳輸/序列化格式泳赋,PROTOBUFJSON其中之一。 |
和HTTPS相關(guān)配置(在撰寫本文時喇喉,HTTPS支持僅在未綁定的phoenix-queryserver 1.0.0-SNAPSHOT版本中可用祖今。):
屬性 | 描述 |
---|---|
phoenix.queryserver.tls.enabled | 控制QueryServer是否使用HTTPS傳輸?shù)牟紶栔怠T谑褂肏TTPS時,還必須提供密鑰和trustore文件及其密碼千诬。 |
phoenix.queryserver.tls.keystore | 包含HTTPS服務(wù)的私鑰的密鑰存儲庫文件 |
phoenix.queryserver.tls.keystore.password | 包含HTTPS私有密鑰的密鑰存儲庫文件的密碼 |
phoenix.queryserver.tls.truststore | 包含HTTPS證書的密鑰存儲庫文件 |
phoenix.queryserver.tls.truststore.password | 包含HTTPS證書的密鑰存儲庫文件的密碼 |
與連接到安全集群的服務(wù)器相關(guān)的配置:
屬性 | 描述 |
---|---|
hbase.security.authentication | 當(dāng)設(shè)置為“kerberos”時耍目,服務(wù)器將嘗試在啟動Phoenix連接之前登錄。 |
phoenix.queryserver.keytab.file | 查找keytab文件的密鑰徐绑。 |
phoenix.queryserver.kerberos.principal | 身份驗證時使用的kerberos主體邪驮。如果phoenix.queryserver.kerberos.http。未配置主體傲茄,此指定的主體還將用于驗證SPNEGO連接和連接到HBase毅访。 |
phoenix.queryserver.http.keytab.file | 用于驗證SPNEGO連接的keytab文件。如果phoenix.queryserver.kerberos.http盘榨,則必須指定此配置喻粹。主要配置。.如果此屬性未定義草巡,則將使用phoenix.queryserver.keytab.file守呜。 |
phoenix.queryserver.http.kerberos.principal | 驗證SPNEGO連接時使用的kerberos主體。如果此屬性未定義山憨,則將使用phoenix.queryserver.kerberos.principal弛饭。 |
phoenix.queryserver.kerberos.http.principal | 棄用,使用phoenix.queryserver.http.kerberos.principal代替。 |
phoenix.queryserver.kerberos.allowed.realms | 除了PQS的HTTP主體領(lǐng)域之外萍歉,應(yīng)該允許通過SPNEGO使用PQS進(jìn)行身份驗證的Kerberos領(lǐng)域的逗號分隔列表侣颂。 |
phoenix.queryserver.dns.nameserver | DNS域名 |
phoenix.queryserver.dns.interface | 要查詢DNS的網(wǎng)絡(luò)接口的名稱。 |
配置和服務(wù)端緩存相關(guān)配置:
屬性 | 描述 |
---|---|
avatica.connectioncache.concurrency | 連接緩存并發(fā)級別枪孩。默認(rèn)是10憔晒。 |
avatica.connectioncache.initialcapacity | 連接緩存初始容量。默認(rèn)是100蔑舞。 |
avatica.connectioncache.maxcapacity | 連接緩存的最大容量拒担。接近這一點時,緩存將開始驅(qū)逐最近最少使用的連接對象攻询。默認(rèn)是1000从撼。 |
avatica.connectioncache.expiryduration | 連接緩存過期時間。任何超過此值的連接都將被丟棄钧栖。默認(rèn)為10分鐘低零。 |
avatica.connectioncache.expiryunit | 連接緩存過期單元。應(yīng)用于在avatica.connectioncache.expiryunit中提供的值的單位修改器拯杠。默認(rèn)是分鐘掏婶。 |
與服務(wù)器語句緩存相關(guān)的配置:
屬性 | 描述 |
---|---|
avatica.statementcache.concurrency | 語句緩存并發(fā)級別。默認(rèn)是100潭陪。 |
avatica.statementcache.initialcapacity | 語句緩存初始容量雄妥。默認(rèn)是1000最蕾。 |
avatica.statementcache.maxcapacity | 語句緩存最大容量。接近這一點時老厌,緩存將開始驅(qū)逐最近最少使用的語句對象瘟则。默認(rèn)是10000。 |
avatica.statementcache.expiryduration | 語句緩存過期時間枝秤。任何超過此值的語句都將被丟棄醋拧。默認(rèn)為5分鐘。 |
avatica.statementcache.expiryunit | 語句緩存過期單元宿百。應(yīng)用于在avatica.statementcache.expiryunit中提供的值的單元修改器趁仙。默認(rèn)是分鐘。 |
偽裝相關(guān)配置:
屬性 | 描述 |
---|---|
phoenix.queryserver.withRemoteUserExtractor | 布爾值控制是否應(yīng)該從該用戶發(fā)出的HTTP請求參數(shù)中提取要模擬的遠(yuǎn)程用戶垦页,而不是從HTTP驗證的用戶名(這是缺省值)提取雀费。 |
phoenix.queryserver.remoteUserExtractor.param | 用于提取用戶名以執(zhí)行查詢的HTTP請求參數(shù)的名稱。 |
度量相關(guān)配置:
屬性 | 描述 |
---|---|
phoenix.client.metrics.tag | 用于過濾由PQS在hadoop-metrics2.properties中發(fā)出的Phoenix全局客戶端度量的類別的標(biāo)簽 |
查詢服務(wù)器附加功能
Phoenix查詢服務(wù)器是水平可伸縮的痊焊,這意味著它是一個自然適合的附加功能盏袄,比如服務(wù)發(fā)現(xiàn)和負(fù)載平衡。
負(fù)載均衡
查詢服務(wù)器可以使用現(xiàn)成的HTTP負(fù)載平衡器薄啥,如Apache HTTP服務(wù)器辕羽、nginx或HAProxy。使用這些負(fù)載平衡器的主要要求是實現(xiàn)必須實現(xiàn)“sticky session”(當(dāng)客戶機(jī)與后端服務(wù)器通信時垄惧,該客戶機(jī)將繼續(xù)與后端服務(wù)器通信)刁愿。查詢服務(wù)器還提供了一些使用ZooKeeper實現(xiàn)負(fù)載平衡的綁定功能。
基于ZooKeeper的負(fù)載均衡器功能到逊,自動注冊PQS實例在ZooKeeper铣口,然后允許客戶端查詢可用的服務(wù)器列表。與上面提到的其他實現(xiàn)不同觉壶,此實現(xiàn)要求客戶端使用廣告信息來進(jìn)行路由決策脑题。在這方面,這種基于zookeper的方法更類似于服務(wù)發(fā)現(xiàn)層铜靶,而不是傳統(tǒng)的負(fù)載平衡器叔遂。在ZooKeeper中,這個負(fù)載平衡器實現(xiàn)不支持基于sasl (Kerberos)的acl(請參閱PHOENIX-4085)争剿。
以下是用于配置此負(fù)載均衡器的配置屬性(與基于zookeper的負(fù)載平衡器相關(guān)的配置):
屬性 | 描述 | 默認(rèn) |
---|---|---|
phoenix.queryserver.loadbalancer.enabled | PQS應(yīng)該在ZooKeeper中注冊負(fù)載均衡器 | false |
phoenix.queryserver.base.path | PQS實例應(yīng)該將自己注冊到zk的哪一個目錄中 | /phoenix |
phoenix.queryserver.service.name | 一個惟一的名稱已艰,用于從其他實例標(biāo)識此PQS實例。 | queryserver |
phoenix.queryserver.zookeeper.acl.username | 要為digest zookeeper ACL設(shè)置的名稱秒梅,可選旗芬。 | phoenix |
phoenix.queryserver.zookeeper.acl.password | 位digest zookeeper ACL設(shè)置密碼 | phoenix |