Подключение к 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
Мои конкретные вопросы:
Какой путь я должен использовать для моего
sslTrustStore
? В настоящее время он находится в/home/<user>/Downloads/knox-1.0.0/data/security/keystores/gateway.jks
, Я попробовал ту же строку с полным путем, но все равно не повезло.Что я должен использовать для
httpPath
? На моей виртуальной машине нет Hive, поскольку Knox будет подключаться к Hadoop Node с помощью Hive.Что-то еще мне не хватает в строке подключения?
В 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 на хост-компьютере. У меня было много проблем с подключением к ВМ внешних сервисов (работающих на хост-системе), но это мог быть только я. Есть несколько способов отладки, прежде чем позвольте мне ответить на ваши вопросы:
- Вы правы, вам нужно использовать
security/keystores/gateway.jks
путь, чтобы Beeline (или любой клиент JDBC) мог доверять сертификатам, представленным Knox. - Похоже, вы используете Apache Knox, поэтому ваш путь будет выглядеть примерно так
gateway/sandbox/hive
(вам нужно обновить URL службы HIVE в разделеsandbox.xml
топология).gateway/default/hive
в основном используется экземплярами Knox, сконфигурированными Ambari, что я не считаю верным в вашем случае. - Попробуйте сделать несколько изменений, таких как
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
Теперь перейдем к некоторой отладке.
- Я думаю, что будет проще, если вы просто загрузите Knox на своей ОС (вместо виртуальной машины) и поговорите с Hive, Knox нужна "линия прямой видимости" для обслуживания прокси-серверов, а с виртуальными машинами это может быть сложно. Кроме того, я считаю удобным устранять неполадки и проверять журналы. Вам не нужно, чтобы Hive работал на той же машине, достаточно просто взглянуть на Нокса.
- Удостовериться
hive-server.xml
имеет свойствоhive.server2.servermode=http
это меня все время заводит:) - Этот учебник / пример объясняет, как подключиться к Hive2 с помощью Knox с использованием JDBC, он использует скрипты groovy, но вы можете просто взглянуть на строки установки и подключения.
- Это еще один пример использования KnoxShell для подключения к Hive2.
Надеюсь это поможет.