Phoenix程序如何加载hbase-site.xml

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Phoenix程序如何加载hbase-site.xml相关的知识,希望对你有一定的参考价值。

参考技术A 使用java或者scala写一个通过JDBC方式连接Phoenix进行查询的程序时,需要调整一些 Phoenix的参数 ,例如线程的数量 phoenix.query.threadPoolSize ,但是按照官方文档只是说把参数加到hbase-site.xml中,但是并没有说hbase-site.xml应该放到什么位置,所以导致无法读到hbase-site.xml里面的配置。

首先说一下结论,Phoenix程序是在 user.dir 目录下去找hbase-site.xml的。所以有两种解决方案:

这样程序中就可以加载到hbase-site.xml配置的参数了。

注:本文使用的是HDP发布的phoenix-4.7.0.2.5.0.0-1245版本

如何修改 Phoenix 参数

1.关于 Phoenix 相关参数及默认值请见

Phoenix各个参数的含义及默认值

2.如何修改 Phoenix 并生效

2.1 在 hbase-site.xml 配置文件中添加或者修改 Phoenix 相关参数

#注意修改正确路径下的hbase-site.xml文件(正确路径在哪里,后面会提到)

2.2 重启 QueryServer 服务,使修改生效

2.2.1 查看QueryServer 服务id

jps 命令查看 QueryServer 服务id

2.2.2 杀QueryServer服务

kill -9 服务id 杀掉服务

2.2.3 重启 QueryServer 服务

cd /opt/phoenix/bin/
./queryserver.py start

3.测试环境修改 Phoenix 演示

3.1 修改配置文件

 #在配置文件中添加 phoenix.query.queueSize 参数,并保存

3.2 重启 QueryServer 

 通过 cd /opt/phoenix/bin/ & ./queryserver.py start 命令启动 QueryServer ,至此参数修改生效

4.怎么确定修改哪个路径下的hbase-site.xml 配置文件

说实话刚开始在百度中查到的都是说修改phoenix bin 目录下面的配置文件,试了并没有用。我们去phoenix 的启动文件中找它的配置文件信息,我们可以看到如下相关信息:

......
......省略多行
import phoenix_utils

phoenix_utils.setPath()

......
......省略多行
# HBase configuration folder path (where hbase-site.xml reside) for
# HBase/Phoenix client side property override
hbase_config_path = phoenix_utils.hbase_conf_dir
hadoop_config_path = phoenix_utils.hadoop_conf
hadoop_classpath = phoenix_utils.hadoop_classpath

#我们看到 phoenix 启动脚本中通过 phoenix_utils 这个模块来确定 hbase-site.xml 配置文件的位置,那我们看看这个模块就能知道如何生成配置文件的路径了

在 queryserver.py 同目录下有 phoenix_utils.py 模块,该模块中我们可以看到有关配置文件的如下信息:

def setPath():
    PHOENIX_CLIENT_JAR_PATTERN = "phoenix-*-client.jar"
    PHOENIX_THIN_CLIENT_JAR_PATTERN = "phoenix-*-thin-client.jar"
    PHOENIX_QUERYSERVER_JAR_PATTERN = "phoenix-*-queryserver.jar"
    PHOENIX_TRACESERVER_JAR_PATTERN = "phoenix-tracing-webapp-*-runnable.jar"
    PHOENIX_TESTS_JAR_PATTERN = "phoenix-core-*-tests*.jar"
    PHOENIX_PHERF_JAR_PATTERN = "phoenix-pherf-*-minimal*.jar"

    # Backward support old env variable PHOENIX_LIB_DIR replaced by PHOENIX_CLASS_PATH
    global phoenix_class_path
    phoenix_class_path = os.getenv('PHOENIX_LIB_DIR','')
    if phoenix_class_path == "":
        phoenix_class_path = os.getenv('PHOENIX_CLASS_PATH','')

    global hbase_conf_dir
    # if HBASE_CONF_DIR set explicitly, use that
    hbase_conf_dir = os.getenv('HBASE_CONF_DIR', os.getenv('HBASE_CONF_PATH'))
    #如果定义了 HBASE_CONF_DIR 环境变量,那么配置文件路径由该环境变量决定(我的测试环境中没有配置该变量)
    if not hbase_conf_dir:
    #如果没有配置 HBASE_CONF_DIR 环境变量,进入下面的 if 判断
        # else fall back to HBASE_HOME
        if os.getenv('HBASE_HOME'):
        #如果配置了HBASE_HOME环境变量,那么配置文件路径由 HBASE_HOME 环境变量决定
            hbase_conf_dir = os.path.join(os.getenv('HBASE_HOME'), "conf")
        elif os.name == 'posix':
        #如果没有配置HBASE_HOME环境变量,系统为 linux 操作系统,那么配置文件路径为/etc/hbase/conf(我的测试环境就是这个情况)
            # default to the bigtop configuration dir
            hbase_conf_dir = '/etc/hbase/conf'
        else:
        #如果以上情况都不满足,则配置文件路径为 当前路径(即启动文件所在路径也就是phoenix的bin目录下)
            # Try to provide something valid
            hbase_conf_dir = '.'
    global hbase_conf_path # keep conf_path around for backward compatibility
    hbase_conf_path = hbase_conf_dir

    global current_dir
    current_dir = os.path.dirname(os.path.abspath(__file__))

 #通过 phoenix_utils.py 模块,我们可以清晰的知道我们当前环境下应该使用哪个路径下的配置文件,所以就修改那个路径下的配置文件,然后重启 QueryServer 就ok 了

以上是关于Phoenix程序如何加载hbase-site.xml的主要内容,如果未能解决你的问题,请参考以下文章

phoenixrc5.5报错

如何修改 Phoenix 参数

使 elixir 应用程序在源代码更改时重新编译和重新加载

如何修改 Phoenix 参数

如何修改 Phoenix 参数

运行带有 exrm 崩溃的 Phoenix 应用程序版本