Où est le classpath pour hadoop set? Lorsque je lance la commande ci-dessous, il me donne le classpath. Où est le classpath défini?
bin/hadoop classpath
J'utilise hadoop 2.6.0
Comme l'a dit Almas Shaikh, il est défini dans hadoop-config.sh
, mais vous pouvez ajouter d'autres bocaux dans hadoop-env.sh
Voici un code pertinent de hadoop-env.sh
qui ajoute des fichiers jar supplémentaires, tels que l'ordonnanceur de capacité et l'aws jar.
export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"}
# Extra Java CLASSPATH elements. Automatically insert capacity-scheduler.
for f in $HADOOP_HOME/contrib/capacity-scheduler/*.jar; do
if [ "$HADOOP_CLASSPATH" ]; then
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$f
else
export HADOOP_CLASSPATH=$f
fi
done
# ... some other lines omitted
# Add Aws jar
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:share/hadoop/tools/lib/*
Ouvrez votre profil bash (~/.profile
ou ~/.bash_profile
) pour le modifier et ajoutez ce qui suit:
HADOOP_HOME="/usr/local/Cellar/hadoop"
then Remplacez-le par votre propre chemin export HADOOP_CLASSPATH=$(find $HADOOP_HOME -name '*.jar' | xargs echo | tr ' ' ':')
Save les modifications et reload .
source ~/.profile
Lorsque vous exécutez la commande hadoop
, elle crée un fichier hadoop-config.sh
qui réside dans $HADOOP_HDFS_HOME/libexec
qui définit votre chemin de classe (CLASSPATH) en sélectionnant les fichiers JAR résidant dans différents répertoires, à savoir.
$HADOOP_HDFS_HOME/share/hadoop/mapreduce
$HADOOP_HDFS_HOME/share/hadoop/common
$HADOOP_HDFS_HOME/share/hadoop/hdfs etc.
Selon cet article de blog , il se trouve dans une variable d'environnement nommée HADOOP_CLASSPATH
. Vous pouvez le définir comme n'importe quelle autre variable d'environnement, dont les spécificités dépendent du shell que vous utilisez. Si vous utilisez bash
, vous pouvez appeler comme export HADOOP_CLASSPATH=/path/to/wherever:/path/to/wherever/else
.