web-dev-qa-db-fra.com

Comment spécifier le nom d'utilisateur lors de la mise des fichiers sur HDFS à partir d'une machine distante

J'ai une configuration de cluster Hadoop et je 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 de telle sorte 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 "utilisateur2" sur la machine distante et cela ne me donne pas le résultat que j'attends. En fait, le code ci-dessus ne peut être exécuté que sur la machine distante en tant que:

hadoop dfs -put file1 /user/user2/testFolder

Cependant, ce que je veux vraiment, c'est pouvoir stocker le fichier sous:

hadoop dfs -put file1 /user/user1/testFolder

Si j'essaie d'exécuter le dernier code, hadoop génère une erreur en raison des autorisations d'accès. Existe-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

31
reza

Par défaut, l'authentification et l'autorisation sont désactivées dans Hadoop. Selon le Hadoop - The Definitive Guide (btw, Nice book - recommanderait de l'acheter)

L'identité d'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 groupe 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 le placer dans le PATH de manière appropriée, de sorte que le whoami créé soit trouvé avant le whoami réel fourni avec Linux. De même, vous pouvez également jouer avec la commande groups.

Il s'agit d'un hack et ne fonctionnera pas une fois l'authentification et l'autorisation activées.

11
Praveen Sripati

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 ...
82

Cela n'a peut-être 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>
15
bioShark

Il y a un autre article avec quelque chose de similaire qui pourrait vous aider à utiliser 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 le copier sur le disque local pour plus d'informations

0
Chris White