Delegation Token

原創,轉載請註明出處

若設置了dfs.block.access.token.enable=true時,啓動時的日誌中:
會有這樣兩條日誌:
2013-02-21 19:59:07,006 INFO org.apache.hadoop.hdfs.server.blockmanagement.BlockManager: dfs.block.access.token.enable=true
2013-02-21 19:59:07,006 INFO org.apache.hadoop.hdfs.server.blockmanagement.BlockManager: dfs.block.access.key.update.interval=600 min(s), dfs.block.access.token.lifetime=600 min(s), dfs.encrypt.data.transfer.algorithm=null

啓用前:
2013-02-21 19:41:22,950 INFO org.apache.hadoop.hdfs.server.blockmanagement.BlockManager: dfs.block.access.token.enable=false

那麼dfs.block.access.token.enable作用是什麼呢:

根據Hadoop權威的解釋(此處我是翻譯的英文文檔):
Delegation Tokens(代理token)
在分佈式系統,如HDFS 或者MapReduce,會有很多客戶端和服務器之間的交互,這些交互都必須要進行認證,例如:在一個HDFS讀操作的過程中,需要多次調用namenode與datanode,
如果對每一次call,都使用三步式Kerberos認證,那麼無疑會增加很高的負載,。Hadoop使用代理token,這種token在生成之後,就不會再和kerberos中心進行交互。Delegation Tokens
有Hadoop代表用戶生成並使用,所以這裏不要你進行簽名認證。

一個Delegation Token,有NameNode產生,可以被認爲是一個在client與服務器之間共享的secret,在client與server之間的第一次RPC調用的時候,並沒有Delegation Token生成,所以它必須要經過kerberos進行認證,client會從namenode中獲得一個Delegation Token。

如果client想進行HDFS blocks進行操作,client會使用一個特殊的Delegation Token,叫做block access token。這個token是namenode在client進行metadata請求的時候,作爲給client的相應傳遞給client。client使用這個token來向datanode認證自己。這是可能是因爲namenode會和datanode之間共享這個token,所以這是Block就只能被持有這個token的客戶端進行訪問了,要啓用這token功能,需要設置dfs.block.access.token.enable =true。

在MapReduce中,JOB resource和metadata(比如JAR files,input splits,配置文件)都會在HDFS上進行共享,供jobtracker進行訪問。而用戶代碼運行在tasktracker,訪問HDFS上面的文件,這時候,Delegation Token會在Jobtrackers和tasktrackers之間共享。當job結束的時候,這個token就失效了。
Delegation Token 會爲HDFS實例自動獲得,但是如果你的job需要訪問其他的cluster,那麼你可以通過設置mapreduce.job.hdfs-servers 屬性,指向不同HDFS URL。


我的僞分佈環境中,並沒有配置kerberos,但是也不報錯。呵呵,試驗就到此爲止吧,安全的問題,以後再去研究。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章