Apache Phoenix(十七)新特性之查询服务器

Phoenix查询服务器提供了与Phoenix和HBase交互的另一种方法。很快,这将允许从JVM以外的环境进行访问。

概述

Phoenix4.4引入了一个独立的服务器,公开了连接Phoenix的“thin”客户端。它是基于Apache Calcite的一个Avatica组件。查询服务器由代表客户端管理Phoenix连接的Java服务器组成。客户端实现目前是一个具有最小依赖性的JDBC驱动程序。目前支持两种传输机制:JSON和Protocol Buffers(默认情况下从Phoenix 4.7开始可用)。还有一个使用thin客户机的sqlline脚本。
Avatica仍处于其生命周期的相对早期阶段。随着Protobuf传输的引入,Avatica正朝着与提供的thin JDBC驱动程序向后兼容的方向发展。JSON API没有这样的向后兼容性保证。
重复一遍,不保证与JSON传输向后兼容;然而,与Protobuf传输的兼容性正在稳定下来(尽管还没有经过充分的测试,不足以被称为“保证”)。

安装

在4.x和5.0发布的查询服务器及其JDBC客户端是标准Phoenix发行版的一部分。它们不需要额外的依赖关系。
在5.0版本之后,查询服务器被解压缩到phoenix-queryserver仓库中,其版本号被重置为1.0。在撰写本文时,还没有独立查询服务器的发布版本。

使用

服务端

服务器组件是通过bin/queryserver.py管理的。其用法如下

bin/queryserver.py [start|stop]

在没有参数调用时,查询服务器将在前台启动,日志记录将定向到控制台。
第一个参数是守护进程的可选start或stop命令。当提供了这两种方法中的任何一种时,它将对守护进程(如果它存在的话)采取适当的操作。
任何后续的参数都被传递给主类(main class)进行解释。
服务器被打包在一个独立的jar中,phoenix-server-<version>-runnable.jar。这个jar和类路径上的HBASE_CONF_DIR是启动服务器所需的全部内容。

客户端

Phoenix提供了两种与查询服务器交互的机制。独立的phoenix-<version>-thin-client.jar中提供了一个JDBC驱动程序。脚本bin/sqlline-thin.py可用于命令行。
JDBC连接字符串的组成如下:

jdbc:phoenix:thin:url=<scheme>://<server-hostname>:<port>[;option=value...]

<scheme>指定与服务器通信时使用的传输协议(http或https)。
<server-hostname>提供服务的主机的名称。
<port>主机正在监听的端口号。默认值是8765,不过这是可配置的(参见下文)。
Avatica文档中提供了可以通过JDBC URL字符串提供的选项的完整列表。
脚本bin/sqlline-thin.py的行为与它的同级的脚本bin/sqlline.py相同。它支持以下使用选项。

bin/sqlline-thin.py [[scheme://]host[:port]] [sql_file]

第一个可选参数是一个连接URL,如前所述。如果没有提供,scheme默认为http、主机到本地主机、端口到8765。

bin/sqlline-thin.py http://localhost:8765

第二个可选参数是要从中读取命令的sql文件。

在线API文档

API本身被记录在Apache Calcite项目中,因为它是Avatica API——在Phoenix中没有定义在线API。

伪装

默认情况下,Phoenix查询服务器代表最终用户执行查询。HBase权限是根据终端用户而不是Phoenix查询服务器的身份强制执行的。在某些情况下,可能希望以其他用户的身份执行查询—这称为“伪装”。这可以使可信用户有权为其他用户运行查询的工作流。
这可以通过设置配置属性phoenix.queryserver.withRemoteUserExtractor为true。可以修改查询服务器的URL以包含所需的请求参数。例如,要让“bob”以“alice”的身份运行查询,可以使用以下JDBC URL:

jdbc:phoenix:thin:url=http://localhost:8765?doAs=alice

检查标准的Hadoop“proxyuser”配置键,以验证是否允许“真正的”远程用户模拟“doAs”用户。有关如何配置这些规则的更多信息,请参阅Hadoop文档
警告:HBase 0.98和1.1 Phoenix版本没有端到端测试覆盖,因为在那些HBase版本中缺少与测试相关的代码。虽然我们预计在这些Phoenix发布线上不会出现问题,但我们建议用户进行额外的测试,以验证没有问题。

度量

默认情况下,Phoenix查询服务器通过JMX公开各种Phoenix全局客户端指标(适用于HBase版本1.3及以上)。度量标准的列表在这里
PQS指标在内部使用Hadoop指标2进行指标发布。因此,它发布各种与JVM相关的指标。可以根据某些标记过滤指标,这些标记可以通过类路径上的hbase-site.xml中指定的属性进行配置。配置部分提供了进一步的详细信息。

配置

务器组件分布在许多java包中,因此有效的日志配置需要更新多个包。默认的服务器日志配置设置如下日志级别:

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配置公开。
与服务器实例化相关的配置:

属性 描述
phoenix.queryserver.http.port 指定服务器将监听的端口,默认是8765
phoenix.queryserver.metafactory.class Avatica的Meta.Factory类去实例化
phoenix.queryserver.serialization 传输/序列化格式,PROTOBUFJSON其中之一。

和HTTPS相关配置(在撰写本文时,HTTPS支持仅在未绑定的phoenix-queryserver 1.0.0-SNAPSHOT版本中可用。):

属性 描述
phoenix.queryserver.tls.enabled 控制QueryServer是否使用HTTPS传输的布尔值。在使用HTTPS时,还必须提供密钥和trustore文件及其密码。
phoenix.queryserver.tls.keystore 包含HTTPS服务的私钥的密钥存储库文件
phoenix.queryserver.tls.keystore.password 包含HTTPS私有密钥的密钥存储库文件的密码
phoenix.queryserver.tls.truststore 包含HTTPS证书的密钥存储库文件
phoenix.queryserver.tls.truststore.password 包含HTTPS证书的密钥存储库文件的密码

与连接到安全集群的服务器相关的配置:

属性 描述
hbase.security.authentication 当设置为“kerberos”时,服务器将尝试在启动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主体领域之外,应该允许通过SPNEGO使用PQS进行身份验证的Kerberos领域的逗号分隔列表。
phoenix.queryserver.dns.nameserver DNS域名
phoenix.queryserver.dns.interface 要查询DNS的网络接口的名称。

配置和服务端缓存相关配置:

属性 描述
avatica.connectioncache.concurrency 连接缓存并发级别。默认是10。
avatica.connectioncache.initialcapacity 连接缓存初始容量。默认是100。
avatica.connectioncache.maxcapacity 连接缓存的最大容量。接近这一点时,缓存将开始驱逐最近最少使用的连接对象。默认是1000。
avatica.connectioncache.expiryduration 连接缓存过期时间。任何超过此值的连接都将被丢弃。默认为10分钟。
avatica.connectioncache.expiryunit 连接缓存过期单元。应用于在avatica.connectioncache.expiryunit中提供的值的单位修改器。默认是分钟。

与服务器语句缓存相关的配置:

属性 描述
avatica.statementcache.concurrency 语句缓存并发级别。默认是100。
avatica.statementcache.initialcapacity 语句缓存初始容量。默认是1000。
avatica.statementcache.maxcapacity 语句缓存最大容量。接近这一点时,缓存将开始驱逐最近最少使用的语句对象。默认是10000。
avatica.statementcache.expiryduration 语句缓存过期时间。任何超过此值的语句都将被丢弃。默认为5分钟。
avatica.statementcache.expiryunit 语句缓存过期单元。应用于在avatica.statementcache.expiryunit中提供的值的单元修改器。默认是分钟。

伪装相关配置:

属性 描述
phoenix.queryserver.withRemoteUserExtractor 布尔值控制是否应该从该用户发出的HTTP请求参数中提取要模拟的远程用户,而不是从HTTP验证的用户名(这是缺省值)提取。
phoenix.queryserver.remoteUserExtractor.param 用于提取用户名以执行查询的HTTP请求参数的名称。

度量相关配置:

属性 描述
phoenix.client.metrics.tag 用于过滤由PQS在hadoop-metrics2.properties中发出的Phoenix全局客户端度量的类别的标签

查询服务器附加功能

Phoenix查询服务器是水平可伸缩的,这意味着它是一个自然适合的附加功能,比如服务发现和负载平衡。

负载均衡

查询服务器可以使用现成的HTTP负载平衡器,如Apache HTTP服务器、nginx或HAProxy。使用这些负载平衡器的主要要求是实现必须实现“sticky session”(当客户机与后端服务器通信时,该客户机将继续与后端服务器通信)。查询服务器还提供了一些使用ZooKeeper实现负载平衡的绑定功能。
基于ZooKeeper的负载均衡器功能,自动注册PQS实例在ZooKeeper,然后允许客户端查询可用的服务器列表。与上面提到的其他实现不同,此实现要求客户端使用广告信息来进行路由决策。在这方面,这种基于zookeper的方法更类似于服务发现层,而不是传统的负载平衡器。在ZooKeeper中,这个负载平衡器实现不支持基于sasl (Kerberos)的acl(请参阅PHOENIX-4085)。
以下是用于配置此负载均衡器的配置属性(与基于zookeper的负载平衡器相关的配置):

属性 描述 默认
phoenix.queryserver.loadbalancer.enabled PQS应该在ZooKeeper中注册负载均衡器 false
phoenix.queryserver.base.path PQS实例应该将自己注册到zk的哪一个目录中 /phoenix
phoenix.queryserver.service.name 一个惟一的名称,用于从其他实例标识此PQS实例。 queryserver
phoenix.queryserver.zookeeper.acl.username 要为digest zookeeper ACL设置的名称,可选。 phoenix
phoenix.queryserver.zookeeper.acl.password 位digest zookeeper ACL设置密码 phoenix
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容