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,但是也不报错。呵呵,试验就到此为止吧,安全的问题,以后再去研究。

你可能感兴趣的:(token)