Hadoop kerberos机票自动续订

时间:2017-04-03 15:51:31

标签: hadoop hdfs kerberos

我在使用以下命令从HDFS下载大文件夹时遇到一些问题:

hadoop fs -get /path/to/hdfs/big/folder .

该文件夹很大(差不多3TB),而且kerberos机票的使用寿命为10小时,可恢复寿命为7天。

下载需要10个多小时,因此我无法完成操作(kerberos安全例外)。有没有办法为get操作设置票证的自动续订?

2 个答案:

答案 0 :(得分:1)

“7天的可续订生命周期”表示您可以在不提供密码的情况下,明确更新故障单 7天;每次更新都会给你10小时的时间。

我知道一个与Linux捆绑在一起的自动续订(和自动重新创建)机制,它是SSSD的一部分。因此,如果您想将Linux auth委派给OpenLDAP或Microsoft AD服务,经过几周的调试(......如果您有幸成功的话......),您将拥有 - 可选 - 操作系统为您管理的Kerberos票证。

还有一个由Hadoop Kerberos库启动的自动续订线程,但它仅适用于连接前在缓存中找到的票证;如果您自己使用库(和密钥表)创建票证,那么它将无法再生 - Java的Kerberos实现无法正常处理的许多事情之一 - 并且必须是定期重新创建。

结论:您可以尝试这种技巧,在后台续订票证,直到您在传输完成后释放“锁定”。

touch lock.txt
kinit *************
{
  while [[ -f lock.txt ]]
  do
    kinit -R
    sleep 5m
  done
} &

hdfs dfs ***************
rm -f lock.txt
# backround process will terminate within 5m

答案 1 :(得分:1)

我解决了我的问题如下:

第1部分

#set the kerberos ticket cache location
export KRB5CCNAME=/tmp/my_krbtkt

#create a renewable ticket (10 hours lifetime + renewable for 7 days)
kinit -r7d -l10h

#execute the long time command 
hadoop fs -get /path/to/hdfs/big/folder .

第2部分

在crontab内安排kerberos机票更新(即每6小时):

0 */6 * * * kinit -R -c /tmp/my_krbtkt