Почему мой кувшин не видит конфигурацию HBase из среды? - PullRequest
1 голос
/ 10 марта 2012

Я написал приложение, которое пыталось создать HBaseConfiguration по умолчанию, но когда я упаковываю приложение как jar, оно не будет работать должным образом, потому что оно пытается использовать zookeeper 127.0.0.1, а не то, которое указано в моем /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.

Я проверил журналы и вижу, что он пытается подключиться к 127.0.0.1 для Zookeeper, который отличается от конфигурации Zookeeperпо моему /etc/hbase/conf/hbase-site.xml.Кажется, что jar игнорирует мой путь к классу, хотя я явно установил его в командной строке.

Как я могу заставить JVM соблюдать мой путь к классу при выполнении jar?

1 Ответ

3 голосов
/ 10 марта 2012

При запуске JVM с java -jar результирующая среда не видит файлы в пути к классам из внешней переменной CLASSPATH.Вместо этого он использует classpath из файла MANIFEST .

Если вы не хотите жестко задавать пути к вашим зависимостям в манифесте, вы можете обойти это следующим образом:

  1. добавление JAR, который вы хотите запустить, в путь к классу в дополнение к
  2. без использования ключа -jar и
  3. с указанием класса с main() в качествеаргумент.

Например:

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

Это тот же подход, который используется сценарием оболочки hbase HBase.Взгляните на строку 332 .

Пока ваш JAR не включает hbase-site.xml, этот подход должен привести к загрузке JVM hbase-site.xml из вашего пути к классам.

...