¿Cómo instalar Hadoop?

26

Estoy tratando de instalar Hadoop en la versión Ubuntu 12.04. Siguiendo las instrucciones de http://michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/ , instalé java-6-openjdkdesde el centro de software de Ubuntu. Me he puesto java_homeen .bashrc. También establecido java_homeen Hadoop conf/env.sh. Al formatear el namenode, obtengo el siguiente error:

usr/lib/jvm/java-6-openjdk/bin/java no such file or directory.

Gracias. Pero es un sistema operativo de 64 bits.

Anitha
fuente
1
¿Por qué hay una recompensa cuando el usuario ha encontrado la solución? ¿Qué tipo de respuesta se espera?
verde
1
@ green7 La intención es encontrar una respuesta que en realidad esté marcada como aceptada, que sea muy detallada y que le guste. Como no parece haber uno, puedo entender que Jorge agregue la recompensa.
Thomas Ward
@TheLordofTime La respuesta detallada casi contendría 5 líneas ya que la pregunta está demasiado localizada. Y si se espera una respuesta que contenga las instrucciones de instalación para Hadoop, sería redundante ya que el enlace mencionado en la pregunta lo explica maravillosamente. Además, dado que la respuesta, con la mayoría de los votos, fue publicada por el propio autor de la pregunta, es muy poco probable que acepte otra respuesta.
verde
@ green7 si la pregunta está demasiado localizada, ¿vota para cerrarla como tal?
Thomas Ward

Respuestas:

39

Las guías que seguí cuando tenía 12.04 fueron:

De hecho, me opuse al MyLearning porque lo primero que recomendó fue Oracle Java 7 en lugar de OpenJDK 7, pero tuve algunos problemas con OpenJDK 7 al probar esto, así que tuve que ir con Oracle.

La guía es principalmente directa y aquí está:

  1. Instalar Java

    sudo add-apt-repository ppa:webupd8team/java  
    sudo apt-get update && sudo apt-get upgrade  
    sudo apt-get install oracle-java7-installer  
    
  2. Crear usuario de Hadoop

    sudo addgroup hadoop  
    sudo adduser --ingroup hadoop hduser
    

    Donde hduser es el usuario de Hadoop que desea tener.

  3. Configurando SSH

    su - hduser   
    ssh-keygen -t rsa -P ""
    cat .ssh/id_rsa.pub >> .ssh/authorized_keys
    

    Para asegurarse de que la instalación de SSH fue correcta, puede abrir una nueva terminal e intentar crear una sesión ssh con hduserel siguiente comando:

    ssh localhost
    

    reinstale ssh si localhost no se conecta (es posible que deba agregar hdusera sudo como se indica a continuación)

    sudo apt-get install openssh-server
    
  4. Editar sudoers

    sudo visudo
    
  5. Agregue al final la línea para agregar hduser en sudoers

    hduser ALL=(ALL:ALL) ALL
    

    Para guardar presione CTRL+ X, escriba Yy presioneENTER

  6. Deshabilitar IPv6

    sudo gedit /etc/sysctl.conf
    

    o

    sudo nano /etc/sysctl.conf
    

    Copie las siguientes líneas al final del archivo:

    #disable ipv6  
    net.ipv6.conf.all.disable_ipv6 = 1  
    net.ipv6.conf.default.disable_ipv6 = 1   
    net.ipv6.conf.lo.disable_ipv6 = 1  
    

    Si tiene problemas para decirle que no tiene permisos, simplemente ejecute el comando anterior con la cuenta raíz (en caso de que sudo no sea suficiente. Para mí lo fue)

  7. Ahora reiniciar.

    También puedes hacerlo sudo sysctl -ppero prefiero reiniciar.

    Después de reiniciar, verifique que IPv6 esté apagado:

    cat /proc/sys/net/ipv6/conf/all/disable_ipv6
    

    debería decir 1 . Si dice 0 , te perdiste algo.

  8. Instalando Hadoop

    Hay varias formas de hacerlo, la que sugiere la Guía es descargar del sitio Apache Hadoop y descomprimir el archivo en su hdusercarpeta de inicio. Cambie el nombre de la carpeta extraída a hadoop.

    La otra forma es usar un PPA que fue probado para 12.04:

    sudo add-apt-repository ppa:hadoop-ubuntu/stable  
    sudo apt-get update && sudo apt-get upgrade  
    sudo apt-get install hadoop  
    

    NOTA: El PPA puede funcionar para algunos y para otros no. La que intenté fue descargar del sitio oficial porque no sabía sobre el PPA.

  9. Actualizar $HOME/.bashrc

    Deberá actualizar el .bashrcfor hduser(y para cada usuario que necesite administrar Hadoop). Para abrir el .bashrcarchivo, deberá abrirlo como root:

    sudo gedit /home/hduser/.bashrc  
    

    o

    sudo nano /home/hduser/.bashrc  
    

    Luego agregará las siguientes configuraciones al final del .bashrcarchivo

    # Set Hadoop-related environment variables   
    export HADOOP_HOME=/home/hduser/hadoop  
    
    # Set JAVA_HOME (we will also configure JAVA_HOME directly for Hadoop later on)`
    export JAVA_HOME=/usr/lib/jvm/java-7-oracle  
    

    Ahora, si tienes OpenJDK7, se vería así:

    export JAVA_HOME=/usr/lib/java-7-openjdk-amd64  
    

    Aquí hay que tener cuidado con la carpeta donde reside Java con la versión AMD64. Si lo anterior no funciona, puede intentar buscar en esa carpeta en particular o configurar el Java que se utilizará con:

    sudo update-alternatives --config java  
    

    Ahora para algunos alias útiles:

    # Some convenient aliases and functions for running Hadoop-related commands  
    unalias fs &> /dev/null   
    alias fs="hadoop fs"    
    unalias hls &> /dev/null  
    alias hls="fs -ls"  
    
    # Add Hadoop bin/ directory to PATH  
    export PATH=$PATH:$HADOOP_HOME/bin  
    
  10. Configurando Hadoop

    Los siguientes son archivos de configuración que podemos usar para hacer la configuración adecuada. Algunos de los archivos que usará con Hadoop son (Más información en este sitio ):

    start-dfs.sh- Inicia los demonios Hadoop DFS, el nombre y los nodos de datos. Use esto antes de start-mapred.sh

    stop-dfs.sh - Detiene los demonios Hadoop DFS.

    start-mapred.sh - Inicia el mapa de Hadoop / Reduce demonios, el rastreador de trabajos y los rastreadores de tareas.

    stop-mapred.sh - Detiene el mapa de Hadoop / Reduce demonios.

    start-all.sh- Inicia todos los demonios de Hadoop, el namenode, datanodes, el jobtracker y tasktrackers. Obsoleto; use start-dfs.sh y luego start-mapred.sh

    stop-all.sh- Detiene a todos los demonios de Hadoop. Obsoleto; use stop-mapred.sh y luego stop-dfs.sh

    Pero antes de comenzar a usarlos, necesitamos modificar varios archivos en la /confcarpeta.

    hadoop-env.sh

    Busque el archivo hadoop-env.sh, solo necesitamos actualizar la variable JAVA_HOME en este archivo:

    sudo gedit /home/hduser/hadoop/conf/hadoop-env.sh
    

    o

    sudo nano /home/hduser/hadoop/conf/hadoop-env.sh
    

    o en las últimas versiones estará en

    sudo nano /etc/hadoop/conf.empty/hadoop-env.sh
    

    o

    sudo nano /etc/hadoop/hadoop-env.sh
    

    Luego cambie la siguiente línea:

    # export JAVA_HOME=/usr/lib/j2sdk1.5-sun
    

    A

    export JAVA_HOME=/usr/lib/jvm/java-7-oracle
    

    Nota: si recibe un Error: JAVA_HOME is not seterror al iniciar los servicios, olvidó descomentar la línea anterior (simplemente elimine #).

    core-site.xml

    Ahora necesitamos crear un directorio temporal para el framework Hadoop. Si necesita este entorno para la prueba o un prototipo rápido (por ejemplo, desarrolle programas simples de hadoop para su prueba personal ...), le sugiero que cree esta carpeta en el /home/hduser/directorio, de lo contrario, debe crear esta carpeta en un lugar compartido en la carpeta compartida ( como / usr / local ...) pero puede enfrentar algunos problemas de seguridad. Pero para superar las excepciones que puede causar la seguridad (como java.io.IOException), he creado la carpeta tmp en el espacio del hduser.

    Para crear esta carpeta, escriba el siguiente comando:

    sudo mkdir /home/hduser/tmp   
    

    Tenga en cuenta que si desea crear otro usuario administrador (por ejemplo, hduser2 en el grupo hadoop), debe otorgarle un permiso de lectura y escritura en esta carpeta con los siguientes comandos:

    sudo chown hduser:hadoop /home/hduser/tmp  
    sudo chmod 755 /home/hduser/tmp  
    

    Ahora, podemos abrir hadoop/conf/core-site.xmlpara editar la entrada hadoop.tmp.dir. Podemos abrir el core-site.xml usando el editor de texto:

    sudo gedit /home/hduser/etc/hadoop/core-site.xml  
    

    o

    nano /home/hduser/etc/hadoop/core-site.xml
    

    Luego agregue las siguientes configuraciones entre <configure>elementos xml :

    <property>
      <name>hadoop.tmp.dir</name>
      <value>/home/hduser/tmp</value>
      <description>A base for other temporary directories.</description>
    </property>
    
    <property>
      <name>fs.default.name</name>
      <value>hdfs://localhost:54310</value>
      <description>The name of the default file system.  A URI whose
      scheme and authority determine the FileSystem implementation.  The
      uri's scheme determines the config property (fs.SCHEME.impl) naming
      the FileSystem implementation class.  The uri's authority is used to
      determine the host, port, etc. for a filesystem.</description>
    </property>
    

    Ahora edita mapred-site.xml

    <property>
      <name>mapred.job.tracker</name>
      <value>localhost:54311</value>
      <description>The host and port that the MapReduce job tracker runs
      at.  If "local", then jobs are run in-process as a single map
      and reduce task.
      </description>
    </property>
    

    Ahora edita hdfs-site.xml

    <property>
      <name>dfs.replication</name>
      <value>1</value>
      <description>Default block replication.
      The actual number of replications can be specified when the file is created.
      The default is used if replication is not specified in create time.
      </description>
    </property> 
    
  11. Formato NameNode

    Ahora puede comenzar a trabajar en el nodo. Primer formato:

    ~/hduser/hadoop/bin/hadoop namenode -format
    

    o

    ./home/hduser/hadoop/bin/hadoop namenode -format
    

    Debe formatear el NameNode en su HDFS. No debe realizar este paso cuando el sistema se esté ejecutando. Generalmente se realiza una vez la primera vez que realiza la instalación.

  12. Inicio del clúster de Hadoop

    Deberá navegar al directorio hadoop / bin y ejecutar el ./start-all.shscript.

    cd ~/hduser/hadoop/bin/  
    start-all.sh  
    

    Si tiene una versión diferente de la que se muestra en las guías (que probablemente tendrá si hace esto con el PPA o una versión más nueva), inténtelo de esta manera:

    cd ~/hduser/hadoop/bin/   
    start-dfs.sh  
    start-mapred.sh   
    

    Esto iniciará un Namenode, Datanode, Jobtracker y un Tasktracker en su máquina.

  13. Comprobando si Hadoop se está ejecutando

    Hay una buena herramienta llamada jps. Puede usarlo para asegurarse de que todos los servicios estén activos. En su carpeta hadoop bin, escriba:

    jps
    

    Debería mostrarle todos los procesos relacionados con Hadoop.

    NOTA: Dado que esto se realizó hace aproximadamente 6 meses para mí, si alguna parte no funciona, avíseme.

Hadoop usando Juju (Un encanto de Juju para Hadoop)

Tomado de Charming Hadoop

Asumiré que lo siguiente ya está configurado:

  • Tienes un servidor con Juju ya configurado
  • Tiene acceso al servidor (local o remotamente)
  • Tienes Juju configurado y listo para comenzar a agregar encantos
  • Estás usando 12.04 (Esto se debe a que probé todo esto con 12.04)
  • Ya ha configurado ~/.juju/environments.yamlcon la información sobre el servidor que utilizará, incluido el origen de PPA.

Ok, ahora sigue estos pasos para tener un servicio Hadoop ejecutándose:

  1. Bootstrap el entorno para Hadoop

    juju bootstrap
    

    Espere hasta que termine y luego verifique si se está conectando correctamente:

    juju status
    
  2. Implementar Hadoop (maestro y esclavo)

    juju deploy --constraints="instance-type=m1.large" hadoop hadoop-master   
    
    juju deploy --constraints="instance-type=m1.medium" -n 5 hadoop hadoop-slave
    
  3. Crear relaciones

    juju add-relation hadoop-master:namenode hadoop-slave:datanode  
    
    juju add-relation hadoop-master:jobtracker hadoop-slave:tasktracker
    
  4. Exponga Hadoop (dado que ya implementó y creó relaciones, el servicio debería estar ejecutándose)

    juju expose hadoop-master
    

    Y verifique el estado para ver si funciona correctamente:

    juju status hadoop-master
    

Hasta ahora tienes un Hadoop en ejecución. Hay muchas más cosas que puede hacer que se pueden encontrar en el enlace proporcionado o en el Juju Charm oficial para Hadoop

Para obtener los JuJu Charms actualizados (configuraciones, guía paso a paso y más) puede visitar: JuJu Charms y crear su propio entorno JuJu y ver cómo se configura cada archivo y cómo se conecta cada servicio.

Luis Alvarado
fuente
hduser (ALL)=(ALL:ALL) ALL lanza error de sintaxis ...
tutuca
pruebe con hduser ALL=(ALL:ALL) ALL, quite el primer par de paréntesis
ssoto
1
@ssoto acaba de marcar y sí. Tal vez lo cambiaron en las últimas versiones.
Luis Alvarado
1
.bachrcEspera a que Johann Sebastian escuche eso. Oh, espera, no puede ... porque es sordo. :-D
David Foerster
6

Instalé con éxito Hadoop configurando la ruta de JAVA_HOMEas usr/lib/jvm/java-6-openjdk-amd64.

Anitha
fuente
¿Puedes ser un poco más descriptivo?
Panther
3

Derivado de la respuesta de @Luis Alvarado , aquí está mi versión para Ubuntu 14.04 y Hadoop 2.5.1

En breve

  1. Instalar Java
  2. Prepare un usuario ejecutivo para Hadoophduser
  3. Cambiar a hduserpartir de ahora
  4. Permitir hdusera distancia a través de ssh con pass-frase-less
  5. Deshabilitar IPv6
  6. Descargue y configure el paquete Hadoop
  7. Prepare la ruta del sistema $ HADOOP_HOME y $ JAVA_HOME
  8. Configurar los servicios de Hadoop
  9. Iniciar los servicios de Hadoop

Hecho. ¡Buena suerte!

Pasos detallados

Instalar Java

Descargar e instalar

$ sudo add-apt-repository ppa:webupd8team/java    
$ sudo apt-get update && sudo apt-get upgrade    
$ sudo apt-get install oracle-java7-installer

Asegúrese de tener instalado Java7

$ which java
$ ls -l /usr/bin/java
$ ls -l /etc/alternatives/java

deberíamos javaseñalar/usr/lib/jvm/java-7-oracle/jre/bin/java

Prepare un usuario ejecutivo para Hadoophduser

Crear usuario hduseren grupohadoop

$ sudo addgroup hadoop  
$ sudo adduser --ingroup hadoop hduser

Conceder hduserel privilegio de sudo

Editar sudo

$ sudo visudo

Agregue al final esta línea

hduser ALL=(ALL:ALL) ALL

Cambiar a hduserpartir de ahora

$ su - hduser

Permitir hdusera distancia a través de ssh con pass-frase-less

Instalar openssh

$ sudo apt-get install openssh-server

Generar clave pública / privada RSA para conexión SSH; la frase de contraseña está vacía comoparameter -P ""

$ ssh-keygen -t rsa -P ""
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys

Asegúrese de que hduserpuede ssh remoto localmente sin una contraseña

$ ssh localhost

Deshabilitar IPv6

Edite el archivo de configuración

$ sudo nano /etc/sysctl.conf

Copia hasta el final

#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1   
net.ipv6.conf.lo.disable_ipv6 = 1

Asegúrese de que IPv6 esté apagado mediante un reinicio o una llamada

$ sudo sysctl -p 

Luego llame

$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6

Debería decir 1, que significa OK ^^

Descargue y configure el paquete Hadoop

Descargue los paquetes de Hadoop 2.5.1 del sitio Apache Hadoop

La URL directa para este paquete es este enlace

http://www.eu.apache.org/dist/hadoop/core/hadoop-2.5.1/hadoop-2.5.1.tar.gz

Así que vamos a descargar a hduserla carpeta de inicio de la página, extraerla y cambiarle el nombre ahadoop

$ wget http://www.eu.apache.org/dist/hadoop/core/hadoop-2.5.1/hadoop-2.5.1.tar.gz
$ tar -xvzf hadoop-2.5.1.tar.gz
$ mv hadoop-2.5.1 hadoop

Asegúrese de que tengamos Hadoop almacenado en hdusercasa

$ ls /home/hduser/hadoop

Prepare la ruta del sistema $ HADOOP_HOME y $ JAVA_HOME

Editar hduserel archivo .bashrc

$ nano .bashrc

Poner al final los valores para $HADOOP_HOMEy$JAVA_HOME

# Set Hadoop-related environment variables   
export HADOOP_HOME=/home/hduser/hadoop  

# Set JAVA_HOME (we will also configure JAVA_HOME directly for Hadoop later on)
export JAVA_HOME=/usr/lib/jvm/java-7-oracle 

Agregue las binarycarpetas de Hadoop al sistema$PATH

export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

Abra una nueva terminal, inicie sesión como hdusery asegúrese de tener $ HADOOP_HOME con los comandos disponibles

$ echo $HADOOP_HOME
$ which start-all.sh
$ which start-dfs.sh
$ which start-yarn.sh

Deberíamos ver la ruta completa de esos nombres.

Configurar los servicios de Hadoop

Cada componente en Hadoop se configura mediante un archivo XML.

  • Las propiedades comunes van en core-site.xml

  • Las propiedades de HDFS van en hdfs-site.xml

  • Las propiedades de MapReduce van en mapred-site.xml

ingrese la descripción de la imagen aquí

Todos estos archivos están ubicados en la carpeta $ HADOOP_HOME / etc / hadoop

Defina, nuevamente, JAVA_HOME adentro hadoop-env.sheditando la línea

export JAVA_HOME=/usr/lib/jvm/java-7-oracle

Defina Hadoop temp foldery file systemnombre en core-site.xml en

<configuration>
  ...
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/hduser/tmp</value>
    <description>A base for other temporary directories.</description>
  </property>

  <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:54310</value>
    <description>The name of the default file system.  A URI whose
    scheme and authority determine the FileSystem implementation.  The
    uri's scheme determines the config property (fs.SCHEME.impl) naming
    the FileSystem implementation class.  The uri's authority is used to
    determine the host, port, etc. for a filesystem.</description>
  </property>
  ...
</configuration>

Necesitamos preparar esto temp foldercomo está configurado en/home/hduser/tmp

$ cd /home/hduser
$ mkdir tmp
$ chown hduser:hadoop tmp
$ chmod 755 tmp

Definir file system's block replicationen hdfs-site.xml

<configuration>
  ...
  <property>
    <name>dfs.replication</name>
    <value>1</value>
    <description>Default block replication.
    The actual number of replications can be specified when the file is created.
    The default is used if replication is not specified in create time.
    </description>
  </property>
  ...
</configuration>

Definir map-reduce joben mapred-site.xml

<configuration>
  ...
  <property>
    <name>mapred.job.tracker</name>
    <value>localhost:54311</value>
    <description>The host and port that the MapReduce job tracker runs
    at.  If "local", then jobs are run in-process as a single map
    and reduce task.
    </description>
  </property>
  ...
</configuration>

Formato name node

$ hdfs namenode -format

Iniciar el servicio de Hadoop

Llamada

$ start-dfs.sh && start-yarn.sh

estos dos comandos se encuentran en $ HADOOP_HOME / sbin que hemos agregado al sistema $ PATH antes.

Asegúrese de que los servicios de Hadoop se inicien correctamente

$ jps

deberíamos ver

ingrese la descripción de la imagen aquí

Nam G VU
fuente
1
Muy buena guía para seguir. Hay un pequeño error: mapred-site.xmlno existe al principio. Debe ser creado porcp mapred-site.xml.template mapred-site.xml
Raptor
1

Para poder instalar sun-javacon el apt-getcomando, debe agregar una línea a un archivo llamado sources.list. Este archivo se puede encontrar en /etc/apt/sources.list.

Abra el archivo con este comando:

sudo nano /etc/apt/sources.list

Luego, al final de (abajo) de ese archivo, copie / pegue la línea:

deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse

Ahora presione Ctrl+ Xpara salir y ypara guardar.


Ahora escriba el comando:

sudo apt-get update 

Y cuando haya terminado, puede ejecutar con éxito el comando:

sudo apt-get install sun-java6-jdk
Daniel Adeniji
fuente
0

Para un tutorial más actualizado (no estoy seguro de las diferencias), mire los tutoriales en video de hadoop screencasts . Proporcionan video y los comandos reales para instalar debajo. Además, si le envía un correo electrónico al escritor, él estará encantado de responder y ayudarlo si se queda atascado con algo.

Estas instrucciones son muy similares a las que @Luis respondió.

planty182
fuente