Подключение к Knox через Squirrel с помощью драйвера Hive JDBC

Я создал машину VMWare на своем компьютере под управлением Ubuntu. Я установил там Apache Knox, используя демонстрационный LDAP, и сейчас пытаюсь настроить строку подключения к Knox через SQuirreL. Я не могу использовать Песочницы Hortonworks, потому что мне нужно сделать это совместимым с Hive под Cloudera. Прежде чем приступить к настройке Knox, я хочу сначала подключиться к нему с помощью драйвера Hive JDBC. Вот строка, которая у меня есть до сих пор:

jdbc:hive2://<host>:8443/;ssl=1;sslTrustStore=/gateway.jks;trustStorePassword=<master secret>?hive.server2.transport.mode=http;httpPath=gateway/default/hive

Мои конкретные вопросы:

  1. Какой путь я должен использовать для моего sslTrustStore? В настоящее время он находится в /home/<user>/Downloads/knox-1.0.0/data/security/keystores/gateway.jks, Я попробовал ту же строку с полным путем, но все равно не повезло.

  2. Что я должен использовать для httpPath? На моей виртуальной машине нет Hive, поскольку Knox будет подключаться к Hadoop Node с помощью Hive.

  3. Что-то еще мне не хватает в строке подключения?

В SQuirreL, после того, как я получаю сообщение об ошибке и нажимаю "трассировка стека", это общая суть того, что я получаю:

java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.sql.SQLException: [Cloudera][HiveJDBCDriver](500164) Error initialized or created transport for authentication: \home\anudeep\Downloads\knox-1.0.0\data\security\keystores\gateway.jks (The system cannot find the path specified).
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.awaitConnection(OpenConnectionCommand.java:132)
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.access$100(OpenConnectionCommand.java:45)
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand$2.run(OpenConnectionCommand.java:115)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

1 ответ

Можете ли вы подключиться к Hive напрямую без Knox? Глядя на трассировку стека, кажется, что хранилище ключей (gateway.jks) не найдено, это может быть проблема с разрешениями. Попробуйте установить Knox на хост-компьютере. У меня было много проблем с подключением к ВМ внешних сервисов (работающих на хост-системе), но это мог быть только я. Есть несколько способов отладки, прежде чем позвольте мне ответить на ваши вопросы:

  1. Вы правы, вам нужно использовать security/keystores/gateway.jks путь, чтобы Beeline (или любой клиент JDBC) мог доверять сертификатам, представленным Knox.
  2. Похоже, вы используете Apache Knox, поэтому ваш путь будет выглядеть примерно так gateway/sandbox/hive (вам нужно обновить URL службы HIVE в разделе sandbox.xml топология). gateway/default/hive в основном используется экземплярами Knox, сконфигурированными Ambari, что я не считаю верным в вашем случае.
  3. Попробуйте сделать несколько изменений, таких как ssl=trueи вместо строки запроса (?) используйте двоеточие (:) для transport.mode т.е. ;transportMode=http

Это жало связи, которое у меня работает с Билайном

beeline -u "jdbc:hive2://<knox-host>:8443/;ssl=true;sslTrustStore=/var/lib/knox/security/keystores/gateway.jks;trustStorePassword=<trustPassword>;transportMode=http;httpPath=gateway/sandbox/hive" -n admin -p admin-password

Теперь перейдем к некоторой отладке.

  1. Я думаю, что будет проще, если вы просто загрузите Knox на своей ОС (вместо виртуальной машины) и поговорите с Hive, Knox нужна "линия прямой видимости" для обслуживания прокси-серверов, а с виртуальными машинами это может быть сложно. Кроме того, я считаю удобным устранять неполадки и проверять журналы. Вам не нужно, чтобы Hive работал на той же машине, достаточно просто взглянуть на Нокса.
  2. Удостовериться hive-server.xml имеет свойство hive.server2.servermode=httpэто меня все время заводит:)
  3. Этот учебник / пример объясняет, как подключиться к Hive2 с помощью Knox с использованием JDBC, он использует скрипты groovy, но вы можете просто взглянуть на строки установки и подключения.
  4. Это еще один пример использования KnoxShell для подключения к Hive2.

Надеюсь это поможет.

Другие вопросы по тегам