[英]Unable to connect to Hive from Eclipse
我是大數據/ Hadoop的新手。 我正在嘗試使用JDBC從Eclipse連接到Hive。 我不斷收到以下錯誤。 我不知道發生了什么事。 請幫忙。
錯誤StatusLogger找不到log4j2配置文件。 使用默認配置:僅將錯誤記錄到控制台。 SLF4J:類路徑包含多個SLF4J綁定。 SLF4J:在[jar:file:/ C:/Users/eragank/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.4.1/log4j-slf4j-impl-2.4.1中找到綁定.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J:在[jar:file:/ C:/Users/eragank/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j中找到綁定-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J:有關說明,請參見http://www.slf4j.org/codes.html#multiple_bindings 。 SLF4J:實際綁定的類型為[org.apache.logging.slf4j.Log4jLoggerFactory]線程“ main”中的異常java.io.IOException:hive/mksd1dlllytj001.c.iron-potion-771.internal@IHGEXT.GLOBAL的登錄失敗來自keytab /etc/security/keytabs/hive.service.keytab:javax.security.auth.login.LoginException:無法從org.apache.hadoop.security.UserGroupInformation.loginUserFromKeytab(UserGroupInformation.java:935)處的用戶獲取密碼在com.ihg.test.Test.main(Test.java:32)
引起原因:javax.security.auth.login.LoginException:無法從com.sun.security.auth.module上的com.sun.security.auth.module.Krb5LoginModule.promptForPass(Krb5LoginModule.java:897)處的用戶獲取密碼。 .Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:760)
在com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:617)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法)處
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在java.lang.reflect.Method.invoke(Method.java:498)
在javax.security.auth.login.LoginContext.invoke(LoginContext.java:755)
在javax.security.auth.login.LoginContext.access $ 000(LoginContext.java:195)
在javax.security.auth.login.LoginContext $ 4.run(LoginContext.java:682)
在javax.security.auth.login.LoginContext $ 4.run(LoginContext.java:680)
在java.security.AccessController.doPrivileged(本機方法)
在javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
在javax.security.auth.login.LoginContext.login(LoginContext.java:587)
在org.apache.hadoop.security.UserGroupInformation.loginUserFromKeytab(UserGroupInformation.java:926)...還有1
Test.java
package com.test.Test;
import java.sql.SQLException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hive.jdbc.HiveDriver;
import java.sql.DriverManager;
public class Test {
private static String driverName = "org.apache.hive.jdbc.HiveDriver";
/**
* @param args
* @throws SQLException
* @throws IOException
*/
public static void main(String[] args) throws SQLException, IOException {
try {
Class.forName(driverName);
System.out.println("Class FOUND!!");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.exit(1);
}
org.apache.hadoop.conf.Configuration conf = new org.apache.hadoop.conf.Configuration();
conf.set("hadoop.security.authentication", "Kerberos");
UserGroupInformation.setConfiguration(conf);
UserGroupInformation.loginUserFromKeytab("hive/mksd1dlllytj001.c.iron-potion-771.internal@IHGEXT.GLOBAL", "/etc/security/keytabs/hive.service.keytab");
//replace "hive" here with the name of the user the queries should run as
Connection con = DriverManager.getConnection("jdbc:hive2://mksd1dlllytj001.c.iron-potion-771.internal:10000/grs_core?transportMode=http;httpPath=cliservice;auth=kerberos;sasl.qop=auth-int;principal=hive/mksd1dlllytj001.c.iron-potion-771.internal@IHGEXT.GLOBAL", "hive", "");
//Connection con = DriverManager.getConnection("jdbc:hive2://mksd1dlllytj001.c.iron-potion-771.internal:10000/;principal=hive/mksd1dlllytj001.c.iron-potion-771.internal@IHGEXT.GLOBAL;transportMode=http;httpPath=cliservice");
// HiveDriver hd=new HiveDriver();
// System.out.println("HDB CON..");
//
// Connection con2= hd.connect("jdbc:hive2://mksd1dlllytj001.c.iron-potion-771.internal:10000/grs_core?transportMode=http;httpPath=cliservice;auth=kerberos;sasl.qop=auth-int");
//
// System.out.println("HDB CONN="+con2);
//
//;principal=hive/node.addr@ABCREALM.LOCAL
Statement stmt = con.createStatement();
/*String tableName = "testHiveDriverTable";
stmt.execute("drop table if exists " + tableName);
stmt.execute("create table " + tableName + " (key int, value string)");
// show tables
// String sql = "show tables '" + tableName + "'"; */
String sql = ("show tables;");
ResultSet res = stmt.executeQuery(sql);
if (res.next()) {
System.out.println(res.getString(1));
}
}
}
POM.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ihg.ptfwork</groupId>
<artifactId>ptfUpdateTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>ptfUpdateTest</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<env.hiveVersion>1.2.1000.2.6.0.3-8</env.hiveVersion>
<env.hivecoreDir>/usr/hdp/current/hive-client/conf</env.hivecoreDir>
<env.hivecoreFile>hive-site.xml</env.hivecoreFile>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-beeline</artifactId>
<version>2.0.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.7.0_05</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
</dependencies>
</project>
我將首先嘗試不使用UserGroupInformation
進行登錄,您應該能夠僅使用DriverManager.getConnection()
進行連接,我對h2數據庫也是如此,並且工作正常。 聽起來您嘗試使用的身份驗證過程存在問題,而我對此並不十分熟悉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.