用Java訪問帶有Kerberos認證的HBase

程序代碼實例以下:

  
package com.hbasedemo;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.security.UserGroupInformation;

public class Test {
       private static Configuration conf = null;

       static {

             // 這個配置文件主要是記錄 kerberos的相關配置信息,例如KDC是哪一個IP?默認的realm是哪一個?
             // 若是沒有這個配置文件這邊認證的時候確定不知道KDC的路徑嘍
             // 這個文件也是從遠程服務器上copy下來的
            System. setProperty("java.security.krb5.conf""C:/Users/dongzeguang/Downloads/krb5.conf" );
            
             conf = HBaseConfiguration.create();
             conf.set("hadoop.security.authentication" , "Kerberos" );
             // 這個hbase.keytab也是從遠程服務器上copy下來的, 裏面存儲的是密碼相關信息
             // 這樣咱們就不須要交互式輸入密碼了
             conf.set("keytab.file" , "C:/Users/Downloads/hbase.keytab" );
             // 這個能夠理解成用戶名信息,也就是Principal
             conf.set("kerberos.principal" , "hbase/1722.myip.domain@HADOOP.COM" );           
            UserGroupInformation. setConfiguration(conf);
             try {
                  UserGroupInformation. loginUserFromKeytab("hbase/1722.myip.domain@HADOOP.COM""C:/Users/Downloads/hbase.keytab" );
            } catch (IOException e) {
                   // TODO Auto-generated catch block
                  e.printStackTrace();
            }
      }

       public static void scanSpan(final String tableName) throws Exception {
            HTable table =  new HTable(conf, tableName);
            System. out.println("tablename:" +new String(table.getTableName()));
            Scan s new Scan();
            ResultScanner rs = table.getScanner(s);
            
             for (Result r : rs) {
                  System. out.println(r.toString());
                  KeyValue[] kv = r. raw();
                   for (int i = 0; i < kv.length; i++) {
                        System. out.print(new String(kv[i].getRow()) + "");
                        System. out.print(new String(kv[i].getFamily()) + ":");
                        System. out.print(new String(kv[i].getQualifier() ) + "" );
                        System. out.print(kv[i].getTimestamp() + "" );
                        System. out.println(new String(kv[i].getValue() ));
                  }
            }

      }

       /**
       * @param args
       */
       public static void main(String[] args) {
             // TODO Auto-generated method stub
             try {
                  Test. scanSpan("h_span");
            } catch (Exception e) {
                   // TODO Auto-generated catch block
                  e.printStackTrace();
            }
      }

}
相關文章
相關標籤/搜索