解析Hadoop 的集群管理與安全機制

jopen 9年前發布 | 19K 次閱讀 Hadoop 分布式/云計算/大數據

當前大一點的公司都采用了共享Hadoop集群的模式,這種模式可以減小維護成本,且避免數據過度冗余,增加硬件成本。共享集群類似于云計算或者云存儲,面臨的一個最大問題是安全。本文就對Hadoop 的集群管理與安全機制進行講解。

HDFS數據管理

1、設置元數據與數據的存儲路徑,通過

dfs.name.dir,dfs.data.dir,fs.checkpoint.dir(hadoop1.x)、

hadoop.tmp.dir,dfs.namenode.name.dir,dfs.namenode.edits.dir,dfs.datanode.data.dir(hadoop2.x)等屬性來設置;

2、經常執行HDFS文件系統檢查工具FSCK,eg:hdfs fsck /liguodong -files -blocks;

 解析Hadoop 的集群管理與安全機制

 

3、一旦數據發生異常,可以設置NameNode為安全模式,這時NameNode為只讀模式;

操作命令:hdfs dfsadmin -safemode enter | leave | get | wait

 解析Hadoop 的集群管理與安全機制

 

4、每一個DataNode都會運行一個數據掃描線程,它可以檢測并通過修復命令來修復壞塊或丟失的數據塊,通過屬性設置掃描周期;

dfs.datanode.scan.period.hourses, 默認是504小時。

MapReduce作業管理

查看Job信息:mapred job -list;

殺死Job:mapred job -kill;

查看指定路徑下的歷史日志匯總:mapred job -history output-dir;

打印map和reduce完成的百分比和所有計數器:mapred job -status job_id;

 解析Hadoop 的集群管理與安全機制

 

Hadoop集群安全

Hadoop自帶兩種安全機制:Simple機制、Kerberos機制

1、Simple機制:

Simple機制是JAAS協議與delegation token結合的一種機制,JAAS(Java Authentication and Authorization Service)java認證與授權服務;

(1)用戶提交作業時,JobTracker端要進行身份核實,先是驗證到底是不是這個人,即通過檢查執行當前代碼的人與JobConf中的user.name中的用戶是否一致;

(2)然后檢查ACL(Access Control List)配置文件(由管理員配置)看你是否有提交作業的權限。一旦你通過驗證,會獲取HDFS或者mapreduce授予的delegation token(訪問不同模塊有不同的delegation token),之后的任何操作,比如訪問文件,均要檢查該token是否存在,且使用者跟之前注冊使用該token的人是否一致。

2、Kerberos機制:

Kerberos機制是基于認證服務器的一種方式;

 解析Hadoop 的集群管理與安全機制

 



Princal(安全個體):被認證的個體,有一個名字和口令;

KDC(key distribution center):是一個網絡服務,提供ticket和臨時會話密鑰;

Ticket:一個記錄,客戶用它來向服務器證明自己的身份,包括客戶標識、會話密鑰、時間戳;

AS(Authentication Server):認證服務器;

TSG(Ticket Granting Server):許可認證服務器;

 解析Hadoop 的集群管理與安全機制

 



(1)Client將之前獲得TGT和要請求的服務信息(服務名等)發送給KDC,

KDC中的Ticket Granting Service將為Client和Service之間生成一個Session Key用于Service對Client的身份鑒別。

然后KDC將這個Session Key和用戶名,用戶地址(IP),服務名,有效期, 時間戳一起包裝成一個Ticket(這些信息最終用于Service對Client的身份鑒別)發送給Service,

不過Kerberos協議并沒有直接將Ticket發送給Service,而是通過Client轉發給Service,所以有了第二步。

(2)此時KDC將剛才的Ticket轉發給Client。

由于這個Ticket是要給Service的,不能讓Client看到,所以KDC用協議開始前KDC與Service之間的密鑰將Ticket加密后再發送給Client。

同時為了讓Client和Service之間共享那個密鑰(KDC在第一步為它們創建的Session Key),

KDC用Client與它之間的密鑰將Session Key加密隨加密的Ticket一起返回給Client。

(3)為了完成Ticket的傳遞,Client將剛才收到的Ticket轉發到Service。

由于Client不知道KDC與Service之間的密鑰,所以它無法算改Ticket中的信息。

同時Client將收到的Session Key解密出來,然后將自己的用戶名,用戶地址(IP)打包成Authenticator用Session Key加密也發送給Service。

(4)Service 收到Ticket后利用它與KDC之間的密鑰將Ticket中的信息解密出來,從而獲得Session Key和用戶名,用戶地址(IP),服務名,有效期。

然后再用Session Key將Authenticator解密從而獲得用戶名,用戶地址(IP)將其與之前Ticket中解密出來的用戶名,用戶地址(IP)做比較從而驗證Client的身份。

(5)如果Service有返回結果,將其返回給Client。

Hadoop集群內部使用Kerberos進行認證

好處:

可靠:Hadoop本身并沒有認證功能和創建用戶組功能,使用依靠外圍的認證系統;

高效:Kerberos使用對稱鑰匙操作,比SSL的公共密鑰快;

操作簡單:用戶可以方便進行操作,不需要很復雜的指令。比如廢除一個用戶只需要從Kerbores的KDC數據庫中刪除即可。

HDFS安全

1、Client獲取namenode初始訪問認證(使用kerberos)后,會獲取一個delegation token,這個token可以作為接下來訪問HDFS或提交作業的憑證;

2、同樣為了讀取某個文件,Client首先要與namenode交互,獲取對應block的block access token,

然后到相應的datanode上讀取各個block ,

而datanode在初始啟動向namenode注冊時候,已經提前獲取了這些token,

當client要從TaskTracker上讀取block時,首先驗證token,通過才允許讀取。

MapReduce安全

1、所有關于作業的提交或者作業運行狀態的追蹤均是采用帶有Kerberos認證的RPC實現的。

授權用戶提交作業時,JobTracker會為之生成一個delegation token,該token將被作為job的一部分存儲到HDFS上并通過RPC分發給各個TaskTracker,一旦job運行結束,該token失效。

2、用戶提交作業的每個task均是以用戶身份啟動的,這樣一個用戶的task便不可以向TaskTracker或者其他用戶的task發送操作系統信號,給其他用戶造成干擾。這要求為每個用戶在所有的TaskTracker上建一個賬號;

3、當一個map task運行結束時,它要將計算結果告訴管理它的TaskTracker,之后每個reduce task會通過HTTP向該TaskTracker請求自己要處理的那塊數據,Hadoop應該確保其他用戶不可以獲取map task的中間結果,

其執行過程是:reduce task對“請求URL”和“當前時間”計算HMAC-SHA1值,并將該值作為請求的一部分發動給TaskTracker,TaskTracker收到后會驗證該值的正確性。

本文來源:CSDN博客 翼宇軒

原文鏈接:http://blog.csdn.net/scgaliguodong123_/article/details/46523569

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!