【问题标题】:i needed automatically creation of AD user directory in hdfs我需要在 hdfs 中自动创建 AD 用户目录
【发布时间】:2016-07-07 18:51:40
【问题描述】:

我的 CLoudera 5.7 安装程序已经与 Active Directory 集成,使用 AD integration 上所示的 kerberos。但问题是我必须在 HDFS @ /user 中为每个用户创建一个用户目录,以便为用户提供访问 hadoop 的权限。 一旦用户通过边缘节点登录,他们是否会自动在 hdfs 中创建用户目录?因为在集群上创建和删除超过 7000 名员工的用户目录非常困难。

【问题讨论】:

  • “创建和删除 7000 多名员工的用户目录非常困难” -- 很难,真的吗?!?使用ldapsearch 获取员工列表、使用hdfs dfs -ls 获取HDFS 主目录列表并创建所有缺少的主目录的shell 脚本怎么样?加上cron 计划定期刷新?

标签: hadoop cloudera


【解决方案1】:

您可以创建/etc/profile.d/hadoop.sh 脚本来自动化流程。创建 hadoop shell(即执行 hadoop 命令)时,将始终调用此脚本。

以下是示例。
第 1 步。将以下 scriptlet 添加到 /etc/profile.d/hadoop.sh

[root@mybox tmp]# tail -n 5 /etc/profile.d/hadoop.sh

if [[ "$FROM_HADOOP_PROFILE" != "1" ]] 
then
    /bin/bash -x /etc/profile.d/FromHadoopProf.sh
fi


第 2 步。创建 FromHadoopProf.sh 脚本为用户创建目录

[root@mybox tmp]# cat  /etc/profile.d/FromHadoopProf.sh
#!/bin/bash

export FROM_HADOOP_PROFILE=1
uname=`whoami`
hdir=""

if [[ "$uname" == "root" ]]
then
        hdir="/root"
else
        hdir="/user/$uname"
fi

hadoop fs -ls -d $hdir
lsout=`echo $?`
echo $lsout
if [[ "$lsout" != "0" ]]
then
      echo file does not exists
      sudo -u hdfs hadoop fs -mkdir $hdir
fi  


注意事项:

  1. 设置并检查 `FROM_HADOOP_PROFILE` 以避免递归无限调用/执行 `FromHadoopProf.sh`
  2. `/etc/profile.d/hadoop.sh` 也会在正常 shell 生成时被调用(例如,当用户登录机器时)
  3. 您可能需要为管理员用户权限添加一些技巧,例如在我的集群中,登录用户无权在 hadoop `/user/` 目录中创建目录,因此我必须使用 sudo 执行 `hadoop fs -mkdir $hdir`

【讨论】:

  • 感谢 shubhangi 的快速响应。但是为了在启用 kerberos 后创建用户,我们必须使用 kinit 为 hdfs 生成票证,这将销毁用户的票证,并且该用户将被授权为该会话的 hdfs 用户。我们已经尝试过这种方法,但我们无法实现目标,因为用户充当 hdfs 或者它必须具有 sudo 访问权限
  • @Prakul ,请确认我的回答是否符合您的目的。
  • @Prakul,你也可以使用KRB5CCNAME环境变量来临时切换Kerberos缓存,这样登录过程就有hdfs权限,但是用户得到了回报登录完成后他/她自己的权限。诀窍是防止用户对登录脚本进行逆向工程并出于恶意目的再次切换其凭据。
  • 抱歉延迟响应,是的,我们可以使用您的想法创建目录。我创建了一个 bash 脚本并根据我们的项目要求将其放入 /etc/profile.d 以进行自动化
  • 感谢 Prakul 的回复!
【解决方案2】:

我编写了以下脚本,用于在 hdfs 中为新的 AD 用户创建自动目录。

klist >/dev/null 2>&1
if [ $? == 0 ]
then
hadoop fs -test -d /user/$USER >/dev/null 2>&1
if [ $? != 0 ]
then
noOutput=`echo "password" | kinit hdfs`
hdfs dfs -mkdir /user/$USER
hdfs dfs -chmod -R 700 /user/$USER
hdfs dfs -chown -R $USER:$USER /user/$USER
kdestroy
echo "$(tput setaf 1)enter password for creating home directory on hdfs. This is one time activity$(tput sgr 0)"
kinit $USER
fi
fi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-04
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    相关资源
    最近更新 更多