Драйвер JDBC Phoenix для HBASE повторяет 36 попыток и выдает исключение

У меня есть автономный HBase, установленный на сервере (удаленном). Я написал Java-клиент, который взаимодействует с помощью Phoenix, и увидел, что он делает 36 попыток и, следовательно, выдает исключение.

HBase-Version : 1.1.5
Phoenix-core: 4.8.0-HBase-1.1

Строка подключения:

Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
Connection connection = DriverManager.getConnection("jdbc:phoenix:192.168.1.xxx:2181");

Я что-то упустил, потому что он вообще не подключается.

Исключение:

Exception in thread "main" java.sql.SQLException: org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=36, exceptions:
Mon Oct 17 11:50:18 IST 2016, null, java.net.SocketTimeoutException: callTimeout=60000, callDuration=80992: row 'SYSTEM:CATALOG,,' on table 'hbase:meta' at region=hbase:meta,,1.1588230740, hostname=HOSTNAME,16201,1476683863488, seqNum=0

Кто-нибудь может мне помочь..!


person peaceUser    schedule 17.10.2016    source источник
comment
Пожалуйста, взгляните на это, может помочь... Возможно проблема в региональном сервере!   -  person N00b Pr0grammer    schedule 17.10.2016
comment
Имеет ли он по умолчанию доступ к HadoopSystems? Есть идеи по этому поводу?   -  person peaceUser    schedule 17.10.2016
comment
Я не уверен в этом @peaceUser   -  person N00b Pr0grammer    schedule 18.10.2016


Ответы (2)


По моему опыту, это обычно происходит, когда вы получаете тайм-ауты на сканерах. И в вашем случае это похоже на правду, потому что в вашем сообщении об ошибке говорится:

callTimeout=60000, callDuration=80992

это означает, что вы продолжали 81 секунду, когда ваш тайм-аут был минутой. При запросе HBase вы хотите убедиться, что используете rowkey или, в более новых версиях phoenix, временную метку. Любой другой запрос HBase будет смехотворно неэффективным. Вы можете попробовать несколько вещей:

  1. Попробуйте установить время ожидания HBase на смехотворно большое число, например 4 часа.
  2. Снова измените свой запрос, чтобы использовать существующий ключ строки. В одной таблице, которая у нас есть, первый символ строки равен 0-9, поэтому мы запустим следующее:

    select * from TABLE WHERE ROWKEY like '0%' AND [other_conditions]
    select * from TABLE WHERE ROWKEY like '1%' AND [other_conditions]
    etc...
    

    А затем объедините результаты или, если мы считаем, просто умножьте на 10 b/c, что обычно достаточно для наших целей.

  3. Наконец, вам, возможно, придется написать лучший ключ строки для оптимизации ваших запросов phoenix. Это более сложная тема, но она применима ко всем запросам HBase. HBase хорош в одном: он запрашивает свой единственный мощный индекс: rowkey. Использование phoenix не решает эту проблему.

Кстати, с точки зрения переполнения стека полезно, если вы немного опубликуете свой запрос и структуру таблицы.

person WattsInABox    schedule 19.10.2016
comment
@WattslnABox спасибо за предоставление таких подробностей ... и да, для этого есть причина. Было странно, что мой системный брандмауэр не позволяет полному запросу достичь кворума...! - person peaceUser; 20.10.2016
comment
О, интересно, @peaceUser, я никогда раньше не сталкивался с чем-то подобным. Я рад, что ты понял это. Вы можете ответить на свой вопрос и принять ответ - person WattsInABox; 20.10.2016
comment
Любой, кто посещает этот вопрос, я бы сказал, чтобы проверить оба ответа, так как оба остаются причиной по одной и той же причине. - person peaceUser; 06.04.2017

Что ж, это внутренняя ошибка сопоставления IP-адресов.
Кто-нибудь испытывает трудности при первом отправлении запроса к серверу, пожалуйста, убедитесь, что строка хоста настроена. Изменение хоста здесь

person peaceUser    schedule 21.10.2016
comment
PeaceUser - вы можете опубликовать шаги здесь? ссылка сейчас недоступна! - person mbaxi; 13.02.2017
comment
@mbaxi, это рабочая ссылка, support.rackspace.com/how -to/modify-your-hosts-file - person peaceUser; 13.02.2017
comment
Как это была ошибка сопоставления IP-адресов? У вас был неправильный ip для одного из ваших рабов? У меня та же проблема, что и у вас, и я пробовал множество вещей: java.net.SocketTimeoutException: callTimeout=60000, callDuration=80201 - person Zeliax; 06.04.2017
comment
@Zeliax, надеюсь, это брандмауэр, который не может идентифицировать IP-адрес, как ожидалось. - person peaceUser; 06.04.2017
comment
Любой, кто посещает этот вопрос, я бы сказал, чтобы проверить оба ответа, так как оба остаются причиной по одной и той же причине. - person peaceUser; 06.04.2017