Apache Phoenix(十七)新特性之查詢服務(wù)器

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球匕。

偽裝

默認(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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市捆蜀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖辆它,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件誊薄,死亡現(xiàn)場離奇詭異,居然都是意外死亡锰茉,警方通過查閱死者的電腦和手機(jī)呢蔫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來飒筑,“玉大人片吊,你說我怎么就攤上這事⌒牛” “怎么了俏脊?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肤晓。 經(jīng)常有香客問我爷贫,道長,這世上最難降的妖魔是什么补憾? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任漫萄,我火速辦了婚禮,結(jié)果婚禮上盈匾,老公的妹妹穿的比我還像新娘腾务。我一直安慰自己,他們只是感情好削饵,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布岩瘦。 她就那樣靜靜地躺著,像睡著了一般葵孤。 火紅的嫁衣襯著肌膚如雪担钮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天尤仍,我揣著相機(jī)與錄音箫津,去河邊找鬼。 笑死宰啦,一個胖子當(dāng)著我的面吹牛苏遥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赡模,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼田炭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了漓柑?” 一聲冷哼從身側(cè)響起教硫,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤叨吮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瞬矩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茶鉴,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年景用,在試婚紗的時候發(fā)現(xiàn)自己被綠了涵叮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡伞插,死狀恐怖割粮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情媚污,我是刑警寧澤舀瓢,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站杠步,受9級特大地震影響氢伟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜幽歼,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一朵锣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧甸私,春花似錦诚些、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至弃鸦,卻和暖如春绞吁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唬格。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工家破, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人购岗。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓汰聋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親喊积。 傳聞我的和親對象是個殘疾皇子烹困,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容