HBase Zookeeper Закрыть соединение - PullRequest
4 голосов
/ 10 марта 2011

Я пытаюсь создать простой веб-сервис, который работает на Apache Tomcat и имеет только одну операцию, которая выполняет сканирование таблицы HBase.Вот как я могу получить конфигурацию:

Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", "hdp-node");

Htable table = new HTable(config, "myTable");       

... scanner ...

scanner.close()
table.close()

Проблема в том, что соединение с Zookeeper остается открытым, и когда я достигаю определенного количества переходов, Zookeeper начинает сбрасывать.

Как я могу закрыть свое Zookeeper соединение после того, как я сделаю сканирование?

Спасибо

Ответы [ 3 ]

3 голосов
/ 04 мая 2011

Соединения с HBase и ZooKeeper управляются для вас статическим HConnectionManager объектом. Этот объект представляет собой карту объектов конфигурации (в действительности HBaseConfiguration ) и объектов HConnection .

HConnectionManager позволяет очищать соединения для экземпляра конфигурации, вызывая его метод deleteConnection .

Итак, если вы хотите принудительно закрыть свои соединения, вы можете просто добавить следующую строку в конец вашего сегмента кода:

//free resources and close connections
HConnectionManager.deleteConnection(config,true);

Однако ...

HBase API предназначен для мультиплексирования клиентских транзакций по одному HConnection, и если несколько экземпляров HTable совместно используют один и тот же объект конфигурации, они будут использовать один и тот же HConnection. Это сохраняет все настройки соединения и снижает накладные расходы для повторных транзакций.

Что это значит?

Это означает, что, если возможно, вы действительно хотите ограничить количество экземпляров HBaseConfiguration для процесса, даже если они совместно используются несколькими потоками. Однако имейте в виду, что экземпляры HBaseConfiguration не являются потокобезопасными , поэтому их не следует изменять несколькими потоками.

1 голос
/ 12 июля 2011

У меня была похожая проблема. Я решил, что нужно сделать объект Configuration статичным. Таким образом, должно быть только одно соединение (на jvm).

0 голосов
/ 15 марта 2011

Какую версию ZooKeeper вы используете?Вполне возможно, что вы решаете выпуск 846 .

Попробуйте обновить ZooKeeper до версии 3.3.2 или новее.

...