7
votes

Obtenir le nom du fichier d'entrée dans le programme Hadoop en streaming

Je suis capable de trouver le nom si le fichier d'entrée dans une classe MAPER utilisant des fichiersPlit lors de la rédaction du programme en Java.

Y a-t-il un moyen correspondant de le faire lorsque j'écris un programme en Python (en utilisant le streaming?)

J'ai trouvé ce qui suit dans le document Streaming Hadoop sur Apache:

voir les paramètres configurés. Lors de l'exécution d'un emploi en streaming, Les noms des paramètres «Mapred» sont transformés. Les points ( . ) devenir des traits de soulignement (_). Par exemple, mapred.job.id devient mapred_job_id et mapred.jar devient mapred_jar. Dans votre code, utilisez le Noms de paramètres avec les traits de soulignement.

Mais je ne peux toujours pas comprendre comment utiliser cela à l'intérieur de mon mappeur.

Toute aide est très appréciée.

merci


0 commentaires

3 Réponses :


8
votes

Selon le "Hadoop: le guide définitif"

Hadoop définit les paramètres de configuration de travail comme variables d'environnement pour les programmes de diffusion en continu. Cependant, il remplace le caractère non alphanumérique avec des sous-traitants pour s'assurer qu'ils sont des noms valides. L'expression Python suivante illustre comment vous pouvez récupérer la valeur de la propriété Mapred.job.Id à partir d'un script de streaming Python:

os.environ ["mapred_job_id"]

Vous pouvez également définir des variables d'environnement pour le processus de diffusion de flux lancé par MapReduce en appliquant l'option -cmdenv au programme de lancement en continu (une fois pour chaque variable que vous souhaitez définir). Par exemple, le suivant définit la variable de l'environnement MAGIC_PARAMETER:

-cmdenv magic_parameter = Abracadabra


2 commentaires

On dirait que la propriété Krishnamutry a besoin est appelée "map.input.file" - qui apparaîtra probablement comme une variable d'environnement "map_input_file" pour diffuser du travail en continu.


Remarque: les périodes doivent être remplacées par des traits de soulignement



0
votes

Le nouvel env_Variable pour Hadoop 2.x est mapreduce_map_input_file


1 commentaires

Vous devez utiliser des minuscules 'Mapreduce_map_input_file'



6
votes

En analysant le mapReuce_map_input_file (nouveau) ou map_input_file (déprécié) variable d'environnement, vous obtiendrez le nom du fichier de saisie de la carte.

AVIS:
Les deux variables d'environnement sont sensibles à la casse toutes les lettres sont minuscules .


1 commentaires

map_input_file fonctionne pour hadoop 0.20.x pour toute personne coincée sur un ancien cluster