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

30
demandé sur reza 2012-07-07 04:05:15

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.

11
répondu Praveen Sripati 2012-07-07 01:39:03

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 ...
72
répondu Derek Chen-Becker 2013-10-01 20:06:29

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>
12
répondu bioShark 2016-01-27 16:17:57

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

0
répondu Chris White 2017-05-23 11:46:47