Vous êtes sur la page 1sur 16

INSTALACION

APACHE HADOOP

Workshop:

Datos abiertos y generación de algoritmos


de Machine Learning con Apache Spark

Ponentes:

Mtra. Ma. Angelina Alarcón Romero


Mtro. José Daniel Gallegos Padilla
L.I. César Octavio Celis Alderete

julio de 2017
Instalación de Apache Hadoop

Para esta actividad, estamos instalando Apache Hadoop 2.8.0 sobre el sistema operativo
Ubuntu 16.04. Se detallará paso a paso como se realizó la instalación de este software,
considerando que el sistema operativo, ya se encuentra instalado en el equipo que fungirá
como servidor.

Hadoop 2 añade soporte para ejecutar aplicaciones non-batch a través de la introducción


de YARN, un administrador de recursos de cluster rediseñado que elimina la dependencia
exclusiva de Hadoop en el modelo de programación de MapReduce. Con las Siglas de Yet
Another Resource Negotiator, YARN propone una gestión de recursos y programación de
funciones en una capa independiente bajo el procesamiento de datos, permitiendo que
Hadoop 2 ejecute una variedad de aplicaciones. En general, los cambios realizados en
Hadoop 2 permiten un framework para un uso más amplio de análisis de Big Data y otras
aplicaciones empresariales. Por ejemplo, ahora es posible ejecutar eventos de
procesamiento, así como streaming, aplicaciones en tiempo real y operativas. La capacidad
de programación de framework distintos de MapReduce de apoyo también significa que
Hadoop puede servir como una plataforma para una amplia variedad de aplicaciones
analíticas.

Hadoop 2 también incluye nuevas características diseñadas para mejorar la escalabilidad


y la disponibilidad del sistema. Por ejemplo, introdujeron un Hadoop Distributed File System
(HDFS) de alta disponibilidad (HA), rasgo que aporta una nueva arquitectura NameNode a
Hadoop. Anteriormente, Hadoop clusters tenían un NameNode que mantenía un árbol de
directorios de archivos HDFS y seguimiento donde se almacenan los datos en un cluster.
El esquema de alta disponibilidad de Hadoop 2 permite a los usuarios configurar los cluster
con NameNodes redundante, quitando la posibilidad de que un solitario NameNode se
convierta en un punto único de fallo (SPoF) dentro de un cluster. Mientras tanto, una nueva
capacidad de Federación HDFS permite construir clusters horizontalmente con múltiples
NameNodes que trabajan de forma independiente, pero comparten una base común de
almacenamiento de datos, ofreciendo mejor escala de cálculos en comparación con Apache
Hadoop 1.x.

Hadoop 2 también añadió soporte para Microsoft Windows y una capacidad de copia
instantánea que hace copias de sólo lectura point-in-time de un sistema de archivos
disponibles para datos backup y recuperación ante desastres (DR). Además, la revisión
ofrece gran compatibilidad binaria con las aplicaciones existentes de MapReduce
construido para las versiones 1.x Hadoop.

Antes de comenzar con la instalación, debemos asegurarnos que nuestro sistema tiene los
paquetes actualizados, utilizando los siguientes comandos:

$ sudo apt update

$ sudo apt upgrade

Ahora, tenemos nuestro sistema actualizado. El siguiente paso es instalar Java de Oracle
con los siguientes comandos:

$ sudo apt-add-repository ppa:webupd8team


$ sudo apt update
$ sudo apt install oracle-java8-installer

Podemos checar que la instalación fue correcta, consultando la versión que se instaló:

$ java –version

java version "1.8.0_131"


Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

El siguiente paso es crear un usuario y grupo que será el autorizado para ejecutar el servicio
de Hadoop, además, lo meteremos al grupo de administradores.

$ sudo addgroup campusero


$ sudo adduser --ingroup campusero campus
$ sudo adduser campus sudo
A continuación, instalamos el cliente de servicio de acceso remoto SSH para habilitar la
opción de conectarnos de forma remota.

$ sudo apt install ssh

Una vez instalado el cliente de SSH, necesitamos crear una clave RSA para que Hadoop
se pueda conectar, pero sin utilizar la clave de acceso. Para esto, primero creamos la llave
que no utilizará llave. Después, copiaremos esa llave a las llaves autorizadas.

$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa


$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Ahora que ya tenemos lo necesario, vamos a descargar Hadoop de la página oficial, en el


sitio http://hadoop.apache.org/releases.html. Para esta actividad, vamos a descargar la
versión 2.8.0, en específico el archivo binario hadoop-2.8.0.tar.gz.

Utilizamos los siguientes comandos para descargar el paquete de Hadoop, crear la carpeta
en donde lo instalaremos y dar los permisos adecuados al usuario campus.

$ wget http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.8.0/hadoop-
2.8.0.tar.gz

$ tar xvzf hadoop-2.8.0.tar.gz


$ sudo mkdir -p /usr/local/hadoop

$ cd hadoop-2.8.0/

$ sudo mv * /usr/local/hadoop

$ sudo chown -R campus:campusero /usr/local/hadoop

Una vez que ya hemos desempaquetado el archivo, lo hemos colocado en el directorio


correspondiente y asignado los permisos necesarios. Ahora procedemos a configurar los
archivos necesarios para que nuestro Hadoop este funcional.

Archivo ~/.bashrc

Antes de modificar el archivo, vamos a buscar la ruta donde está instalado nuestro Java,
que la vamos a necesitar para indicarle al perfil de usuario donde lo puede encontrar.

$ update-alternatives --config java

Existe 1 opción para la alternativa java (que provee /usr/bin/java).

Selección Ruta Prioridad Estado

------------------------------------------------------------

0 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 modo automático

* 1 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 modo manual

Press <enter> to keep the current choice[*], or type selection number:

Ahora abrimos el archivo para editarlo, utilizando el editor nano

$ nano ~/.bashrc

Agregamos lo siguiente al final del archivo:

#HADOOP VARIABLES START


export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
#HADOOP VARIABLES END

Guardamos el archivo y aplicamos los cambios

$ source ~/.bashrc

Archivo hadoop-env.sh

Necesitamos modificar la ruta JAVA_HOME en hadoop-env.sh para asegurar que el valor


de la variable JAVA_HOME estará disponible para Hadoop cada vez que se inicie.

$ nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh

Buscamos la variable JAVA_HOME en el archivo y la actualizamos con lo siguiente:

export JAVA_HOME=/usr/lib/jvm/java-8-oracle
Archivo core-site.xml

Core-site.xml tiene propiedades de configuración que se requieren cuando se inicia


Hadoop. Vamos a crear un directorio temporal que posteriormente vamos a necesitar.

$ sudo mkdir -p /app/hadoop/tmp

$ sudo chown campus:campusero /app/hadoop/tmp

Abrimos el archivo e introducimos las siguientes líneas entre las etiquetas <configuration>
</ configuration>:

$ nano /usr/local/hadoop/etc/hadoop/core-site.xml

<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/app/hadoop/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.</description>
</property>
</configuration>

Archivo mapred-site.xml

De forma predeterminada, la carpeta /usr/local/hadoop/etc/hadoop/ contiene el archivo


mapred-site.xml.template que es una plantilla de ejemplo, por lo que debemos hacer una
copia del archivo y deberá llamarse mapred-site.xml.

$ cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template
/usr/local/hadoop/etc/hadoop/mapred-site.xml

El archivo /usr/local/hadoop/etc/hadoop/mapred-site.xml se utiliza para especificar qué


framework se está utilizando para MapReduce.

$ nano /usr/local/hadoop/etc/hadoop/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.
</description>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

Archivo hdfs-site.xml

Necesitamos configurar hdfs-site.xml para cada host en el clúster que especifica dos
directorios:
 Nodo de nombre
 Nodo de datos

Esto se puede hacer usando los siguientes comandos:

$ sudo mkdir -p /usr/local/hadoop_store/hdfs/namenode


$ sudo mkdir -p /usr/local/hadoop_store/hdfs/datanode
$ sudo chown -R campus:campusero /usr/local/hadoop_store
Abrimos el archivo hdfs-site.xml e ingresamos el siguiente contenido entre las etiquetas
<configuration> </ configuration>:

$ nano /usr/local/hadoop/etc/hadoop/hdfs-site.xml

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>Default block replication.
</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop_store/hdfs/datanode</value>
</property>
</configuration>

Archivo yarn-site.xml
Abrimos el archivo yarn-site.xml e ingresamos el siguiente contenido entre las etiquetas
<configuration> </ configuration>:

$ nano /usr/local/hadoop/etc/hadoop/yarn-site.xml

<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

Una vez que hemos terminado de configurar los archivos necesarios, vamos a formatear el
sistema de archivos de Hadoop (HDFS).

$ hadoop namenode –format


Después de formatear la HDFS, iniciar el sistema de archivos distribuido. El siguiente
comando inicia el namenode, así como los nodos de datos en cluster.

$ start-all.sh
Podemos comprobar que todos los demonios o servicios se han iniciado correctamente
utilizando el siguiente comando:

$ jps

Y ahora podemos detener los servicios con el siguiente comando:

$ stop-all.sh
Después de cargar la información en el servidor, podemos encontrar la lista de los archivos
de un directorio, el estado de un archivo, utilizando "ls". A continuación, se muestra la
sintaxis de ls que se puede pasar a un directorio o un nombre de archivo como argumento.

$ hadoop fs -ls /

Ahora, vamos a ver un ejemplo de cómo insertar datos en HDFS. Suponiendo que tenemos
los datos en el archivo llamado germanData.txt en el sistema local que debe guardarse en
el sistema de archivos HDFS. Sigamos los pasos que se indican a continuación para
insertar el archivo requerido en el sistema de archivos de Hadoop.

Primero transferimos al servidor en algún directorio local y luego almacenamos el archivo


en el sistema de archivos de Hadoop utilizando el comando put.

$ hadoop fs -put shakespeare.txt hdfs://localhost:54310/


Finalmente, vamos a ver las interfaces web que tenemos disponibles al arrancar los
servicios de Hadoop.

Servicio NameNode: http://tu-direccion-ip:50070/

Servicio MapReduce: http:// tu-direccion-ip:8042/


Servicio NameNode secundario: http:// tu-direccion-ip:50090/status.html

Administrador de Recursos: http:// tu-direccion-ip:8088/

Vous aimerez peut-être aussi