2012-05-08 1 views
3

J'ai exécuté plusieurs tâches de réduction de mappage sur un cluster hadoop à partir d'un seul fichier JAR. La partie principale du fichier JAR accepte un fichier XML en tant que paramètre de ligne de commande. Le fichier XML contient les chemins d'entrée et de sortie pour chaque travail (paires de propriétés nom-valeur) et je les utilise pour configurer chaque travail mapreduce. Je suis en mesure de charger les chemins dans la configuration comme siAmazon EMR: Transmission d'un fichier XML ou d'un fichier de propriétés à un fichier JAR

Configuration config = new Configuration(false); 
    config.addResource(new FileInputStream(args[0])); 

Je suis maintenant en train d'exécuter le JAR à l'aide d'Amazon Elastic MapReduce. J'ai essayé de télécharger le fichier XML en S3 mais bien sûr en utilisant FileInputStream pour charger les données de chemins de S3 ne fonctionne pas (FileNotFound Exception).

Comment puis-je transmettre le fichier XML au JAR lors de l'utilisation de EMR?

(J'ai regardé les actions bootstrap mais pour autant que je sache, c'est pour spécifier des configurations spécifiques à hadoop).

Tout aperçu serait apprécié. Merci.

Répondre

4

Si vous ajoutez une action simple d'amorçage qui fait

hadoop fs -copyToLocal s3n://bucket/key.xml /target/path/on/local/filesystem.xml 

vous serez alors en mesure d'ouvrir un FileInputStream sur /target/path/on/local/filesystem.xml que vous aviez l'intention. L'action bootstrap est exécutée simultanément sur toutes les machines maître/esclave du cluster, de sorte qu'elles auront toutes une copie locale. Pour ajouter cette action d'amorçage, vous devez créer un fichier script shell contenant la commande ci-dessus, télécharger que vers S3 et le spécifier comme chemin d'action d'amorçage de script. Malheureusement, un script shell dans s3 est actuellement le seul type d'action bootstrap autorisé.

+0

Merci, je vais essayer –

+0

On dirait que cela a fonctionné. Je vous remercie!!! –

Questions connexes