先附上windows和linux环境下通用的工具类
public class HBaseUtils {
public static Connection getHBaseConn(String confDirPath, String principal, String keytabPath) throws Exception {
Configuration configuration = HBaseConfiguration.create();
File coreFile = new File(confDirPath + File.separator + "core-site.xml");
if (!coreFile.exists()) {
InputStream inStream = HBaseUtils.class.getClassLoader().getResourceAsStream("core-site.xml");
configuration.addResource(inStream);
} else {
configuration.addResource(Files.newInputStream(coreFile.toPath()));
}
File hdfsFile = new File(confDirPath + File.separator + "hdfs-site.xml");
if (!hdfsFile.exists()) {
InputStream inStream = HBaseUtils.class.getClassLoader().getResourceAsStream("hdfs-site.xml");
configuration.addResource(inStream);
} else {
configuration.addResource(Files.newInputStream(hdfsFile.toPath()));
}
File hbaseFile = new File(confDirPath + File.separator + "hbase-site.xml");
if (!hbaseFile.exists()) {
InputStream inStream = HBaseUtils.class.getClassLoader().getResourceAsStream("hbase-site.xml");
configuration.addResource(inStream);
} else {
configuration.addResource(Files.newInputStream(hbaseFile.toPath()));
}
UserGroupInformation.setConfiguration(configuration);
UserGroupInformation.loginUserFromKeytab(principal, keytabPath);
UserGroupInformation loginUser = UserGroupInformation.getLoginUser();
return loginUser.doAs(
(PrivilegedExceptionAction<Connection>) () -> ConnectionFactory.createConnection(configuration));
}
}
windows端java代码 -基于spring boot
public class HBaseReadWriteExample {
public static void main(String[] args) throws Exception {
String confDirPath = System.getProperty("user.dir") + File.separator + "src/main/resources/";
System.setProperty("java.security.krb5.conf", "C:\\Users\\Administrator\\Desktop\\springbootbd_cdp\\springbootbd-product\\src\\main\\resources\\krb5.conf");
System.setProperty("HADOOP_USER_NAME", "bigdata");
System.setProperty("user.name", "bigdata");
UserGroupInformation.loginUserFromKeytab("bigdata@NEWCHINALIFE.COM", "C:\\Users\\Administrator\\Desktop\\springbootbd_cdp\\springbootbd-product\\src\\main\\resources\\bigdata.keytab");
System.out.println(confDirPath);
String principal = "bigdata@NEWCHINALIFE.COM";
String keytabPath = "C:\\Users\\Administrator\\Desktop\\springbootbd_cdp\\springbootbd-product\\src\\main\\resources\\bigdata.keytab";
Connection conn = HBaseUtils.getHBaseConn(confDirPath, principal, keytabPath);
Table table = conn.getTable(TableName.valueOf("dc_sma:inc_dev_pas_t_contract_agent"));
System.out.println(table.getName());
Scan scan = new Scan();
ResultScanner rs = table.getScanner(scan);
for (Result r : rs) {
System.out.println(r.toString());
}
}
}
linux端java代码 -基于spring boot
static {
try {
//String confDirPath = System.getProperty("user.dir") + File.separator + "src/main/resources/";
String confDirPath = "/etc/hbase/conf";
//System.setProperty("java.security.krb5.conf", "C:\\Users\\Administrator\\Desktop\\springbootbd_cdp\\springbootbd-product\\src\\main\\resources\\krb5.conf");
System.setProperty("java.security.krb5.conf", "/etc/krb5.conf");
System.setProperty("HADOOP_USER_NAME", "bigdata");
System.setProperty("user.name", "bigdata");
//UserGroupInformation.loginUserFromKeytab("bigdata@NEWCHINALIFE.COM", "C:\\Users\\Administrator\\Desktop\\springbootbd_cdp\\springbootbd-product\\src\\main\\resources\\bigdata.keytab");
UserGroupInformation.loginUserFromKeytab("bigdata@NEWCHINALIFE.COM", "/tmp/bigdata.keytab");
System.out.println(confDirPath);
String principal = "bigdata@NEWCHINALIFE.COM";
//String keytabPath = "C:\\Users\\Administrator\\Desktop\\springbootbd_cdp\\springbootbd-product\\src\\main\\resources\\bigdata.keytab";
String keytabPath = "/tmp/bigdata.keytab";
try {
connection = HBaseUtils.getHBaseConn(confDirPath, principal, keytabPath);
admin=connection.getAdmin();
} catch (Exception e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
注意事项
windows端需要在resources文件夹下,把linux端的配置文件复制过来。如图