日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hbase1.1.1 连接集群_Hadoop2.7.1+Hbase1.1.2集群环境搭建(10) hadoop hbase kerberos

發(fā)布時(shí)間:2025/3/12 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hbase1.1.1 连接集群_Hadoop2.7.1+Hbase1.1.2集群环境搭建(10) hadoop hbase kerberos 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.hadoop安全機(jī)制歷史

在Hadoop1.0.0或者CDH3 版本之前, hadoop并不存在安全認(rèn)證一說。默認(rèn)集群內(nèi)所有的節(jié)點(diǎn)都是可靠的,值得信賴的。用戶與HDFS或者M(jìn)/R進(jìn)行交互時(shí)并不需要進(jìn)行驗(yàn)證。導(dǎo)致存在惡意用戶偽裝成真正的用戶或者服務(wù)器入侵到hadoop集群上,惡意的提交作業(yè),修改JobTracker狀態(tài),篡改HDFS上的數(shù)據(jù),偽裝成NameNode 或者TaskTracker接受任務(wù)等。 盡管在版本0.16以后, HDFS增加了文件和目錄的權(quán)限,但是并沒有強(qiáng)認(rèn)證的保障,這些權(quán)限只能對(duì)偶然的數(shù)據(jù)丟失起保護(hù)作用。惡意的用戶可以輕易的偽裝成其他用戶來篡改權(quán)限,致使權(quán)限設(shè)置形同虛設(shè)。不能夠?qū)adoop集群起到安全保障。

在Hadoop1.0.0或者CDH3版本后,加入了Kerberos認(rèn)證機(jī)制。使得集群中的節(jié)點(diǎn)就是它們所宣稱的,是信賴的。Kerberos可以將認(rèn)證的密鑰在集群部署時(shí)事先放到可靠的節(jié)點(diǎn)上。集群運(yùn)行時(shí),集群內(nèi)的節(jié)點(diǎn)使用密鑰得到認(rèn)證。只有被認(rèn)證過節(jié)點(diǎn)才能正常使用。企圖冒充的節(jié)點(diǎn)由于沒有事先得到的密鑰信息,無法與集群內(nèi)部的節(jié)點(diǎn)通信。防止了惡意的使用或篡改Hadoop集群的問題,確保了Hadoop集群的可靠安全。

2.Hadoop面臨的安全問題

2.1 ?用戶到服務(wù)器的認(rèn)證問題

1)NameNode,,JobTracker上沒有用戶認(rèn)證

用戶可以偽裝成其他用戶入侵到一個(gè)HDFS 或者M(jìn)apReduce集群上。

2)DataNode上沒有認(rèn)證

Datanode對(duì)讀入輸出并沒有認(rèn)證。導(dǎo)致如果一些客戶端如果知道block的ID,就可以任意的訪問DataNode上block的數(shù)據(jù)

3)JobTracker上沒有認(rèn)證

可以任意的殺死或更改用戶的jobs,可以更改JobTracker的工作狀態(tài)

2.2 ?服務(wù)器到服務(wù)器的認(rèn)證問題

1)沒有DataNode, TaskTracker的認(rèn)證

用戶可以偽裝成datanode ,tasktracker,去接受JobTracker, Namenode的任務(wù)指派。

3.安全機(jī)制

3.1Java的安全機(jī)制

詳細(xì)介紹請(qǐng)參考JAAS:靈活的Java安全機(jī)制

簡(jiǎn)單來說,用戶首先使用LoginContext的接口進(jìn)行登錄驗(yàn)證。LoginContext可以配置使用不同的驗(yàn)證協(xié)議。驗(yàn)證通過后,用戶得到一個(gè)subject,里面包含憑證,公私鑰等。之后,在涉及到需要進(jìn)行權(quán)限認(rèn)證的地方(例如,資源訪問,外部鏈接校驗(yàn),協(xié)議訪問等),使用doAs函數(shù)()代替直接執(zhí)行。

這樣,java的權(quán)限認(rèn)證就和用戶的業(yè)務(wù)邏輯分離了。

//一段典型的代碼如下

LoginContext lc = new LoginContext("MyExample");

try {

lc.login();

} catch (LoginException) {

// Authentication failed.

}

// Authentication successful, we can now continue.

// We can use the returned Subject if we like.

Subject sub = lc.getSubject();

Subject.doAs(sub, new MyPrivilegedAction());

3.2Kerberos認(rèn)證協(xié)議

Kerberos是一種網(wǎng)絡(luò)認(rèn)證協(xié)議,其設(shè)計(jì)目標(biāo)是通過密鑰系統(tǒng)為客戶機(jī) / 服務(wù)器應(yīng)用程序提供強(qiáng)大的認(rèn)證服務(wù)。

簡(jiǎn)單介紹

使用Kerberos時(shí),一個(gè)客戶端需要經(jīng)過三個(gè)步驟來獲取服務(wù):

認(rèn)證:客戶端向認(rèn)證服務(wù)器發(fā)送一條報(bào)文,并獲取一個(gè)含時(shí)間戳的Ticket-Granting Ticket(TGT)。

授權(quán):客戶端使用TGT向Ticket-Granting Server(TGS)請(qǐng)求一個(gè)服務(wù)Ticket。

服務(wù)請(qǐng)求:客戶端向服務(wù)器出示服務(wù)Ticket,以證實(shí)自己的合法性。該服務(wù)器提供客戶端所需服務(wù),在Hadoop應(yīng)用中,服務(wù)器可以是namenode或jobtracker。

為此,Kerberos需要The Key Distribution Centers(KDC)來進(jìn)行認(rèn)證。KDC只有一個(gè)Master,可以帶多個(gè)slaves機(jī)器。slaves機(jī)器僅進(jìn)行普通驗(yàn)證。Mater上做的修改需要自動(dòng)同步到slaves。

另外,KDC需要一個(gè)admin,來進(jìn)行日常的管理操作。這個(gè)admin可以通過遠(yuǎn)程或者本地方式登錄。

4.Hadoop ?Kerberos安全機(jī)制安裝

安裝這里就不講解了,網(wǎng)上資料一大堆

5.kerberos安裝后,hbase客戶端鏈接的變化

5.1 客戶端鏈接kerberos的準(zhǔn)備

一臺(tái)機(jī)器叫hbaseclient.com,首先在其上安裝kerberos客戶端,安裝后連接kadmin工具創(chuàng)建用戶test,并生成keytab文件

kinit admin/admin

kadmin: addprinc -randkey test

kadmin: xst -k test.keytab test

5.2 未安裝kerberos之前,hbase客戶端鏈接代碼

public class Test1 {

public static void main(String[] args) throws IOException {

Configuration conf = HBaseConfiguration.create();

conf.set("hbase.zookeeper.quorum", "zookeeperserver1,zookeeperserver2,zookeeperserver3");

conf.set("hbase.zookeeper.property.clientPort", "2181");

HTable t = new HTable(conf, "test");

Scan s = new Scan();

ResultScanner rs = t.getScanner(s);

try{

for(Result r:rs){

for(Cell cell:r.rawCells()){

System.out.println("Row: "+new String(CellUtil.cloneRow(cell)));

System.out.println("CF: "+new String(CellUtil.cloneFamily(cell)));

System.out.println("Qualifier: "+new String(CellUtil.cloneQualifier(cell)));

System.out.println("Value: "+new String(CellUtil.cloneValue(cell)));

}

}

}finally{

t.close();

}

System.out.println("Done!");

}

5.3 安裝kerberos之后,hbase客戶端鏈接代碼

public class Test1 {

public static void main(String[] args) throws IOException {

Configuration conf = HBaseConfiguration.create();

conf.set("hbase.zookeeper.quorum", "zookeeperserver1,zookeeperserver2,zookeeperserver3");

conf.set("hbase.zookeeper.property.clientPort", "2181");

conf.set("hadoop.security.authentication", "kerberos");

UserGroupInformation.setConfiguration(conf);

UserGroupInformation.loginUserFromKeytab("hbaseclient.com", "/home/test/test.keytab");

HTable t = new HTable(conf, "test");

Scan s = new Scan();

ResultScanner rs = t.getScanner(s);

try{

for(Result r:rs){

for(Cell cell:r.rawCells()){

System.out.println("Row: "+new String(CellUtil.cloneRow(cell)));

System.out.println("CF: "+new String(CellUtil.cloneFamily(cell)));

System.out.println("Qualifier: "+new String(CellUtil.cloneQualifier(cell)));

System.out.println("Value: "+new String(CellUtil.cloneValue(cell)));

}

}

}finally{

t.close();

}

System.out.println("Done!");

}

6.spring-data-hadoop中如何使用kerberos

6.1 kerberos安裝之前配置

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:hdp="http://www.springframework.org/schema/hadoop"

xmlns:beans="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/hadoop

http://www.springframework.org/schema/hadoop/spring-hadoop.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.1.xsd">

fs.defaultFS=hdfs://master:9000/

6.2 kerberos安裝之后配置

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:hdp="http://www.springframework.org/schema/hadoop"

xmlns:beans="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/hadoop

http://www.springframework.org/schema/hadoop/spring-hadoop.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.1.xsd">

fs.defaultFS=hdfs://master:9000/

hadoop.security.authentication=kerberos

hadoop.security.authorization=true

keyTab=/home/test/test.keytab

principal=hbaseclient.com

7.以上配置是參見hadoop-common-2.6.0.jar中源碼org.apache.hadoop.security.UserGroupInformation.java得知

8.參考資料

總結(jié)

以上是生活随笔為你收集整理的hbase1.1.1 连接集群_Hadoop2.7.1+Hbase1.1.2集群环境搭建(10) hadoop hbase kerberos的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。