(一)如果部署JAVA 代碼的主機用戶獲取了kerberos權限情況下
假設主機名是:client
su - client 登錄主機后
kinit -kt /keytab的路徑/client.keytab client@STARYEA.COM
編寫的java代碼入下:
public static void main(String[] args) throws IOException, InterruptedException {
conf = HBaseConfiguration.create();
conf.addResource("hbase-site.xml");
conf.addResource("core-site.xml");
conf.addResource("hdfs-site.xml");
--代碼正常寫不需要添加任何東西
conn = ConnectionFactory.createConnection(conf);
createTable("client:test_table_0204");
insertData("clienttest_table_0204");
QueryAll("client:test_table_0204");
conn.close();
}
(二)以應用程序的方式獲取kerberos認證的情況下
假設主機名是:client
su - client 登錄主機后
kdestory --刪除主機的憑證,在這種情況下 JAVA代碼如下
public static void main(String[] args) throws IOException,
InterruptedException {
conf = HBaseConfiguration.create();
conf.addResource("hbase-site.xml");
conf.addResource("core-site.xml");
conf.addResource("hdfs-site.xml");
--需要添加kerberos認證
String USER = "client@STARYEA.COM";
String KEYTAB = "/etc/security/keytabs/client.keytab";
--APP需要kerberos認證
UserGroupInformation ugi = UserGroupInformation.loginUserFromKeytabAndReturnUGI(USER, KEYTAB);
ugi.doAs(new PrivilegedExceptionAction<Void>() {
public Void run() {
try {
conn = ConnectionFactory.createConnection(conf);
createTable("client:test_table_0204");
insertData("client:test_table_0204");
QueryAll("client:test_table_0204");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
});
conn.close();
}