Подключение к Knox через Squirrel с помощью драйвера Hive JDBC - PullRequest
0 голосов
/ 03 июля 2018

Я создал машину 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 с 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 Ответ

0 голосов
/ 05 июля 2018

Можете ли вы подключиться к 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.

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

...