2012-12-05 4 views
3

Je dois modifier LD_LIBRARY_PATH JAVA_LIBRARY_PATH et CLASSPATH avant d'exécuter le travail hadoop au niveau du cluster. Dans LD_LIBRARY_PATH et JAVA_LIBRARY_PATH j'ai besoin d'ajouter l'emplacement de certains jars qui sont requis lors de l'exécution du travail, Comme ces jars sont disponibles sur mon cluster, similaire à CLASSPATH. J'ai un cluster de 3 nœuds, j'ai besoin de modifier ce LD_LIBRARY_PATH et CLASSPATH pour tous les 3 nœuds de données de telle manière que les jars disponibles sur mon nœud de cluster soient ajoutés au classpath, afin que le jar suivant soit disponible pendant l'exécution le travail car j'évite la distribution de pot pendant l'exécution du travail pour utiliser tous les jar prêts disponibles sur les nœuds de cluster. J'ai essayé le ci-dessous les optionsModifier LD_LIBRARY_PATH JAVA_LIBRARY et CLASSPATH dans le travail hadoop

1.I ont essayé de modifier hadoop-env.sh modifier CLASSPATH

export HADOOP_TASKTRACKER_OPTS="-classpath:/opt/oracle/oraloader-2.0.0-2/jlib/ 

mais la chose ci-dessus modifier HADOOP_CLASSPATH pas le CLASSPATH

  1. Pour LD_LIBRARY_PATH et JAVA_LIBRARY_PATH j'ai fatigué d'ajouter la propriété ci-dessous donnée dans mapred-site.xml comme suggéré une ma place mais cela n'a pas fonctionné.

    < propriété>

    < name> mapred.child.env </name>

    valeur <> JAVA_LIBRARY_PATH =/opt/oracle/OraLoader-2.0.0-2/lib/</valeur >

    valeur <> LD_LIBRARY_PATH = $ LD_LIBRARY_PATH: /opt/oracle/oraloader-2.0.0-2/lib/ </valeur>

    < description> Variables d'environnement ajoutées par l'utilisateur pour les processus fils de la fonction de suivi des tâches. Exemple: 1) A = foo Cela va mettre la variable d'environnement A à foo 2) B = $ B: c C'est la variable d'environnement B de inherit tasktracker. </description>

    </property>

J'ai redémarré tous mes 3 nœuds de données, tous tasktrakers et 2 NAMENOdes. Cependant, ces variables ne sont pas définies et mon travail hadoop n'est pas capable de trouver tous les fichiers jar requis pour exécuter le test.

LOG ERREUR ::

Error: java.lang.ClassNotFoundException: oracle.i18n.text.OraDateFormat at java.net.URLClassLoader$1.run(URLClassLoader.java:202)

Quand je fais écho à mes HADOOP_CLASSPATH nœuds du cluster, tout le nécessaire pour l'exécution de travail de Hadoop viennent. Mais je pense que les jars suivants doivent être ajoutés dans JAVA_LIBRARY_PATH mais ça ne vient pas.

+0

Je ne sais pas pourquoi, mais votre question précédente à ce sujet, et ma réponse a été déplacée vers superutilisateur: http://superuser.com/questions/513221/modify-ld-library-path-and-classpath-on -cluster-node-before-running-a-hadoop-job –

+0

@ChrisWhite J'ai essayé la chose suivante, pour que ces jars soient disponibles pendant le travail. Pouvez-vous s'il vous plaît suggérer ce que je suis supposé faire pour résoudre ceci. –

Répondre

0

Ne pas réinventer la roue. Si votre implémentation utilise ToolRunner (que vous devriez vraiment utiliser si vous implémentez map-reduce en Java), vous pouvez utiliser -libjars jar1,jar2 pour envoyer vos fichiers jars au cluster.

Consultez la section "Side Data Distribution" dans "Hadoop: The definitive guide" de Tom White.

+0

HI Yevgen, Je pense que -libjars a copié le navire les pots à regrouper et sera copié dans le cache distribué car je ne veux pas envoyer le pot, à la place je veux utiliser des jars qui sont déjà présents aux nœuds du cluster EG : supposons que j'ai répertoire /dir1/dis2/* où tous les jars requis pour exécuter le travail hadoop sont présents dans les nœuds du cluster. Je veux ajouter des jarres au chemin de classe afin que ces pots soient disponibles. –

+0

@AshishSharma Copiez d'abord les fichiers jar sur HDFS et ajoutez-les au classpath de votre classe jobrunner via: http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/filecache/DistributedCache.html# addFileToClassPath% 28org.apache.hadoop.fs.Path,% 20org.apache.hadoop.conf.Configuration,% 20org.apache.hadoop.fs.FileSystem% 29 –

+0

@LorandBendig Je n'ai pas accès au code réel donc je ne peux pas t modifiez la classe que vous avez mentionnée. J'ai simplement une commande qui va exécuter le travail hadoop sur mon nœud de cluster. J'ai besoin d'ajouter quelques-uns des fichiers jar disponibles aux nœuds de cluster lors de l'exécution du travail hadoop. –

Questions connexes