Comment spécifier le nom d'utilisateur lors de la mise de fichiers sur HDFS à partir d'une machine distante
J'ai une configuration de cluster Hadoop et travaille sous un nom d'utilisateur par défaut commun "user1". Je veux mettre des fichiers dans hadoop à partir d'une machine distante qui ne fait pas partie du cluster hadoop. J'ai configuré les fichiers hadoop sur la machine distante d'une manière que lorsque
hadoop dfs -put file1 ...
Est appelé depuis la machine distante, il place le fichier1 sur le cluster Hadoop.
Le seul problème est que je suis connecté en tant que "user2" sur la machine distante et cela ne me donne pas le résultat que j'attends. En fait, ce qui précède le code ne peut être exécuté sur la machine distante que:
hadoop dfs -put file1 /user/user2/testFolder
Cependant, ce que je veux vraiment, c'est pouvoir stocker le fichier comme:
hadoop dfs -put file1 /user/user1/testFolder
Si j'essaie d'exécuter le dernier code, hadoop lance une erreur en raison des autorisations d'accès. Y a-t-il de toute façon que je peux spécifier le nom d'utilisateur dans la commande hadoop dfs?
Je cherche quelque chose comme:
hadoop dfs -username user1 file1 /user/user1/testFolder
Merci
4 réponses
Par défaut, l'authentification et l'autorisation sont désactivées dans Hadoop. Selon le Hadoop-le guide définitif (btw, beau livre - recommande de l'acheter)
L'identité de L'utilisateur utilisée par Hadoop pour les autorisations dans HDFS est déterminée en exécutant la commande whoami sur le système client. De même, les noms de groupes sont dérivés de la sortie des groupes en cours d'exécution.
Ainsi, vous pouvez créer une nouvelle commande whoami
qui renvoie le nom d'utilisateur requis et mettez-le dans le chemin de manière appropriée, de sorte que le whoami créé soit trouvé avant que le whoami réel fourni avec Linux ne soit trouvé. De même, vous pouvez également jouer avec la commande groups
.
Ceci est un hack et ne fonctionnera pas une fois l'authentification et l'autorisation activées.
Si vous utilisez la variable env HADOOP_USER_NAME, vous pouvez indiquer à HDFS quel nom d'Utilisateur utiliser. Notez que cela ne fonctionne que si votre cluster n'utilise pas de fonctionnalités de sécurité (par exemple Kerberos). Par exemple:
HADOOP_USER_NAME=hdfs hadoop dfs -put ...
Cela peut ne pas avoir d'importance pour personne, mais j'utilise un petit hack pour cela.
J'exporte le HADOOP_USER_NAME dans .bash_profile, de sorte que chaque fois que je me connecte, l'utilisateur est défini.
Ajoutez simplement la ligne de code suivante à .bash_profile:
export HADOOP_USER_NAME=<your hdfs user>
Il y a un autre post avec quelque chose de similaire à ceci qui pourrait vous fournir un travail autour de vous en utilisant le streaming via ssh:
cat file.txt | ssh user1@clusternode "hadoop fs -put - /path/in/hdfs/file.txt"
Voir mettre un fichier distant dans hadoop sans la copier sur le disque local pour plus d'informations