標籤:記錄 sync nts hba actor format cep .property 遠程服務
HbaseConnKer.java
1 package BigData.conn; 2 3 import BigData.utils.resource.ResourcesUtils; 4 import org.apache.hadoop.conf.Configuration; 5 import org.apache.hadoop.hbase.HBaseConfiguration; 6 import org.apache.hadoop.hbase.client.Connection; 7 import org.apache.hadoop.hbase.client.ConnectionFactory; 8 import org.apache.hadoop.security.UserGroupInformation; 9 10 import java.io.IOException;11 import java.io.InputStream;12 import java.nio.file.Files;13 import java.nio.file.Paths;14 import java.util.Properties;15 16 public class HbaseConnKer {17 18 private static Connection connectionKer = null;19 20 private static volatile HbaseConnKer instanceKer;21 22 private HbaseConnKer() {23 try {24 Properties pro = ResourcesUtils.getResourceAsProperties("Kerberos/HbaseConfigKer.properties");25 26 /* 這個設定檔主要是記錄 kerberos的相關配置資訊,例如KDC是哪個IP?預設的realm是哪個?27 這個檔案是從遠程伺服器上copy下來的*/28 System.setProperty("java.security.krb5.conf", pro.getProperty("java.security.krb5.conf"));29 30 Configuration conf = HBaseConfiguration.create();31 32 // -----Kerberos配置-----33 InputStream hbaseSiteInputStream = Files.newInputStream(Paths.get(pro.getProperty("hbase.site")));34 if (hbaseSiteInputStream == null) {35 System.out.println("The hbase-site.xml is null!");36 }37 conf.addResource(hbaseSiteInputStream);38 conf.set("hadoop.security.authentication", pro.getProperty("hadoop.security.authentication"));39 40 // 這個可以理解成使用者名稱資訊,也就是Principal41 conf.set("kerberos.principal", pro.getProperty("kerberos.principal"));42 43 UserGroupInformation.setConfiguration(conf);44 UserGroupInformation.loginUserFromKeytab(pro.getProperty("kerberos.principal"),45 pro.getProperty("kerberos.keytab"));46 // ----------47 48 //顯示已連線的服務器49 System.out.println("串連伺服器:"+conf.get("hbase.zookeeper.quorum"));50 51 connectionKer = ConnectionFactory.createConnection(conf);52 System.out.println("建立connection成功!");53 } catch (IOException e) {54 e.printStackTrace();55 }56 57 }58 59 public static Connection getConnection() {60 return connectionKer;61 }62 63 public static HbaseConnKer getIstance() {64 // 定義一個共有的靜態方法,返回該類型執行個體65 if (instanceKer == null) {66 // 對象執行個體化時與否判斷(不使用同步代碼塊,instance不等於null時,直接返回對象,提高運行效率)67 synchronized (HbaseConnKer.class) {68 // 同步代碼塊(對象未初始化時,使用同步代碼塊,保證多線程訪問時對象在第一次建立後,不再重複被建立)69 if (instanceKer == null) {70 // 未初始化,則初始instance變數71 instanceKer = new HbaseConnKer();72 }73 }74 }75 return instanceKer;76 }77 }
HbaseConfigKer.properties
# HBase confighbase.zookeeper.quorum=20.1.1.93hbase.zookeeper.property.clientPort=2181java.security.krb5.conf=src/main/resources/Kerberos/krb5.confhadoop.security.authentication=kerberoshbase.site=src/main/resources/Kerberos/hbase-site.xmlkerberos.keytab=src/main/resources/Kerberos/XXX.keytab[email protected]
Hbase之Java API遠端存取Kerberos認證