首页 > 解决方案 > 无法使用 Java API 连接 HBASE

问题描述

使用 Java API,尝试连接启用 Kerberos 的 hbase。

    Configuration configuration = HBaseConfiguration.create();

    // Zookeeper quorum
    configuration.set("hbase.zookeeper.quorum", "XXXXX");
    configuration.set("hbase.zookeeper.quorum", "XXXX");
    configuration.set("hbase.zookeeper.quorum", "XXXX");
    configuration.set("hbase.zookeeper.property.clientPort", "2181");
    configuration.set("hadoop.security.authentication", "kerberos");
    configuration.set("hbase.security.authentication", "kerberos");
    configuration.set("hbase.cluster.distributed", "true");
    configuration.set("zookeeper.znode.parent", "/hbase-secure"); 
    // check this setting on HBase side
    configuration.set("hbase.rpc.protection", "authentication"); 

    //what principal the master/region. servers use.
    configuration.set("hbase.regionserver.kerberos.principal", "XXXX"); 
    configuration.set("hbase.regionserver.keytab.file", "XXXX"); 

    // this is needed even if you connect over rpc/zookeeper
    configuration.set("hbase.master.kerberos.principal", "XXX"); 
    configuration.set("hbase.master.keytab.file", "XXXX");
    configuration.addResource("core-site.xml");
    configuration.addResource("hbase-site.xml");
    configuration.addResource("hdfs-site.xml");
    configuration.set("hbase.rpc.timeout","90000");
    configuration.set("hbase.client.scanner.timeout.period","90000");
    System.setProperty("java.security.krb5.conf","XXXX");
    // Enable/disable krb5 debugging 
    System.setProperty("sun.security.krb5.debug", "false");

    String principal = System.getProperty("kerberosPrincipal","XXXX");
    String keytabLocation = System.getProperty("kerberosKeytab","XXXX");

    // kinit with principal and keytab
    UserGroupInformation.setConfiguration(configuration);
    UserGroupInformation.loginUserFromKeytab(principal, keytabLocation);

    Connection connection = ConnectionFactory.createConnection(HBaseConfiguration.create(configuration));
    System.out.println(connection.getAdmin().isTableAvailable(TableName.valueOf("XXXX")));

在 org.apache.hadoop 的 org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:240) 处的线程“main”java.io.IOException 中面临以下异常异常:java.lang.reflect.InvocationTargetException。 hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:218) 在 org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:119)

标签: hadoophbasekerberos

解决方案


推荐阅读