我在使用以下命令从HDFS下载大文件夹时遇到一些问题:
hadoop fs -get /path/to/hdfs/big/folder .
该文件夹很大(差不多3TB),而且kerberos机票的使用寿命为10小时,可恢复寿命为7天。
下载需要10个多小时,因此我无法完成操作(kerberos安全例外)。有没有办法为get操作设置票证的自动续订?
答案 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