gpt4 book ai didi

scala - 为什么我的jar 看不到环境中的HBase 配置?

转载 作者:可可西里 更新时间:2023-11-01 15:07:22 27 4
gpt4 key购买 nike

我编写了一个试图创建默认 HBaseConfiguration 的应用程序,但是当我将应用程序打包为 jar 时,它无法正常工作,因为它正在尝试使用 127.0.0.1 的 zookeeper 而不是我在 /etc/hbase/conf/hbase-site.xml。该应用程序可以简化为如下所示:

 object TestUtil extends App {
val hbaseTable = new HTable(HBaseConfiguration.create, "tableName")
println(hbaseTable)
}

当我使用以下命令运行它时,它工作正常:

 CLASSPATH=`hbase classpath` java fully.qualified.name.TestUtil

如果我将其打包为 jar 并使用 CLASSPATH='hbase classpath' java -jar TestUtil.jar 调用它,则会出现以下错误:

 org.apache.hadoop.hbase.ZooKeeperConnectionException: HBase is able to connect to ZooKeeper but the connection closes immediately.

我检查了日志,可以看到它正在尝试为 Zookeeper 连接到 127.0.0.1,这与我的 /etc/hbase/conf/hbase-site.xml< 中的 zookeeper 配置不同。 jar 似乎忽略了我的类路径,即使我在命令行上明确设置了它。

如何让 JVM 在执行 jar 时遵循我的类路径?

最佳答案

当使用 java -jar 启动 JVM 时,生成的环境看不到来自外部 CLASSPATH 变量的类路径中的文件。它改为使用 classpath from the MANIFEST file .

假设您不想在 list 中对依赖项的路径进行硬编码,您可以通过以下方式解决此问题:

  1. 将要运行的 JAR 添加到类路径中,
  2. 不使用 -jar 开关,并且
  3. main() 作为参数指定类。

例如:

 CLASSPATH=/path/to/my.jar:`hbase classpath` java fully.qualified.MainClass

这与 HBase 的 hbase shell 脚本使用的方法相同。看看line 332 .

只要您的 JAR 不包含 hbase-site.xml,这种方法就会导致 JVM 从您的类路径加载 hbase-site.xml .

关于scala - 为什么我的jar 看不到环境中的HBase 配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9640327/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com