请问Java连接HBase 报错

驛路梨花醉美 2017-05-26 03:00:53
错误:Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.security.authentication.util.KerberosUtil.hasKerberosTicket(Ljavax/security/auth/Subject;)Z
详细描述:

服务器环境:位于Ubuntu-16.04,Hadoop-2.8.0 HA集群,HBase-1.2.5

开发环境:Win7 64位,jar 都已经导入

代码:

public class TestHBase {
public static Configuration configuration;
public static Connection connection;
public static Admin admin;

public static void main(String[] args) throws IOException {
println("Start...");
init();

listTables();

close();
println("End...");
}

/**
* 查看已有表
*
* @throws IOException
*/
public static void listTables() {

HTableDescriptor hTableDescriptors[] = null;
try {
hTableDescriptors = admin.listTables();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (HTableDescriptor hTableDescriptor : hTableDescriptors) {
println(hTableDescriptor.getNameAsString());
}

}

/**
* 初始化链接
*/
public static void init() {
configuration = HBaseConfiguration.create();
//configuration.set("hadoop.home.dir","/home/hadoop/hadoop-home/hadoop-2.8.0/");
configuration.set("hbase.zookeeper.property.clientPort", "2181");
configuration.set("hbase.zookeeper.quorum", "172.16.0.240,172.16.0.241,172.16.0.242");
configuration.set("hbase.master", "hdfs://172.16.0.240:60000");
configuration.set("hbase.root.dir", "hdfs://172.16.0.240:9000/hbase");

try {
connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 关闭连接
*/
public static void close() {
try {
if (null != admin) {
admin.close();
}
if (null != connection) {
connection.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}




}
报错:

11:47:59.807 DEBUG org.apache.hadoop.util.Shell 500 <clinit> - Failed to detect a valid hadoop home directory java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset.
at org.apache.hadoop.util.Shell.checkHadoopHomeInner(Shell.java:448) ~[hadoop-common-2.8.0.jar:?]
at org.apache.hadoop.util.Shell.checkHadoopHome(Shell.java:419) ~[hadoop-common-2.8.0.jar:?]
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:496) [hadoop-common-2.8.0.jar:?]
at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:79) [hadoop-common-2.8.0.jar:?]
at org.apache.hadoop.conf.Configuration.getBoolean(Configuration.java:1445) [hadoop-common-2.8.0.jar:?]
at org.apache.hadoop.hbase.HBaseConfiguration.checkDefaultsVersion(HBaseConfiguration.java:67) [hbase-common-1.1.1.jar:1.1.1]
at org.apache.hadoop.hbase.HBaseConfiguration.addHbaseResources(HBaseConfiguration.java:81) [hbase-common-1.1.1.jar:1.1.1]
at org.apache.hadoop.hbase.HBaseConfiguration.create(HBaseConfiguration.java:96) [hbase-common-1.1.1.jar:1.1.1]
at com.cherrish.hadoop.TestHBase2.init(TestHBase2.java:28) [bin/:?]
at com.cherrish.hadoop.TestHBase2.listTables(TestHBase2.java:107) [bin/:?]
at com.cherrish.hadoop.TestHBase2.main(TestHBase2.java:17) [bin/:?]

11:47:59.807 WARN org.apache.hadoop.util.Shell 673 <clinit> - Did not find winutils.exe: java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset. -see https://wiki.apache.org/hadoop/WindowsProblems
11:47:59.807 DEBUG org.apache.hadoop.util.Shell 675 <clinit> - Failed to find winutils.exe java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset. -see https://wiki.apache.org/hadoop/WindowsProblems
at org.apache.hadoop.util.Shell.fileNotFoundException(Shell.java:528) ~[hadoop-common-2.8.0.jar:?]
at org.apache.hadoop.util.Shell.getHadoopHomeDir(Shell.java:549) ~[hadoop-common-2.8.0.jar:?]
at org.apache.hadoop.util.Shell.getQualifiedBin(Shell.java:572) ~[hadoop-common-2.8.0.jar:?]
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:669) [hadoop-common-2.8.0.jar:?]
at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:79) [hadoop-common-2.8.0.jar:?]
at org.apache.hadoop.conf.Configuration.getBoolean(Configuration.java:1445) [hadoop-common-2.8.0.jar:?]
at org.apache.hadoop.hbase.HBaseConfiguration.checkDefaultsVersion(HBaseConfiguration.java:67) [hbase-common-1.1.1.jar:1.1.1]
at org.apache.hadoop.hbase.HBaseConfiguration.addHbaseResources(HBaseConfiguration.java:81) [hbase-common-1.1.1.jar:1.1.1]
at org.apache.hadoop.hbase.HBaseConfiguration.create(HBaseConfiguration.java:96) [hbase-common-1.1.1.jar:1.1.1]
at com.cherrish.hadoop.TestHBase2.init(TestHBase2.java:28) [bin/:?]
at com.cherrish.hadoop.TestHBase2.listTables(TestHBase2.java:107) [bin/:?]
at com.cherrish.hadoop.TestHBase2.main(TestHBase2.java:17) [bin/:?]
Caused by: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset.
at org.apache.hadoop.util.Shell.checkHadoopHomeInner(Shell.java:448) ~[hadoop-common-2.8.0.jar:?]
at org.apache.hadoop.util.Shell.checkHadoopHome(Shell.java:419) ~[hadoop-common-2.8.0.jar:?]
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:496) ~[hadoop-common-2.8.0.jar:?]
... 8 more

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.security.authentication.util.KerberosUtil.hasKerberosTicket(Ljavax/security/auth/Subject;)Z
at org.apache.hadoop.security.UserGroupInformation.<init>(UserGroupInformation.java:652)
at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:843)
at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:802)
at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:675)
at org.apache.hadoop.hbase.security.User$SecureHadoopUser.<init>(User.java:286)
at org.apache.hadoop.hbase.security.User$SecureHadoopUser.<init>(User.java:282)
at org.apache.hadoop.hbase.security.User.getCurrent(User.java:185)
at org.apache.hadoop.hbase.security.UserProvider.getCurrent(UserProvider.java:88)
at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:215)
at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:119)
at com.cherrish.hadoop.TestHBase2.init(TestHBase2.java:36)
at com.cherrish.hadoop.TestHBase2.listTables(TestHBase2.java:107)
at com.cherrish.hadoop.TestHBase2.main(TestHBase2.java:17)
谢谢!

补充:如果编译成jar包到Hadoop 集群上去执行也报错:

Caused by: java.lang.NoSuchMethodError: org.apache.hadoop.security.authentication.util.KerberosUtil.hasKerberosTicket(Ljavax/security/auth/Subject;)Z

14:31:41.543 DEBUG org.apache.hadoop.security.UserGroupInformation$HadoopLoginModule 204 commit - using local user:UnixPrincipal: hadoop
14:31:41.544 DEBUG org.apache.hadoop.security.UserGroupInformation$HadoopLoginModule 210 commit - Using user: "UnixPrincipal: hadoop" with name hadoop
14:31:41.545 DEBUG org.apache.hadoop.security.UserGroupInformation$HadoopLoginModule 220 commit - User entry: "hadoop"
14:31:41.545 DEBUG org.apache.hadoop.security.UserGroupInformation 841 loginUserFromSubject - Assuming keytab is managed externally since logged in from subject.
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.NoSuchMethodError: org.apache.hadoop.security.authentication.util.KerberosUtil.hasKerberosTicket(Ljavax/security/auth/Subject;)Z
at org.apache.hadoop.security.UserGroupInformation.<init>(UserGroupInformation.java:652)
at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:843)
at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:802)
at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:675)
at org.apache.hadoop.hbase.security.User$SecureHadoopUser.<init>(User.java:286)
at org.apache.hadoop.hbase.security.User$SecureHadoopUser.<init>(User.java:282)
at org.apache.hadoop.hbase.security.User.getCurrent(User.java:185)
at org.apache.hadoop.hbase.security.UserProvider.getCurrent(UserProvider.java:88)
at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:215)
at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:119)
at com.cherrish.hadoop.TestHBase2.init(TestHBase2.java:36)
at com.cherrish.hadoop.TestHBase2.listTables(TestHBase2.java:107)
at com.cherrish.hadoop.TestHBase2.main(TestHBase2.java:17)
... 5 more
...全文
1226 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧