2010-08-11 3 views
0

Comment demander des bibliothèques externes lors de l'exécution de travaux de diffusion en continu Amazon EMR écrits en Ruby?Utilisation de bibliothèques externes dans les scripts de diffusion en continu Ruby pour Amazon EMR

J'ai défini mon cartographe, et je reçois cette sortie dans mes journaux:

/mnt/var/lib/hadoop/mapred/taskTracker/jobcache/job_201008110139_0001/attempt_201008110139_0001_m_000000_0/work/./mapper_stage1 .rb: ligne 1: require: command not found

Ma première réaction est que ce soit le pot de streaming ne réalise pas que son exécution d'un script Ruby (j'ai une déclaration de tralala en haut de la script pointant vers/usr/bin/ruby) ou qu'il y a quelque chose de funky dans la façon dont l'API de streaming traite du référencement des bibliothèques externes.

Merci d'avance!

Isaac

+0

semble ne pas être exécuté par ruby. Vous pourriez essayer d'ajouter quelque chose comme RUBY_VERSION en haut ... – rogerdpack

+0

C'est exactement ce que le problème était - il exécutait mon script ruby ​​à travers sh. Résoudre ce problème particulier en déclarant explicitement un interpréteur ruby ​​lors de l'exécution du travail à partir de l'outil de ligne cms (ie: --mapper 'ruby s3: //mybucket/mymapper.rb Je vais le mettre à jour quand je le ferai fonctionner avec succès - – isparling

+2

Si vous utilisez '#!/usr/bin/env ruby', le script s'exécutera en utilisant le premier interpréteur ruby ​​trouvé sur le PATH. –

Répondre

0

Actuellement Amazon Elastic MapReduce,/usr/bin/ruby ​​est un lien symbolique pointant vers /usr/bin/ruby1.8. C'est un interprète dangereux à utiliser, car il est ancien et buggé.

$ /usr/bin/ruby -v 
ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux] 

Si vous utilisez une des instances de 64 bits (comme m1.xlarge) vous pouvez installer Ruby Enterprise Edition dans une action d'amorçage. Cela va dans/usr/local/bin qui a une priorité de résolution de chemin plus élevée que le stock Ruby1.8, donc service-nanny (qui shebangs/usr/bin/ruby) fonctionne encore, alors que vos scripts peuvent fonctionner sur un interpréteur qui a été construit en 2011, avec un niveau de patch beaucoup plus élevé.

Questions connexes