使用Spark/Java讀取已開啟Kerberos認證的HBase
1.賦予drguo使用者相應的許可權
2.KDC中建立drguo使用者並匯出相應的keytab檔案
[root@bigdata28 ~]# kadmin.local
Authenticating as principal drguo/admin@AISINO.COM with password.
kadmin.local: addprinc drguo/bigdata28
WARNING: no policy specified for drguo/bigdata28@AISINO.COM; defaulting to no policy
Enter password for principal "drguo/ [email protected]":
Re-enter password for principal "drguo/[email protected]":
Principal "drguo/[email protected]" created.
kadmin.local: xst -norandkey -k /home/drguo/drguo_bigdata28.keytab drguo/bigdata28@AISINO.COM
Entry for principal drguo/bigdata28@AISINO.COM with kvno 1, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/home/drguo/drguo_bigdata28.keytab.
Entry for principal drguo/bigdata28@AISINO.COM with kvno 1, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/home/drguo/drguo_bigdata28.keytab.
Entry for principal drguo/bigdata28@AISINO.COM with kvno 1, encryption type des3-cbc-sha1 added to keytab WRFILE :/home/drguo/drguo_bigdata28.keytab.
Entry for principal drguo/bigdata28@AISINO.COM with kvno 1, encryption type arcfour-hmac added to keytab WRFILE:/home/drguo/drguo_bigdata28.keytab.
Entry for principal drguo/bigdata28@AISINO.COM with kvno 1, encryption type des-hmac-sha1 added to keytab WRFILE:/home/drguo/drguo_bigdata28.keytab.
Entry for principal drguo/bigdata28@AISINO.COM with kvno 1, encryption type des-cbc-md5 added to keytab WRFILE:/home/drguo/drguo_bigdata28.keytab.
kadmin.local: q
3.將krb5.conf與keytab檔案拷到本地,方便測試
4.使用Spark讀取HBase
package drguo.test
import java.io.IOException
import com.google.protobuf.ServiceException
import dguo.test.HBaseKerb
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.{HBaseAdmin, HTable}
import org.apache.hadoop.hbase.mapreduce.{TableInputFormat}
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.security.UserGroupInformation
import org.apache.spark.{SparkConf, SparkContext}
/**
* Created by drguo on 2018/7/18.
*/
object SparkExecHBase {
def main(args: Array[String]): Unit = {
// HBaseKerb.getAllRows("XMJZ")
System.setProperty("java.security.krb5.conf", "d:/krb5.conf")
val sparkConf = new SparkConf().setAppName("SparkExecHBase").setMaster("local")
val sc = new SparkContext(sparkConf)
val conf = HBaseConfiguration.create()
conf.set(TableInputFormat.INPUT_TABLE, "XMJZ")
conf.set("hbase.zookeeper.quorum","172.19.6.28,172.19.6.29,172.19.6.30")
conf.set("hbase.zookeeper.property.clientPort", "2181")
conf.set("hadoop.security.authentication", "Kerberos")
UserGroupInformation.setConfiguration(conf)
try {
UserGroupInformation.loginUserFromKeytab("drguo/[email protected]", "d:/drguo_bigdata28.keytab")
HBaseAdmin.checkHBaseAvailable(conf)
} catch {
case e: IOException =>
e.printStackTrace()
case e: ServiceException =>
e.printStackTrace()
}
val hbaseRdd = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat], classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable], classOf[org.apache.hadoop.hbase.client.Result])
// println(hbaseRdd.toString())
hbaseRdd.map( x=>x._2).map{result => (result.getRow,result.getValue(Bytes.toBytes("Info"),Bytes.toBytes("ADDTIME")))}.map(row => (new String(row._1),new String(row._2))).collect.foreach(r => (println(r._1+":"+r._2)))
}
}
5.使用Java讀取(網上也有不少例子,但大部分都有一些重複、多餘的程式碼)
package dguo.test;
import com.google.protobuf.ServiceException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.security.UserGroupInformation;
import java.io.IOException;
/**
* Created by drguo on 2018/7/18.
*/
public class HBaseKerb {
private static Configuration conf = null;
static {
System.setProperty("java.security.krb5.conf", "d:/krb5.conf" );
//使用HBaseConfiguration的單例方法例項化
conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "172.19.6.28,172.19.6.29,172.19.6.30");
conf.set("hbase.zookeeper.property.clientPort", "2181");
conf.set("hadoop.security.authentication" , "Kerberos" );
UserGroupInformation.setConfiguration(conf);
try {
UserGroupInformation.loginUserFromKeytab("drguo/[email protected]", "d:/drguo_bigdata28.keytab");
HBaseAdmin.checkHBaseAvailable(conf);
} catch (IOException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
}
}
public static void getAllRows(String tableName) throws IOException{
HTable hTable = new HTable(conf, tableName);
//得到用於掃描region的物件
Scan scan = new Scan();
//使用HTable得到resultcanner實現類的物件
ResultScanner resultScanner = hTable.getScanner(scan);
for(Result result : resultScanner){
Cell[] cells = result.rawCells();
for(Cell cell : cells){
//得到rowkey
System.out.println("行鍵:" + Bytes.toString(CellUtil.cloneRow(cell)));
//得到列族
System.out.println("列族" + Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell)));
}
}
}
public static void main(String[] args) throws IOException{
getAllRows("XMJZ");
}
}
PS:
出現下述錯誤往往是因為System.setProperty(“java.security.krb5.conf”, “d:/krb5.conf”)中的krb5.conf檔案沒有找到(比如路徑錯誤)或是裡面配置的kdc、admin_server地址錯誤。
Exception in thread “main” java.lang.IllegalArgumentException: Can’t get Kerberos realm
at org.apache.hadoop.security.HadoopKerberosName.setConfiguration(HadoopKerberosName.java:65)
at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:319)
at org.apache.hadoop.security.UserGroupInformation.setConfiguration(UserGroupInformation.java:374)
at drguo.test.SparkExecHBase$.main(SparkExecHBase.scala:32)
at drguo.test.SparkExecHBase.main(SparkExecHBase.scala)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.security.authentication.util.KerberosUtil.getDefaultRealm(KerberosUtil.java:84)
at org.apache.hadoop.security.HadoopKerberosName.setConfiguration(HadoopKerberosName.java:63)
… 4 more
Caused by: KrbException: Cannot locate default realm
at sun.security.krb5.Config.getDefaultRealm(Config.java:1029)
… 10 more
相關推薦
使用Spark/Java讀取已開啟Kerberos認證的HBase
1.賦予drguo使用者相應的許可權 2.KDC中建立drguo使用者並匯出相應的keytab檔案 [root@bigdata28 ~]# kadmin.local Authenticating as principal drguo/admin
有kerberos認證hbase在spark環境下的使用
hadoop中計算框架MapReduce中儲存到有kerberos的hdfs,由於其內部yarn進行了認證故不需要進行相關的操作,可直接進行讀寫操作。spark使用有kerberos認證的hbase是一個既麻煩又簡單的問題,麻煩的方面是:中文的網站相關的文章很少並且分佈只是分
cdh5.12.2 開啟kerberos認證
大數據 cdh kerberos hadoop 一:kdc 服務的安裝與配置 二:集群所有節點安裝Kerberos客戶端(包括CM) 三:CDH集群啟用Kerberos 一: kdc 服務的安裝與配置 1.1 安裝kdc服務 # yum install krb5-server krb
Spark連線需Kerberos認證的HBase
Prerequisite krb5.conf 或 krb5.ini xx.keytab core-site.xml hbase-core.xml Codes hBaseConfig.addResource("hbase-site.xml") h
java在線聊天項目0.6版 解決客戶端關閉後異常問題 dis.readUTF()循環讀取已關閉的socket
異常 oid jpanel read pen false tput ets java.net 服務端對try catch finally重新進行了定義,當發生異常,主動提示,或關閉出現異常的socket 服務器端代碼修改如下: package com.swift; im
HBase實操 | 如何使用Java連線Kerberos的HBase
一.文件編寫目的 出於CDH叢集安全考慮,在CDH叢集中增加了Kerberos認證機制。因為HBase的儲存系統是基於Hadoop的儲存,所以通過HBase客戶端訪問HBase資料庫時需要進行身份認證。在Linux下使用HBase客戶端訪問HBase資料時需要先kinit初始化Kerberos賬
spark從mysql讀取資料(redis/mongdb/hbase等類似,換成各自RDD即可)
package com.ws.jdbc import java.sql.DriverManager import org.apache.spark.rdd.JdbcRDD import org.apache.spark.{SparkConf, SparkCont
大資料Spark優化讀取Hbase--region 提高並行數過程詳細解析
一. Hbase 的 region 我們先簡單介紹下 Hbase 的 架構和 region : 從物理叢集的角度看,Hbase 叢集中,由一個 Hmaster 管理多個 HRegionServer,其中每個 HRegionServer 都對應一臺物理機器,一臺 HRegionServer
VBA 從一個未開啟的Excel檔案中讀取資料到,已開啟的檔案中.
Sub CommandButton2_Click()''根據專案名稱 獲取部門名'A8 顯示在B8中 c3--c40Dim xDis AsIntegerDim xNo AsIntegerDim strProject '專案名稱Dim strDep '製造部門 Dim myPath$, myFi
StreamSets 從Mysql到Hbase(帶kerberos認證)的實時資料採集
引言 最近在研究StreamSets,就做了個簡單Demo熟悉它的使用,由於我們的hbase是cdh版的,且帶有kerberos認證,與streamsSet怎麼配帶kerberos認證的Hbase中文資料甚少,所以本人就去官網翻看了一下。 環境介紹 安裝streamSets這
spark on yarn模式下掃描帶有kerberos的hbase
我上一篇寫了關於如何在spark中直接訪問有kerberos的hbase,現在我們需要對hbase進行全表的分散式掃描,在無kerberos的情況下通過sparkcontext的newApiHadoopRDD就可以達到目的,但有了kerberos的限制,這個方法就不行了,
java程式碼連線Hive(開啟Kerberos和sentry)
在開啟Kerberos認證之後,使用者需要進入登入Hive CLI或beeline需要用到keytab。為此,我們現在Kerberos資料庫中建立user1和user2兩個principal。 生成user1和user2的keytab kadmin.
spark1.4 讀取hbase 0.96 報錯 java.io.NotSerializableException: org.apache.hadoop.hbase.io.ImmutableBytes
spark接hbase讀取資料: val sc = new SparkContext(sparkConf) val conf = HBaseConfiguration.create()
Spark如何讀取Hbase特定查詢的資料
最近工作需要使用到Spark操作Hbase,上篇文章已經寫了如何使用Spark讀寫Hbase全量表的資料做處理,但這次有所不同,這次的需求是Scan特定的Hbase的資料然後轉換成RDD做後續處理,簡單的使用Google查詢了一下,發現實現方式還是比較簡單的,用的還是Hb
spark操作讀取hbase例項
博主專案實踐中,經常需要用spark從hbase中讀取資料。其中,spark的版本為1.6,hbase的版本為0.98。現在記錄一下如何在spark中操作讀取hbase中的資料。 對於這種操作型的需求,沒有什麼比直接上程式碼更簡單明瞭的了。so,show me
spark DataFrame 使用Java讀取mysql和寫入mysql的例子
例子 package com.hjh.demo.mysql; import java.util.Properties; import org.apache.log4j.Logger; import org.apache.spark.SparkConf; impor
Java Api Consumer 連線啟用Kerberos認證的Kafka
java程式連線到一個需要Kerberos認證的kafka叢集上,消費生產者生產的資訊,kafka版本是2.10-0.10.0.1; Java程式以maven構建,(怎麼構建maven工程,可去問下度娘:“maven工程入門示例”) 先上pom.xml檔案 <pro
通過BulkLoad快速將海量數據導入到Hbase(TDH,kerberos認證)
++ zookeeper wke zookeepe ner all throw 利用 tab 一、概念 使用BlukLoad方式利用Hbase的數據信息是 按照特點格式存儲在HDFS裏的特性,直接在HDFS中生成持久化的Hfile數據格式文件,然後完成巨量數
java讀取網頁圖片路徑並下載到本地
mage -h form read file cti 連接 公司 date() java讀取網頁圖片路徑並下載到本地 最近公司需要爬取一些網頁上的數據,自己就簡單的寫了一個demo,其中有一些數據是圖片,需要下載下來到本地並且 將圖片的路徑保存到數據庫,示例代碼如下: pa
Java讀取Properties配置文件
配置文件 java 字符串 接口 1.Properties類與Properties配置文件Properties類繼承自Hashtable類並且實現了Map接口,使用鍵值對的形式來保存屬性集。不過Properties的鍵和值都是字符串類型。2.Properties中的主要方法(1)load(In