Delegation Token

本文介绍了HDFS中Block Access Token的功能与实现原理。详细解释了如何通过设置dfs.block.access.token.enable=true启用Block Access 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,但是也不报错。呵呵,试验就到此为止吧,安全的问题,以后再去研究。
<think>嗯,用户问的是Hive的参数hive.cluster.delegation.token.store.class,我需要先理解这个参数的作用。Hive的安全机制涉及Delegation Token,这个参数应该和Token的存储方式有关。 首先,Hive在处理分布式任务时,比如提交到YARN,需要确保任务之间的安全通信。Delegation Token在这里起到认证的作用,避免频繁输入密码。而存储这些Token的方式由这个参数指定。 接下来,这个参数的默认值是什么?我记得Hive中有两种存储方式,一种是基于内存的,另一种是基于数据库或者ZooKeeper的。默认情况下,可能使用内存存储,比如org.apache.hadoop.hive.thrift.MemoryTokenStore。但如果在高可用或者需要持久化的环境中,可能会用ZooKeeper的实现类,比如ZKDelegationTokenStore。 然后,需要解释不同存储方式的适用场景。内存存储简单,但不适合集群环境,重启后Token会丢失。而ZK或者数据库存储则支持持久化和集群共享,适合生产环境。 用户可能是在配置Hive时遇到问题,或者想优化安全配置。需要说明如何根据集群环境选择合适的存储类,并给出配置示例,比如在hive-site.xml中设置参数。还要注意版本兼容性,不同Hive版本可能支持的类不同,提醒用户查阅对应文档。 最后,确认回答是否覆盖了参数的作用、默认值、可选值、配置方法和使用场景,确保用户能理解如何应用这个参数到实际配置中。</think>Hive 的 `hive.cluster.delegation.token.store.class` 参数是用于控制 **Hive Delegation Token(委托令牌)存储方式** 的核心配置项。以下是详细解释: --- ### **作用背景** - **Delegation Token 的作用** 在 Hadoop 生态中,Delegation Token 是 Kerberos 认证的轻量级替代机制,用于短期身份验证。Hive 在执行分布式任务(如提交到 YARN)时,需确保任务间通信的安全性。 - 例如:HiveServer2 向 YARN 提交任务时,需要 Delegation Token 证明身份,而无需反复输入密码。 - **为什么需要存储 Token** Token 需要持久化存储以支持: 1. Token 续订(Renewal) 2. 高可用场景下多 HiveServer2 实例共享 Token 3. 服务重启后 Token 恢复 --- ### **参数详解** - **功能定义** `hive.cluster.delegation.token.store.class` 指定 Delegation Token 的存储实现类。Hive 通过该配置决定如何持久化和管理 Token。 - **默认值** - **Hive 1.x/2.x**:默认使用基于内存的存储 `org.apache.hadoop.hive.thrift.MemoryTokenStore` (Token 存储在内存中,服务重启后丢失,仅适合测试环境)。 - **Hive 3.x+**:推荐使用 ZooKeeper 或数据库存储(如 `org.apache.hadoop.hive.thrift.ZooKeeperTokenStore`)。 - **常用可选值** | 实现类 | 存储方式 | 适用场景 | |-------------------------------------------|------------------|----------------------------| | `MemoryTokenStore` | 内存 | 开发/测试环境(无持久化) | | `ZooKeeperTokenStore` | ZooKeeper | 生产环境(高可用、持久化) | | `JdbcTokenStore` | 数据库(如 MySQL)| 生产环境(需外部数据库支持) | --- ### **配置方法** 在 `hive-site.xml` 中配置(以 ZooKeeper 为例): ```xml <property> <name>hive.cluster.delegation.token.store.class</name> <value>org.apache.hadoop.hive.thrift.ZooKeeperTokenStore</value> </property> <property> <name>hive.cluster.delegation.token.store.zookeeper.connectString</name> <value>zk_host1:2181,zk_host2:2181</value> <!-- ZooKeeper 地址 --> </property> ``` --- ### **注意事项** 1. **高可用场景** 若部署多 HiveServer2 实例,必须使用 ZooKeeper 或数据库存储,否则 Token 无法共享,导致任务失败。 2. **安全性** - ZooKeeper 需启用 ACL 和加密通信(如 SASL)。 - 数据库存储需配置连接池和权限控制。 3. **版本兼容性** Hive 3.x 默认推荐 ZooKeeper 存储,而 Hive 4.x 可能引入新实现类,需参考对应版本文档。 --- ### **总结** 通过 `hive.cluster.delegation.token.store.class`,Hive 实现了 Delegation Token 的灵活存储。生产环境中建议使用 ZooKeeper 或数据库存储,以确保 Token 持久化和高可用性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值