2015-03-04 1 views
2

Я использую интерфейс интерфейса таблицы (https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Table.html) и используя интерфейс подключения (https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Connection.html), чтобы получить объект Table. Но как упоминание в ссылке Connection connection, «Создание соединения - это тяжелая операция. Реализации подключений являются потокобезопасными, так что клиент может создать соединение один раз и поделиться им с разными потоками.».Клиентское соединение с удаленным сервером Hbase в случае сбоя сети в течение некоторого времени

Так что, если я создаю единый объект соединения для всех потоков (создавая этот объект в статическом блоке), то что произойдет, если в течение некоторого времени будет некоторая сетевая проблема и клиент потерял соединение с кластером hbase. Будет ли объект соединения по-прежнему работать после этого?

+0

Привет, интересно, вы поняли это? Я тестировал один поток, и соединение, похоже, работает, если оно потеряно и снова вернулось. Если бы вы сделали другие эксперименты, я бы с удовольствием узнал! Благодаря! – cindyxiaoxiaoli

ответ

1

Если соединение потеряно и возвращается заново до определенного периода времени (TCP Timeout), все будет работать нормально.

Как есть TCP-соединение, установленное между клиентом и hbase. Также, как упоминалось в документации, «Индивидуальные подключения к серверам, мета-кеш, подключение к zookeeper и т. Д. Являются общим для экземпляров таблицы и администратора, полученных из этого соединения», если мы отправили данные, когда сеть была недоступна, данные будут присутствовать в буфере, и клиент попытается выполнить повторные передачи этого сегмента, и hbase получит его, когда сеть вернется.

Но если сеть не станет доступна до определенного периода времени (TCP-тайм-аут), тогда TCP, наконец, отпустит и закроет сокет. Для этой ситуации вам придется поместить некоторый блок catch для его обработки или необходимо перезапустить банку ,

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