Hive аутентификация LDAP для JDBC и HCatalog
У меня есть приложение Java/ Groovy для работы с Hive
над ldap
(активный каталог). В этом приложении есть два способа работы с Hive: jdbc и hcatalog (HCatWriter
, HCatReader
). Я могу получить соединение JDBC (org.apache.hive.jdbc.HiveConnection
) на компьютере, не входящем в домен AD. Тем не менее, я получаю сообщение об ошибке "отказано в соединении" на этом компьютере, но приложение прекрасно работает на компьютере из домена AD. Код, который я использую для аутентификации, следующий:
PasswdAuthenticationProvider authProvider = new LdapAuthenticationProviderImpl(hiveConf)
authProvider.Authenticate("loom", "password")
Почему я не могу использовать интерфейс hcatalog для работы с Hive, защищенным ldap(AD)
с компьютера исключен из домена AD? Почему интерфейс jdbc может? Есть ли способ выполнять операции Hive (например, запись записей в определенную таблицу) с компьютера вне домена AD?
Я отладил приложение и обнаружил, что "соединение отказано" происходит для подключения к серверу AD (из hive.server2.authentication.ldap.url
параметр HiveConf
). Существует трассировка стека исключения:
javax.security.sasl.AuthenticationException: LDAP Authentication failed for user
at org.apache.hive.service.auth.LdapAuthenticationProviderImpl.Authenticate(LdapAuthenticationProviderImpl.java:184)
at my.some.package.HiveTest.hcatalog(ConnectionToHiveTest.groovy:193)
Caused by: javax.naming.CommunicationException: activedirectory-server.local:389
at com.sun.jndi.ldap.Connection.<init>(Connection.java:226)
at com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:137)
at com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1615)
at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2749)
at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:319)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:192)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:210)
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:153)
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:83)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
at javax.naming.InitialContext.init(InitialContext.java:244)
at javax.naming.InitialContext.<init>(InitialContext.java:216)
at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:101)
at org.apache.hive.service.auth.LdapAuthenticationProviderImpl.Authenticate(LdapAuthenticationProviderImpl.java:176)
... 1 common frames omitted
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:211)
at com.sun.jndi.ldap.Connection.createSocket(Connection.java:363)
at com.sun.jndi.ldap.Connection.<init>(Connection.java:203)
... 15 common frames omitted