美文网首页
Apache Phoenix(十七)新特性之查询服务器

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

作者: 我知他风雨兼程途径日暮不赏 | 来源:发表于2020-03-03 15:00 被阅读0次

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

相关文章

网友评论

      本文标题:Apache Phoenix(十七)新特性之查询服务器

      本文链接:https://www.haomeiwen.com/subject/lkoflhtx.html