2012-04-17 2 views
3

, поскольку hbase недоступен как пакет osgi-ified, но мне удалось создать пакет с плагином maven felix (hbase 0.92 и соответствующим hadoop-core 1.0.0), и оба пучка запускаются в OSGi :)hbase и osgi - не удается найти hbase-default.xml

также добавлен hbase-default.xml в полученный пакет. в результате OSGi-банку, когда я открыть его, структура выглядит следующим образом:

  • орг/
  • META-INF
  • HBase-default.xml

Это было достигнуто <Include-Resource>@${pkgArtifactId}-${pkgVersion}.jar!/hbase-default.xml</Include-Resource>

Проблема возникает, когда я действительно хочу подключиться к hbase. hbase-default.xml не может быть найден, и поэтому я не могу создать файл конфигурации.

Пакет hbase osgi используется из другого пакета osgi, который должен использоваться для получения соединения hbase и запроса базы данных. Этот osgi-пакет используется приложением RCP.

Мой вопрос в том, где я должен поместить свой hbase-default.xml, чтобы он был найден, когда пуск запущен? или почему он не понимает, что файл существует?

Благодарим за любые советы.

- редактировать

Я нашел декомпилятор, чтобы я мог посмотреть источник, где загрузка конфигурации выполняется (Hadoop-ядро, которое не дает каких-либо источников через Maven), и теперь я вижу, что Нити contextClassLoader (и если не доступен классLoader самого класса Configuration), то мне кажется, что он не может найти ресурс, но он должен, согласно описанию, также проверить родителей (но кто является родительским в среде OSGi?)?

Я тестировал, чтобы получить ресурс из OSGi-пакета, который должен использовать hbase, где я добавил hbase-default.xml в созданный файл jar (см. Выше), и там я получаю ресурс, когда получаю contextClassLoader нить. Когда я немного изучил код, я понял, что нет способа установить загрузчик классов для HBaseConfiguration (хотя можно было бы установить загрузчик классов для «простой» конфигурации hadoop-конфигурации, наследуемой HBaseConfiguration, но процедура создания HBaseConfiguration не позволяет, так как он просто создает новый объект в метод создания().

Я действительно надеюсь, что у вас есть некоторое представление о том, как получить это и работает :)

+0

Вы когда-нибудь решают эту проблему? Я сталкиваюсь с той же проблемой. Я пробовал все, что мог, без толку. – dnuttle

+0

нет, извините. было принято решение переключиться на non-osgi для этой части – divadpoc

ответ

1

Если HBase-default.xml находится в файле .jar, который находится в CLASSPATH, этот файл обычно можно найти в программе java.

Я прочитал список рассылки hbase.

проверить pom.xml: в фазе 'процесс-ресурс', HBase-default.xml на '@@@ @@@ версия' будет заменено фактической строки версии. однако, если для этой конфигурации фаз установлено значение «target», а не «задач», замена не произойдет. Вы можете взглянуть на свой pom.xml, а не направить метку, если это так.

+0

во-первых, спасибо за ваш ответ. к сожалению, я не могу дважды проверить на данный момент, но я уверен, что @@@ VERSION @@@ заменяется версией String. Я исправлю это, если завтра это не так. – divadpoc

2
Thread.currentThread().setContextClassLoader(HBaseConfiguration.class.getClassLoader()); 

Убедитесь, что HBaseConfiguration класс загружен в вашем OSGI bundle.hbase сделает использование нити контекста загрузчика, для того, чтобы загрузить ресурсы (HBase-default.xml и HBase-site.xml). Установка TCCL позволит вам загружать значения по умолчанию и переопределять их позже.

+0

Именно это и поставило проблему для меня. Первая попытка не сработала. Не уверен теперь, почему, если это было потому, что было что-то еще, мешающее, которое я удалил. – dnuttle

0

столкнулись этот вопрос, на самом деле установил ее, поставив Hbase-site.xml в пачке, которую я звонил HBase из, нашел советовать here:

Используя этот компонент в OSGi: Этот компонент является полностью функциональным в среда OSGi, однако, она требует некоторых действий от пользователя. Hoadop использует загрузчик классов контекста потока для загрузки ресурсов. Обычно загрузчик классов контекста потока является загрузчиком класса пакетов, который содержит маршруты. Таким образом, файлы конфигурации по умолчанию должны быть видимыми из загрузчика класса bundle. Типичным способом борьбы с ним является сохранение копии core-default.xml в корневом каталоге. Этот файл можно найти в файле hasoop-common.jar.

+0

спасибо за подсказку. действительно ли у означает _hbase-site.xml_? или _hbase-default.xml_? – divadpoc

+0

hbase-site.xml, хотя теперь у меня есть еще одна проблема с NoSuchElementException при запуске пучков ... – yetanothercoder

+0

проблема с добавлением hbase-site.xml в пакет состоит в том, что в производственной среде я не знаю конфигурацию hbase. m не в этом проекте больше, но я бы использовал JMX для установки необходимых параметров – divadpoc

Смежные вопросы