Ejecución de Apache Hadoop 2.1.0 en Windows

Soy nuevo en Hadoop y me he encontrado con problemas al tratar de ejecutarlo en mi máquina con Windows 7. En particular, estoy interesado en ejecutar Hadoop 2.1.0 ya que sus notas de lanzamiento mencionan que se admite ejecutar en Windows. Sé que puedo intentar ejecutar versiones 1.x en Windows con Cygwin o incluso usar VM preparada, por ejemplo, Cloudera, pero estas opciones son, en algunos casos, menos convenientes para mí.

Habiendo examinado un tarball de http://apache-mirror.rbc.ru/pub/apache/hadoop/common/hadoop-2.1.0-beta/ Descubrí que realmente hay algunos scripts * .cmd que se pueden ejecutar sin Cygwin . Todo funcionó bien cuando formateé la partición HDFS pero cuando traté de ejecutar hdfs namenode daemon me enfrenté a dos errores: primero, no fatal, era que winutils.exe no se podía encontrar (realmente no estaba presente en el tarball descargado). Encontré las fonts de este componente en el árbol de fonts de Apache Hadoop y lo compilé con Microsoft SDK y MSbuild. Gracias al mensaje de error detallado, quedó claro dónde colocar el ejecutable para satisfacer a Hadoop. Pero el segundo error que es fatal no contiene suficiente información para que lo resuelva:

13/09/05 10:20:09 FATAL namenode.NameNode: Exception in namenode join java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z at org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Native Method) at org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:423) at org.apache.hadoop.fs.FileUtil.canWrite(FileUtil.java:952) at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.analyzeStorage(Storage.java:451) at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverStorageDirs(FSImage.java:282) at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:200) ... 13/09/05 10:20:09 INFO util.ExitUtil: Exiting with status 1 

Parece que se debe comstackr algo más. Voy a intentar construir Hadoop desde la fuente con Maven, pero ¿no hay una manera más simple? ¿No hay alguna opción-I-know-not-of que pueda desactivar el código nativo y hacer que el tarball se pueda usar en Windows?

Gracias.

ACTUALIZADO. Sí, de hecho. El paquete “Homebrew” contenía algunos archivos adicionales, los más importantes son winutils.exe y hadoop.dll. Con estos archivos, namenode y datanode se iniciaron correctamente. Creo que la pregunta puede ser cerrada. No lo eliminé en caso de que alguien tenga la misma dificultad.

ACTUALIZADO 2. Para construir el paquete “homebrew” hice lo siguiente:

  1. Encontré fonts y las desempaqué.
  2. Lea cuidadosamente BUILDING.txt.
  3. Dependencias instaladas:
    3a) Windows SDK 7.1
    3b) Maven (utilicé 3.0.5) 3c) JDK (utilicé 1.7.25)
    3d) ProtocolBuffer (utilicé 2.5.0 – http://protobuf.googlecode.com/files/protoc-2.5.0-win32.zip ). Basta con poner el comstackdor (protoc.exe) en algunas de las carpetas de PATH.
    3e) Un conjunto de herramientas de línea de comandos de UNIX (instalé Cygwin)
  4. Comenzó la línea de comando de Windows SDK. Comience | Todos los progtwigs | Microsoft Windows SDK v7.1 | … Símbolo del sistema (modifiqué este acceso directo, agregué la opción / lanzamiento en la línea de comando para comstackr las versiones de lanzamiento del código nativo). Todos los próximos pasos se realizan desde la ventana de línea de comandos de SDK)
  5. Configura el ambiente:

    establecer JAVA_HOME = {path_to_JDK_root}

¡Parece que JAVA_HOME NO DEBE contener espacio!

 set PATH={path_to_maven_bin};%PATH% set Platform=x64 set PATH={path_to_cygwin_bin};%PATH% set PATH={path_to_protoc.exe};%PATH% 
  1. Se cambió el directorio a la carpeta raíz de las fonts (BUILDING.txt advierte que hay algunas limitaciones en la longitud de la ruta, por lo que la raíz de las fonts debe tener un nombre corto – He usado D: \ hds)
  2. Ran proceso de construcción:

    paquete mvn -Pdist -DskipTests

Puedes probar sin ‘skipTests’ pero en mi máquina algunas pruebas fallaron y la construcción finalizó. Puede estar relacionado con problemas de enlace simbólico mencionados en BUILDING .txt. 8. Elegido el resultado en hadoop-dist \ target \ hadoop-2.1.0-beta (los archivos ejecutables de windows y dlls están en la carpeta ‘bin’)

He seguido los siguientes pasos para instalar Hadoop 2.2.0

Pasos para comstackr la distribución de bin Hadoop para Windows

  1. Descargue e instale Microsoft Windows SDK v7.1.

  2. Descargue e instale la herramienta de línea de comandos de Unix Cygwin.

  3. Descargue e instale Maven 3.1.1.

  4. Descargue Protocol Buffers 2.5.0 y extráigalo a una carpeta (digamos c: \ protobuf).

  5. Agregue variables de entorno JAVA_HOME, M2_HOME y Platform si aún no se han agregado. Nota: El nombre de la variable Plataforma distingue entre mayúsculas y minúsculas. Y el valor será x64 o Win32 para construir en un sistema de 64 o 32 bits. Editar variable de ruta para agregar el directorio bin de Cygwin (digamos C: \ cygwin64 \ bin), el directorio bin de Maven (digamos C: \ maven \ bin) y la ruta de instalación de Buffers de protocolo (digamos c: \ protobuf).

  6. Descargue hadoop-2.2.0-src.tar.gz y extráigalo a una carpeta que tenga una ruta corta (digamos c: \ hdfs) para evitar problemas de tiempo de ejecución debido a la limitación máxima de la longitud de la ruta en Windows.

  7. Seleccione Inicio -> Todos los progtwigs -> Microsoft Windows SDK v7.1 y abra Windows SDK 7.1 Símbolo del sistema. Cambie el directorio a la carpeta de código fuente de Hadoop (c: \ hdfs). Ejecute el paquete mvn con opciones -Pdist, native-win -DskipTests -Dtar para crear la distribución tar de Windows.

  8. Si todo va bien en el paso anterior, se creará la distribución nativa hadoop-2.2.0.tar.gz dentro del directorio C: \ hdfs \ hadoop-dist \ target \ hadoop-2.2.0.

Instalar Hadoop

  1. Extraiga hadoop-2.2.0.tar.gz en una carpeta (digamos c: \ hadoop).

  2. Agregue la variable de entorno HADOOP_HOME y edite la variable de ruta para agregar el directorio bin de HADOOP_HOME (digamos C: \ hadoop \ bin).

Configurar Hadoop

C: \ hadoop \ etc \ hadoop \ core-site.xml

   fs.defaultFS hdfs://localhost:9000   

C: \ hadoop \ etc \ hadoop \ hdfs-site.xml

   dfs.replication 1   dfs.namenode.name.dir file:/hadoop/data/dfs/namenode   dfs.datanode.data.dir file:/hadoop/data/dfs/datanode   

C: \ hadoop \ etc \ hadoop \ mapred-site.xml

   mapreduce.framework.name yarn   

C: \ hadoop \ etc \ hadoop \ yarn-site.xml

   yarn.nodemanager.aux-services mapreduce_shuffle   yarn.nodemanager.aux-services.mapreduce.shuffle.class org.apache.hadoop.mapred.ShuffleHandler   

Formato namenode

Solo por primera vez, se debe formatear namenode.

 C:\Users\abhijitg>cd c:\hadoop\bin c:\hadoop\bin>hdfs namenode –format 

Inicie HDFS (Namenode y Datanode)

 C:\Users\abhijitg>cd c:\hadoop\sbin c:\hadoop\sbin>start-dfs 

Inicie MapReduce aka YARN (Administrador de Recursos y Administrador de Nodos)

 C:\Users\abhijitg>cd c:\hadoop\sbin c:\hadoop\sbin>start-yarn starting yarn daemons 

Se abrirán automáticamente cuatro ventanas de símbolo del sistema separadas para ejecutar Namenode, DataNode, Resource Manager, Node Manager

Referencia: comstackr, instalar, configurar y ejecutar Apache Hadoop 2.2.0 en el sistema operativo Microsoft Windows

Tuve el mismo problema pero con el reciente hadoop v. 2.2.0. Aquí están mis pasos para resolver ese problema:

  1. Construí winutils.exe de fonts. Directorio de proyectos:

    hadoop-2.2.0-src\hadoop-common-project\hadoop-common\src\main\winutils

    Mi sistema operativo: Windows 7. Herramienta para comstackr: MS Visual Studio Express 2013 para escritorio de Windows (es gratis y se puede cargar desde http://www.microsoft.com/visualstudio/ ). Open Studio, File -> Open -> winutils.sln . Haga clic derecho en la solución en el lado derecho -> Build . Hubo un par de errores en mi caso (es posible que deba corregir las propiedades del proyecto, especificar la carpeta de salida). ¡Viola! Obtiene winutils.exewinutils.exe en el contenedor de hadoop.

  2. Luego tenemos que construir hadoop.dll . Algo de magia woodoo aquí va: abierto

    hadoop-2.2.0-src\hadoop-common-project\hadoop-common\src\main\native\native.sln

    en MS VS; haga clic derecho en la solución -> comstackción. Tengo un montón de errores. Creé manualmente varios archivos de encabezado perdidos (¡no me pregunten por qué se pierden en el tarball fuente!):

    https://github.com/jerishsd/hadoop-experiments/tree/master/sources

    (y no me preguntes para qué sirve este proyecto en git! No lo sé – google lo señaló al buscar nombres de archivos de encabezado) He copiado

    hadoop-2.2.0-src\hadoop-common-project\hadoop-common\target\winutils\Debug\libwinutils.lib

    (resultado del paso # 1) en

    hadoop-2.2.0-src\hadoop-common-project\hadoop-common\target\bin

    ¡Y finalmente la operación de comstackción produce hadoop.dll! ¡Póngalo de nuevo en el contenedor de hadoop y felizmente ejecute namenode!

Espero que mis pasos ayuden a alguien.

Han preparó los binarios de Windows x64 de Hadoop 2.2 (ver su blog ) y los subió a Github .

Después de poner los dos binarios winutils.exe y hadoop.dll en la %hadoop_prefix%\bin , obtuve el mismo UnsatisfiedLinkError .

El problema era que faltaba alguna dependencia de hadoop.dll . Utilicé Dependency Walker para comprobar las dependencias de los binarios y faltaban los redistribuibles de Microsoft Visual C ++ 2010 .

Entonces, además de construir todos los componentes usted mismo, la respuesta al problema es

  • asegúrese de usar la misma architecture para Java y el código nativo. java -version le dice si usa 32 o x64.
  • luego use Dependency Walker para asegurarse de que todos los binarios nativos sean puros y de la misma architecture. A veces falta una dependencia x64 y Windows vuelve a x86, lo que no funciona. Ver la respuesta de otra pregunta .
  • también verifica si todas las dependencias de los binarios nativos están satisfechas.

Además de otras soluciones, aquí hay una copia precomstackda de winutil.exe. Descarguelo y agréguelo a $ HADOOP_HOME / bin. Esto funciona para mi.

(Fuente: haga clic aquí )

Agregue hadoop.dll (versión sensible) al directorio system32 en Directorio de Windows.

Puede obtener hadoop.dll en winutils

En lugar de usar la twig oficial, sugeriría las ventanas optimizadas

http://svn.apache.org/repos/asf/hadoop/common/branches/branch-trunk-win/

Debe comstackrlo, comstackr winutils.exe en Windows y colocarlo en el directorio hadoop / bin

Es posible que deba copiar los archivos hadoop.dll y winutils.exe de hadoop-common-bin a% HADOOP_HOME% \ bin Agregue% HADOOP_HOME% / bin a su variable% PATH%.

Puede descargar hadoop-common de https://github.com/amihalik/hadoop-common-2.6.0-bin

Me encontré con el mismo problema con Hadoop 2.4.1 en Windows 8.1; hubo algunas diferencias con la solución resultante causada principalmente por el sistema operativo más nuevo.

Primero instalé el binario Hadoop 2.4.1, desempaqueándolo en% HADOOP_HOME %.

Las respuestas anteriores describen cómo configurar Java, protobuf, cygwin y maven, y las variables de entorno necesarias. Tuve que cambiar mi variable de entorno de plataforma del valor impar de ‘BCD’ de HP.

Descargué la fuente de un espejo Apache y lo desempaqué en un directorio corto ( HADOOP_SRC = C: \ hsrc). Maven funcionó bien desde un símbolo del sistema estándar de Windows en ese directorio: paquete mvn -DskipTests .

En lugar de usar Windows 7 SDK (que no pude cargar) o Windows 8.1 SDK (que no tiene las herramientas de comstackción de línea de comandos), utilicé Microsoft Visual Studio Express 2013 gratis para Windows Desktop . La comstackción de Hadoop necesitaba la ubicación de MSBuild (C: \ Archivos de progtwig (x86) \ MSBuild \ 12.0) en el PATH, y requería que los diversos proyectos de origen nativos de Hadoop se actualizaran al formato más nuevo (MS VS 2013). Las fallas de generación de maven fueron lo suficientemente buenas como para señalar la ruta absoluta de cada proyecto ya que falló, lo que facilita la carga del proyecto en Visual Studio (que se convierte automáticamente, después de preguntar).

Una vez construido, copié los ejecutables y las bibliotecas nativas en el directorio bin de Hadoop. Se construyeron en% HADOOP_SRC % \ hadoop-common-project \ hadoop-common \ target \ bin, y deben copiarse en% HADOOP_HOME % \ bin.

Agregar hadoop.dll y hdfs.dll a la carpeta% HADOOP_HOME% \ bin me fue útil.

Acabo de instalar Hadoop 2.2.0 en mi entorno win7 X64.

El siguiente BUILD.txt me obliga a hacerlo. Tenga en cuenta que: el directorio en hdfs-site.xml y mapred-site.xml comienza con / me gusta a continuación

P.EJ

   dfs.namenode.name.dir file:/hadoop-2.2.0_1/dfs/name  true 

Puede ayudarte!

Descargue e instale Java en c:/java/

asegúrese de que la ruta sea así, si java está instalado en ‘archivos de progtwig’, entonces hadoop-env.cmd no reconocerá la ruta java

Descargue la distribución binaria de Hadoop.

Estoy usando la distribución binaria Hadoop-2.8.1. También recomendaría mantener la ruta de extracción lo más corta posible

Establecer variables de entorno:

 JAVA_HOME = "c:/Java" HADOOP_HOME="" Path= "JAVA_HOME/bin" Path = "HADOOP_HOME/bin" 

Hadoop funcionará en Windows si Hadoop-src se construye utilizando maven en su máquina de Windows. La construcción de Hadoop-src (distribución) creará una distribución binaria de Hadoop, que funcionará como versión nativa de Windows.

Pero si no quiere hacer eso, entonces descargue winutils of Hadoop distribution. Aquí hay un enlace de GitHub , que tiene winutils de algunas versiones de Hadoop.

si la versión que está utilizando no está en la lista, siga el método convencional para configurar Hadoop en Windows – enlace

Si encontró su versión, copie y pegue todo el contenido de la carpeta en la ruta: / bin /

Establezca todos los archivos de configuración .xml: enlace y establezca la ruta JAVA_HOME en el archivo hadoop-env.cmd

Desde cmd ve a:

 /bin/> hdfs namenode -format /sbin> start-all.cmd 

Espero que esto ayude.

  1. Obtenga los binarios de Hadoop (que incluyen winutils.exe y hadoop.dll )
  2. Asegúrese de que hadoop \ bin esté disponible a través de PATH (System PATH si lo ejecuta como un servicio)

    Tenga en cuenta que establecer java.library.path anula PATH . Si configura java.library.path , asegúrese de que sea correcto y apunte a la biblioteca hadoop.