bash - setup - how to make cluster in hadoop
Trabajando con Hadoop: localhost: Error: JAVA_HOME no está configurado (11)
Estoy trabajando con Ubuntu 12.04 LTS.
Repaso el manual de inicio rápido de hadoop para hacer una operación pseudo distribuida. Parece simple y directo (¡fácil!).
Sin embargo, cuando intento ejecutar start-all.sh
obtengo:
localhost: Error: JAVA_HOME is not set.
He leído todos los otros consejos sobre stackoverflow para este problema y he hecho lo siguiente para asegurarme de que JAVA_HOME
esté configurado:
En /etc/hadoop/conf/hadoop-env.sh
, he establecido
JAVA_HOME=/usr/lib/jvm/java-6-oracle
export JAVA_HOME
En /etc/bash.bashrc
, he establecido
JAVA_HOME=/usr/lib/jvm/java-6-oracle
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
which java
devuelve:
/usr/bin/java
java –version
works
echo $JAVA_HOME
devuelve:
/usr/lib/jvm/java-6-oracle
Incluso he tratado de convertirme en root y escribir explícitamente en la terminal:
$ JAVA_HOME=/usr/lib/jvm/java-6-oracle
$ export JAVA_HOME
$ start-all.sh
Si pudiera mostrarme cómo resolver este error, sería muy apreciado. Estoy pensando que mi JAVA_HOME
está siendo anulado de alguna manera. Si ese es el caso, ¿podría explicarme cómo hacer que mis exportaciones sean globales?
Cambie la variable JAVA_HOME
en conf/hadoop-env.sh
export JAVA_HOME=/etc/local/java/<jdk folder>
Compruebe si sus alternativas apuntan a la correcta, en realidad podría estar apuntando a una versión diferente e intentando alterar el hadoop-env.sh en otra versión instalada.
-alternatives --install / etc / hadoop / conf [generic_name] [su ruta de acceso correcta] prioridad {para ver más página de manual de alternativas}
para establecer alternativas manualmente,
alternativas --set [nombre genérico] [su ruta actual].
Este error viene de la línea 180
if [[ -z $JAVA_HOME ]]; then
echo "Error: JAVA_HOME is not set and could not be found." 1>&2
exit 1
fi
en libexec/hadoop-config.sh
.
Pruebe echo $JAVA_HOME
en ese script. Si no reconoce,
Encuentra tu JAVA_HOME
usando esto:
$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
y reemplaza la linea
export JAVA_HOME=${JAVA_HOME}
en /etc/hadoop/hadoop-env.sh
con JAVA_HOME que /etc/hadoop/hadoop-env.sh
del comando anterior.
Estoy usando hadoop 1.1, también me enfrenté a este problema.
Cambié la variable JAVA_HOME en conf / hadoop-env.sh
export JAVA_HOME=/etc/local/java/<jdk folder>
ahora funciona
Independientemente de Debian o cualquier sabor de Linux, solo ~/.bash_profile
saber que ~/.bash_profile
pertenece a un usuario específico y no abarca todo el sistema. en un entorno pseudo-distribuido, hadoop funciona en localhost
por lo que $JAVA_HOME
en .bash_profile ya no sirve.
solo exporte JAVA_HOME en ~/.bashrc
y ~/.bashrc
todo el sistema.
La forma de depurar esto es poner un "echo $ JAVA_HOME" en start-all.sh. ¿Estás ejecutando tu entorno de hadoop con un nombre de usuario diferente o como tú mismo? Si es lo primero, es muy probable que la variable de entorno JAVA_HOME no esté configurada para ese usuario.
El otro problema potencial es que ha especificado JAVA_HOME incorrectamente, y el valor que ha proporcionado no apunta a un JDK / JRE. Tenga en cuenta que "which java" y "java -version" funcionarán, incluso si JAVA_HOME está configurado incorrectamente.
La forma de resolver este problema es exportar la variable JAVA_HOME dentro del archivo conf / hadoop-env.sh.
No importa si ya exportó esa variable en ~ / .bashrc, aún mostrará el error.
Por lo tanto, edite conf / hadoop-env.sh y elimine el comentario de la línea "export JAVA_HOME" y agregue una ruta adecuada al sistema de archivos, es decir, la ruta a su Java JDK.
# La implementación de Java a usar. Necesario.
exportar JAVA_HOME = "/ ruta / a / java / JDK /"
Se encontró con el mismo problema en ubuntu LTS 16.04. La ejecución de bash -vx ./bin/hadoop
mostró que probaba si java era un directorio. Así que cambié JAVA_HOME a una carpeta y funcionó.
++ [[ ! -d /usr/bin/java ]]
++ hadoop_error ''ERROR: JAVA_HOME /usr/bin/java does not exist.''
++ echo ''ERROR: JAVA_HOME /usr/bin/java does not exist.''
ERROR: JAVA_HOME /usr/bin/java does not exist.
Así que cambié JAVA_HOME en ./etc/hadoop/hadoop-env.sh
para
export JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre/
y hadoop comienza bien. Esto también se menciona en este article .
También me he enfrentado al problema similar en hadoop 1.1. No había notado que JAVA_HOME
se comentó en: hadoop/conf/hadoop-env.sh
Era
/#JAVA_HOME=/usr/lib/jvm/java-6-oracle
Tuve que cambiarlo a
JAVA_HOME=/usr/lib/jvm/java-6-oracle
extracto de etc / hadoop / hadoop-env.sh
La única variable de entorno requerida es JAVA_HOME. Todos los demás son opcionales. Cuando se ejecuta una configuración distribuida, es mejor configurar JAVA_HOME en este archivo, para que esté correctamente definido en los nodos remotos.
Esto significa que es mejor y se recomienda establecer JAVA_HOME aquí ... aunque la definición existente lea la variable JAVA_HOME. Tal vez no obtenga el valor de JAVA_HOME del valor establecido previamente ... el manual estándar de apache no dice esto :( :(
echo "export JAVA_HOME=/usr/lib/java" >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh
Aviso: No use export JAVA_HOME=${JAVA_HOME}
!