2012-09-11 21 views
10

Estoy intentando configurar Hadoop en mi máquina con Windows 7. Soy capaz de iniciar nodo de nombre y otros servicios, pero como estoy corriendo un ejemplo que viene con el paquete de Hadoop (versión 1.0.3), siguiente error está llegando:Configuración de Hadoop en Windows a través de Cygwin

bin/hadoop: line 320 : C:\Program: Command not found. 

Me corrió el ejemplo con la siguiente comando:

bin/hadoop jar hadoop-examples-1.0.3.jar pi 10 

me abrió este archivo hadoop en la que está llegando error y encontró que en la línea 320 se está generando un camino:

JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} ${JAVA} -Xmx32m ${HADOOP_JAVA_PLATFORM_OPTS} org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"` 

Así que estoy sintiendo que el problema podría estar en esta variable JAVA ya que Cygwin usa diferentes convenciones para el nombre de ruta. ¿Alguien ha enfrentado este problema o sabe qué está causando el problema?

Respuesta

23

Resumen rápido:

  • El guión hadoop golpe bajo (path)/bin/hadoop en realidad tiene un error en ella. El script asume que ninguno de los archivos/rutas que hadoop necesita tendrá espacios en ellos. Bueno, para cualquier cosa de Windows, todos tendrán un espacio en alguna parte, ya que "Archivos de programa" tiene espacio.

detalles

Este es un asunto difícil ... me encontré con el mismo problema y me tomó un tiempo para arreglar.

Primero, el problema: la configuración de variables de entorno a través de scripts puede ser incompleta cuando hay espacios en las rutas de acceso/nombres (lo cual ocurre bastante a menudo en los sistemas que no son * nix actualmente).

A continuación, es probable dos lugares donde se necesita para solucionar el problema:

  1. En su script (path)/conf/hadoop-env.sh, que debería ser la creación del guión JAVA_HOME, y debe ser algo como:

    export JAVA_HOME=/cygdrive/c/"Program Files"/Java/jdk1.7.0_06 
    

    (Observe que hay entre comillas el "archivos de programa", por lo que se reconoce como un elemento único. no se puede u se el carácter de escape \ porque cygwin hace algunos ajustes de las rutas de Windows a UNIX, por lo que el \ no puede actuar como escape.

  2. En su script (path)/bin/hadoop, la línea 320 está escrito probablemente algo como lo siguiente:

    JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} ${JAVA} -Xmx32m ${HADOOP_JAVA_PLATFORM_OPTS} org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"` 
    

    Usted tendrá que cambiarlo a su lugar decir:

    JAVA_PLATFORM=`CLASSPATH="${CLASSPATH}" "${JAVA}" -Xmx32m ${HADOOP_JAVA_PLATFORM_OPTS} org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"` 
    

    Tenga en cuenta que he añadido la cita marcas alrededor de las variables de entorno ${CLASSPATH} y ${JAVA}. Al poner las comillas alrededor, está diciendo que "todo el conjunto de caracteres especificado por esta variable debe considerarse un objeto de cadena".


bien, ahora si es que quiere entender por qué esto está ocurriendo y lo que está pasando, el problema es que su JDK es probable que almacena en "Archivos de programa", o tal vez en "Archivos de programa (x86) ", los cuales tienen espacios dentro de la ruta. Todas las demás variables de entorno que Hadoop necesita no dependen de nada dentro de la ruta de "Archivos de programa". Entonces es por eso que solo ves el error marcado. Todas las otras variables de entorno que faltan las comillas simplemente no tienen espacios dentro de ellas.

+0

Te amo Mike: D Gracias! –

+0

@AntonBelev aww ... ¡NUNCA estoy acostumbrado a comentarios tan brillantes de ningún tablero de mensajes! Solo voy a mostrar lo genial que es la gente en StackExchange, supongo. :) –

+0

Realmente no puedo creer que lo hagan tan difícil. ¿Esto es para mantener a los no iniciados (como yo) lejos del sacerdocio de Hadoop? ¡Nunca he conocido un programa tan difícil de configurar! –

0

Estos son fragmentos, el error fue: comando hadoop.util.Platform no encontrado

  • "CLASSPATH=cygpath -p "$CLASSPATH" distribución, produjo el error
  • "CLASSPATH=cygpath -p -w "$CLASSPATH" añadido bandera ventanas, produjo el error
  • "CLASSPATH=cygpath -wp "$CLASSPATH"problema resuelto

Esto estaba en Vista.

Cuestiones relacionadas