administración de apache hadoop a través de cloudera

75
Informática como Servicio Administración de Apache Hadoop a través de Cloudera David Albela Pérez

Upload: david-albela

Post on 05-Dec-2014

862 views

Category:

Technology


2 download

DESCRIPTION

Trabajo optativo del Máster de Ingeniería Informática de la Universidad de A Coruña para la asignatura "Informática como Servicio" sobre la instalación, configuración y administración de un clúster de Hadoop.

TRANSCRIPT

Page 1: Administración de Apache Hadoop a través de Cloudera

Informática como Servicio

Administración de Apache Hadoop

a través de Cloudera

David Albela Pérez

Page 2: Administración de Apache Hadoop a través de Cloudera
Page 3: Administración de Apache Hadoop a través de Cloudera

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 3.0 España.

Page 4: Administración de Apache Hadoop a través de Cloudera

Tabla de Contenidos

1.Introducción.......................................................................................................................................52.Requisitos previos.............................................................................................................................6

2.1.Instalación de Java Development Kit........................................................................................63.Añadir repositorio de Cloudera.........................................................................................................64.Instalación en modo pseudo-distribuído............................................................................................7

4.1.Instalación en Debian 7 o superior............................................................................................75.Componentes de Hadoop...................................................................................................................8

5.1.HDFS.........................................................................................................................................85.2.NameNode.................................................................................................................................95.3.Secundary NameNode.............................................................................................................105.4.JobTracker................................................................................................................................105.5.DataNode y TaskTracker.........................................................................................................10

6.Configuración en modo pseudodistribuído.....................................................................................106.1.1.Puertos de Interfaz Web de los Servicios de HDFS y MapReduce..................................12

7.MapReduce......................................................................................................................................127.1.Ejemplo Grep...........................................................................................................................137.2.Funcionamiento de MapReduce..............................................................................................147.3.Terminología de MapReduce...................................................................................................15

8.HBase..............................................................................................................................................158.1.Instalación................................................................................................................................158.2.Configuración de HBase..........................................................................................................16

8.2.1.DNS con Hbase................................................................................................................168.2.2.Utilizando el protocolo de tiempo de red (NTP ) con Hbase...........................................168.2.3.Ajuste de los límites de usuario para HBase....................................................................168.2.4.Configurar dfs.datanode.max.xcievers con Hbase...........................................................17

8.3.Activar Hbase en modo Pseudodistribuído..............................................................................178.3.1.Crear directorio en HDFS................................................................................................178.3.2.Instalación de servidores adicionales...............................................................................18

8.4.Ejemplo de HBASE.................................................................................................................189.Flume...............................................................................................................................................19

9.1.Funcionamiento de Flume.......................................................................................................199.2.Instalación y Configuración.....................................................................................................20

10.Sqoop.............................................................................................................................................2110.1.Instalación y configuración de HBase REST y Apache Thrift..............................................22

10.1.1.Instalación de HBase REST...........................................................................................2210.1.2.Instalación de HBase Thrift...........................................................................................22

10.2.Instalación de Sqoop..............................................................................................................2310.3.Importar una Base de Datos...................................................................................................24

11.Hive................................................................................................................................................2611.1.Instalación de Hive................................................................................................................2711.2.Ejemplo en Hive....................................................................................................................30

12.Impala............................................................................................................................................3212.1.Instalación de Impala.............................................................................................................3212.2.Configuración de Impala.......................................................................................................3412.3.Ejemplo de Impala.................................................................................................................35

13.Pig..................................................................................................................................................3713.1.Instalación de Pig...................................................................................................................37

Page 5: Administración de Apache Hadoop a través de Cloudera

13.2.Ejemplo de Pig.......................................................................................................................3814.Hue................................................................................................................................................40

14.1.Instalación de Hue.................................................................................................................4015.Otras Herramientas para Hadoop..................................................................................................42

15.1.Oozie......................................................................................................................................4215.2.Zookeeper..............................................................................................................................4315.3.Whirr......................................................................................................................................4415.4.Snappy...................................................................................................................................4515.5.Mahout...................................................................................................................................4515.6.Avro.......................................................................................................................................46

16.Clúster de Hadoop con Alta Disponibilidad..................................................................................4616.1.Componentes.........................................................................................................................46

16.1.1.NameNode.....................................................................................................................4616.1.2.SecundaryNamenode.....................................................................................................4616.1.3.DataNode.......................................................................................................................4716.1.4.JobTracker......................................................................................................................4716.1.5.TaskTracker....................................................................................................................47

16.2.Instalación del clúster............................................................................................................4716.2.1.Requisitos Mínimos.......................................................................................................4716.2.2.Desinstalar Cloudera Manager.......................................................................................48

16.3.Crear un Clúster de Hadoop...................................................................................................4916.3.1.Configuración de Red....................................................................................................5016.3.2.Instalación de paquetes..................................................................................................5216.3.3.Configuración.................................................................................................................52

16.4.Alta Disponibilidad del NameNode.......................................................................................5616.4.1.Failover Automático.......................................................................................................57

16.5.Clúster de Hadoop con Alta Disponibilidad..........................................................................5716.5.1.Instalación de paquetes..................................................................................................5716.5.2.Configuración.................................................................................................................58

16.6.Alta Disponibilidad en el JobTracker....................................................................................6516.7.MapReduce en el clúster........................................................................................................71

16.7.1.Wordcount......................................................................................................................7117.Seguridad.......................................................................................................................................7318.Bibliografía....................................................................................................................................74

Page 6: Administración de Apache Hadoop a través de Cloudera

1. Introducción

En esta memoria se explica la instalación, configuración y administración de Hadoop versión 0.20 a partir de los repositorios de Cloudera, utilizando la última versión estable de Cloudera CDH4.5.

Algunas de las características principales ofrecidas por esta versión son:

• Soporte para Oracle JDK 1.7

• MapReduce versión 2.0 (MRv2 o Yarn)

• MapReduce versión 1.0 (MRv1)

Para más información http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/latest/

Page 7: Administración de Apache Hadoop a través de Cloudera

2. Requisitos previos

Antes de instalar Hadoop en un único nodo se deberá realizar la instalación de los paquetes básicos. En primer lugar es necesario instalar la versión de Java oficial de Oracle JDK 7.

2.1. Instalación de Java Development Kit

Aunque se recomienda instalar Oracle JDK 1.7 para algunos paquetes específicos como Impala a continuación se detalla la instalación de la versión OpenJDK de los repositorios de Debian.

$ sudo apt-get install openjdk-7-jdk

Incluir la ruta de instalación en $JAVA_HOME

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

$ export PATH=$JAVA_HOME/bin:$PATH

Añadir las variables de entorno a ~/.bashrc

3. Añadir repositorio de Cloudera

Para la instalación de Hadoop con Cloudera es necesario añadir su repositorio, en el caso CDH4, al sistema operativo. Cloudera tiene soporte para los sistemas operativos basados tanto en Debian como RedHat y provee de los paquetes necesarios para su instalación básica.

1. Instalación desde Debian Squeeze 6 (compatible con Debian Jessie 7)

• Descargar e instalar el paquete

$ wget http://archive.cloudera.com/cdh4/one-click-install/squeeze/amd64/cdh4-repository_1.0_all.deb

$ sudo dpkg -i cdh4-repository_1.0_all.deb

• Instalar clave pública GPG (requiere tener instalado el paquete curl)

$ curl -s http://archive.cloudera.com/cdh4/debian/squeeze/amd64/cdh/archive.key |sudo apt-key add -

• Opcionalmente se puede instalar el repositorio manualmente

2. Instalación desde Debian 6 Squeeze

• Crear una lista nueva en /etc/apt/sources.list.d/cloudera.list$ sudo touch /etc/apt/sources.list.d/cloudera.list

# Añadir a la lista las siguientes línea:deb [arch=amd64] http://archive.cloudera.com/cdh4/debian/squeeze/amd64/cdh squeeze-cdh4 contrib

deb-src http://archive.cloudera.com/cdh4/debian/squeeze/amd64/cdh squeeze-cdh4 contrib

Page 8: Administración de Apache Hadoop a través de Cloudera

3. Instalación desde CentOS

• Descargar e instalar el paquete

$ wget http://archive.cloudera.com/cdh4/one-click-install/redhat/5/x86_64/cloudera-cdh-4-0.x86_64.rpm

$ sudo yum --nogpgcheck localinstall cloudera-cdh-4-0.x86_64.rpm

• Añadir clave pública GPG

$ sudo rpm --import http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera

En caso de que el sistema operativo no sea compatible también están disponibles los ficheros binarios tarballs (tar.gz o tar.bz) en la siguiente dirección web: http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDHTarballs/3.25.2013/CDH4-Downloadable-Tarballs/CDH4-Downloadable-Tarballs.html.

4. Instalación en modo pseudo-distribuído

En este apartado se explica la instalación de Hadoop 0.20 en modo pseudo-distribuído. Cloudera recomienda utilizar MapReduce versión 1 en entornos de producción ya que considera que MapReduce versión 2 o Yarn están todavía en una versión temprana y no estable.

Apache Hadoop se puede instalar en 3 modos distintos:

• Local (standalone): Configurado para ejecutarse en modo no distribuído, sin el sistema de ficheros HDFS y en un único proceso de Java. Útil para debug. Instalación por defecto.

• Pseudo-Distribuído: El objetivo de este apartado es configurar esta opción para su ejecución en modo distribuído en un único nodo. Cada demonio de Hadoop ejecuta procesos de Java distintos.

• Completamente Distribuído: Hadoop instalado en varios varios nodos.

Para la instalación de Hadoop en modo pseudo-distribuído se pueden encontrar los paquetes de configuración básica en el repositorio de CDH4 con el nombre de hadoop-0.20-conf-pseudo.

4.1. Instalación en Debian 7 o superior

Cloudera CDH4 solo da soporte para Debian 6 Squeezy. Sin embargo en versiones superiores se puede realizar la instalación con algunos cambios. A continuación se detalla el proceso de instalación en Debian Wheezy 7 o superior:

1. Añadir lista de paquetes de la versión Squeezy

$ sudo vi /etc/apt/sources.list

deb http://ftp.udc.es/debian/ squeeze main contrib

deb-src http://ftp.udc.es/debian/ squeeze main contrib

NOTA: No se recomienda realizar ningún dist-upgrade con estas fuentes, una vez instaladas los paquetes con las dependencias necesarias se recomienta comentar o eliminar de la lista.

Page 9: Administración de Apache Hadoop a través de Cloudera

2. Actualizar repositorios

$ sudo apt-get update

3. Es necesario instalar el paquete libssl 0.9.8 para los paquetes de Hadoop 0.20 MapReduce.

$ sudo apt-get install libssl 0.9.8

4. Instalación

$ sudo apt-get install hadoop-0.20-conf-pseudo

El paquete hadoop-0.20-conf-pseudo instalará automáticamente los siguientes paquetes:

• hadoop: Binarios principales del paquete de Hadoop.

• hadoop-0.20-mapreduce: MapReduce versión 1.

• hadoop-0.20-mapreduce-jobtracker: Servicio JobTracker. Este demonio se encargará dedistribuír los trabajos enviados por el cliente a los distintos TraskTrackers. Normalmente seejecuta en el nodo maestro denominado NameNode. Este paquete no incluye JobTracker enmodo de alta disponibilidad (HA).

• hadoop-0.20-mapreduce-tasktracker: Servicio TaskTracker. Este demonio se encarga deejecutar las tareas Map y Reduce en cada nodo esclavo denominados DataNodes.

• Hadoop-hdfs : Sistema de fichero HDFS.

• Hadoop-hdfs-datanode: Servicio DataNode. Se instala en los nodos esclavos. CadaDataNode se encarga de almacenar un conjunto de bloques de HDFS así como un checksumpara validar que no está corrupto. Un nodo maestro o NameNode puede ser tambiénDataNode.

• Hadoop-hdfs-namenode: Servicio NameNode. Se instala en el nodo maestro. Se encargade gestionar la metainformación de los ficheros almacenados en HDFS así como guardar unregistro de los bloques que contiene cada fichero y en que DataNodes están. Cuando seguarda un bloque automáticamente se almacenan 3 réplicas en diferentes DataNodes. ElNameNode también se encarga de solicitar nuevas réplicas en caso de encontrarse bloquescorruptos o caer algún DataNode. Si el NameNode cae no se puede acceder al sistema deficheros HDFS.

• Hadoop-hdfs-secondarynamenodelib: Servicio SecondaryNameNode se trata de unNameNode secundario que libera de carga para la actualización del registro de bloques-archivo del NameNode principal. Este NameNode secundario no provee de altadisponibildad al NameNode principal.

5. Componentes de Hadoop

5.1. HDFS

Hadoop Data File System es el sistema de ficheros utilizado por Hadoop. Es gestionado por elnodo maestro o NameNode y los datos se almacenan en nodos esclavos, llamados DataNode.

Cada fichero se divide en bloques de datos de 64 Mbytes por defecto. Es por eso que Hadoopestá preparado para trabajar con gran candidad de datos.

Page 10: Administración de Apache Hadoop a través de Cloudera

Los ficheros son de una única escritura. Una vez colocado en HDFS, el fichero no se puedemodificar. La única opción es leerlo, modificarlo y resubirlo. Sin embargo, existe la opciónAPPEND para agregar más datos a un fichero. Por ejemplo, la base de datos NoSQL HBase utilizaesta opción para guardar sus tablas de datos en HDFS optimizando el tamaño de estas hasta ocuparel mínimo bloque.

Los directorios en HDFS no tienen ningún bloque asignado, pero sí tienen metadatos como lospermisos y propietarios. Aún así ocupan espacio.

5.2. NameNode

El NameNode es el nodo maestro del clúster. Su función principal es guardar los metadatos:permisos, usuario, grupo, fecha de creación e información de los bloques.

Los metadatos se guardan en disco en el fichero FSImage1, el cual sirve de punto de respaldo ocheckpoint. La información de los metadatos se almacena y actualiza solo en memoria, sin embargolos cambios son registados en disco en los ficheros edits.

Si el NameNode cae, no se puede acceder al sistema de ficheros de Hadoop. Durante elarranque del NameNode se comprueba el estado de FSImage y el edit log.

El NameNode guarda el nombre de los bloques asociados con cada fichero en disco, sinembargo la ubicación de los bloques se guarda en memoria en base al informe enviado por cadaDataNode. Los bloques nunca son transferidos al NameNode, sino que este le dice al nodo con laréplica que la envíe a un tercer nodo. Cuando un cliente quiere leer un fichero, le pregunta alNameNode donde se encuetran los datos, devoliendo una lista ordenada de los DataNode y nombrede bloques.

El NameNode necesita memoria suficiente para guardar los metadatos y mantener así el clúster.Por cada ítem se usan entre 100 y 200 bytes de memoria RAM, donde un ítem es:

• Un fichero con sus permisos, usuario, grupo, fecha de creación, etc.

• Un bloque de información por cada bloque de datos que el fichero ocupa.

Por ejemplo, si se guarda un fichero de un Gbyte con tamño por bloque de 128 MB, son 8 bloques de datos. Es decir, el fichero ocupa en memoria del NameNode 9 ítems (8 ítems por los bloques más un ítem por el propio fichero) o 1350 bytes (si cada bloque ocupa 150 bytes).

Es decir, para un PetaByte de datos (2^50 bytes) de ficheros de un Gbyte cada uno se necesitan 1350 MB de memoria más la necesaria para el sistema operativo y los procesos Java.

En el caso de un petabyte de ficheros de 100 Mbytes la memoria necesaria para el NameNode es mucho mayor.

5.3. Secundary NameNode

El Secundary NameNode no sustituye al NameNode en ningún momento, su función principal es liberar la carga del NameNode aplicando los últimos cambios en el FSImage a partir del fichero edits.

En resumen, se encarga de realizar los checkpoints. Una ver actualizado FSImage lo envía al NameNode.

Por defecto actualiza cada hora o cuando el FSImage crece más de 64 Mbytes.

1 http://archive.cloudera.com/cdh/3/hadoop/hdfs_user_guide.html

Page 11: Administración de Apache Hadoop a través de Cloudera

5.4. JobTracker

Es el proceso encargado de gestionar los trabajos MapReduce. Sin el JobTracker no se puedenejecutar trabajos MapReduce en el clúster.

En caso de que un nodo TaskTracker falle una tarea Map intenta ejecutar la misma tarea en otronodo del clúster. Realiza hasta cuatro intentos en distintos nodos por cada tarea antes de avisar delfallo de la tarea.

El JobTracker recibe mensajes heartbeat enviados por los TraskTracker para saber si estándisponibles y mantiene un registro del progreso de los trabajos lanzados en el clúster.

5.5. DataNode y TaskTracker

El DataNode es el nodo encargado de almacenar los datos. El TaskTracker es el servicioencargado de ejecutar las tareas MapReduce en un nodo.

Normalmente el DataNode y el TaskTracker se instalan en el mismo nodo para poder procesarbloques de datos locales, aunque es posible tener un nodo solo con el demonio del TaskTracker yrecibir los datos de otro nodo.

El DataNode y el TaskTracker envían mensajes heartbeats al NameNode y JobTrackerrespectivamente para indicar que están disponibles. El DataNode envía además, para informar alNameNode, los bloques de datos que tiene disponibles.

Cada bloque de datos almacenado en el DataNode tiene asociado un fichero .meta con elchecksum del bloque para así poder comprobar que el bloque no está corrupto.

La manera ideal de almacenar los datos en los DataNode es utilizar varios discos sin RAID, deforma que los bloques de datos se puedan leer directamente de cada uno de los distossimultáneamente en las tareas Map. Para evitar pérdidas de información, se realiza un réplica decada bloque por defecto en 3 DataNode.

Por otra parte, los TaskTracker cuando terminan una tarea Map almacenan los datos de salidaen el disco local para sen enviados posteriormente al TraskTracker que ejecuta la tarea Reduce (enla medida de lo posible se intentará lanzar siempre en el mismo nodo).

6. Configuración en modo pseudodistribuído

Con Hadoop instalado en modo pseudo-distrinbuído se procede a la configuración de los archivos.

Antes de comenzar se recomienda comprobar la instalación:

$ dpkg -L hadoop-0.20-conf-pseudo

Una vez verificada la instalación en /etc/hadoop/conf/ se pueden encontrar los siguientes archivos de configuración:

• core-site.xml: Contiene la configuración de propiedades generales de Hadoop.

• hdfs-site.xml: Configuración de propiedades del sistema de ficheros HDFS.

• mapred-site.xml: Propiedades de MapReduce.

Page 12: Administración de Apache Hadoop a través de Cloudera

NOTA: En el caso de haber instalado Hadoop 2.0 o superior se incluiría el fichero de configuraciónyarn-site.xml para definir propiedades de MapReduce versión 2.

A continuación se describen los pasos necesarios para terminar de configurar Hadoop en modo pseudo-distribuído:

1. Formatear el NameNode. Antes de iniciar el NameNode por primera vez se debe formatear el sistema de ficheros HDFS

$ sudo -u hdfs hdfs namenode -format

El usuario que tiene permisos para formatear HDFS es hdfs, por eso es necesario ejecutar el comando “hdfs namenode -format” como usuario hdfs.

2. Iniciar HDFS

$ for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done

# Comprobar los servicios

$ sudo jps

Deberían de aparecer NameNode, DataNode y SecondaryNameNode.

3. Añadir ejecutable java slf4j-simple-1.7.5.jar a la ruta de hdfs

$ sudo ln -s /usr/share/java/slf4j-simple-1.7.5.jar /usr/lib/hadoop-hdfs/lib/slf4j-simple-1.7.5.jar

4. Crear directorio temporal

$ sudo -u hdfs hadoop fs -mkdir /tmp

$ sudo -u hdfs hadoop fs -chmod -R 1777 /tmp

5. Crear los directorios de sistema de MapReduce

$ sudo -u hdfs hadoop fs -mkdir -p /var/lib/hadoop-hdfs/cache/mapred/mapred/staging

$ sudo -u hdfs hadoop fs -chmod 1777 /var/lib/hadoop-hdfs/cache/mapred/mapred/staging

$ sudo -u hdfs hadoop fs -chown -R mapred /var/lib/hadoop-hdfs/cache/mapred

6. Verificar la estructura del sistema de archivos

$ sudo -u hdfs hadoop fs -ls -R /

La salida obtenida debería ser como el siguiente ejemplo

7. Iniciar MapReduce

$ for x in `cd /etc/init.d ; ls hadoop-0.20-mapreduce-*` ; do sudo service$x start ; done

# Comprobar los procesos

Page 13: Administración de Apache Hadoop a través de Cloudera

$ sudo jps

8. Crear directorios de usuario

$ sudo -u hdfs hadoop fs -mkdir /user/<user>

$ sudo -u hdfs hadoop fs -chown <user> /user/<user>

6.1.1. Puertos de Interfaz Web de los Servicios de HDFS y MapReduce

Una vez iniciados HDFS y MapReduce es posible acceder a las interfaces web de los distintos servicios. A continuación se describen los puertos abiertos y sus interfaces:

• 50030: Puerto por defecto del JobTracker ejecutado en el NameNode o nodo maestro. Permite acceder a la información de los trabajos MapReduce. http://localhost:50030/jobtracker.jsp

• 50060: Puerto por defecto del TaskTracker ejecutado en el DataNode o nodo esclavo. http://localhost:50060/tasktracker.js.

• 50070: Puerto por defecto del NameNode principal. Permite acceder a la información del HDFS, ver donde están distribuídos los bloques de datos y su estado ademas de visualizar el estado de cada DataNode.

• 50090: En el puerto 50090 se puede acceder a la interfaz web del SecundaryNamenode: http://localhost:50090/status.jsp

Page 14: Administración de Apache Hadoop a través de Cloudera

7. MapReduce

Una vez creada la estructura necesaria para que los usuarios clientes puedan almacenar datos en HDFS y ejecutar tareas MapReduce se puede ejecutar un par de ejemplos incluídos por defecto en el repositorio de Hadoop.

7.1. Ejemplo Grep

A continuación se probará el ejemplo para realizar búsquedas con expresiones regulares sobreficheros en HDFS.

1. Crear el directorio de entrada de datos input

$ hadoop fs -mkdir input

2. Copiar los datos de configuración de Hadoop para el ejemplo

$ hadoop fs -put /etc/hadoop/conf/*.xml input

$ hadoop fs -ls input

3. Ejecutar el trabajo con salida en el directorio output

$ /usr/bin/hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar grep input output 'dfs[a-z.]+'

NOTA: El directorio output no puede existir.

4. Compobar la ejecución desde el JobTracker

Desde la url local en el puerto 50030, http://localhost:50030/, se puede comprobar el estadodel JobTracker y todos los trabajos lanzados.

Pulsando en el enlace sobre el jobid del trabajo lanzado se puede ver información detallada delmismo.

Page 15: Administración de Apache Hadoop a través de Cloudera

En la ventana con información del trabajo lanzado se puede observar el número de tareas Map y Reduce lanzadas, tres y una respectivamente, el estado y porcentaje de tareas completadas.

5. Listar el resultado

$ hadoop fs -ls output

$ hadoop fs -cat output/part-00000 | head

7.2. Funcionamiento de MapReduce

Cuando se ejectua un trabajo MapReduce, entre las fases de Map y Reduce se ejecuta una faseintermedia que incluye los procesos shuffle y short.

Estes dos procesos se encargan de mezclar y reordenar los datos generados en cada tarea Map paraque las tareas Reduce obtengan los pares clave-valor ordenados y agrupados. Los datosintermediarios generados, de la salida Map, se almacenan en el nodo local donde se generan. Porejemplo, en el ejemplo clásico de WordCount las salidas Map generadas en la tarea de un nodo (the1) (the, 1) (the, 1) serían reordenadas y agrupadas para la entrada de la tarea Reduce como (the, [1,1, 1]).

En resumen, una tarea Mapper procesa una única entrada, o bloque, de HDFS. Los datosintermediarios se escriben en el disco del nodo local. Durante la fase de shuffle & sort todos losvalores asociadores se reordenan.

Los datos intercambiados entre los nodos a través de la red del clúster se comprimen por defectopara evitar ocupar demasiado espacio. Se peude escoger algoritmos y niveles de compresión/descompresión en la configuración de MapRecude, sin embargo a veces puede influir en función decon que tipo de ficheros se desee trabajar, por ejemplo, tratamiento de imágenes requiere un mayorcoste computacional de compresión/descompresión con mucho menor ahora de espacio frente atratamiento de archivos de texto.

Page 16: Administración de Apache Hadoop a través de Cloudera

7.3. Terminología de MapReduce

Cuando se lanza un trabajo MapReduce entran en juego:

• Job: Son los trabajos Mapper y Reducer con una lista de entradas.

• Task: El la unidad de trabajo. Un Job está divido en varias tareas.

• Client: Quien ejecuta los trabajos enviándolos al JobTracker. El JobTracker inicia el Job.Cada jobId se llama job_xxx_xx. El cliente calcula los "input splits" o bloques de entradapara cada trabajo. Por defecto, los input splits son los bloques de cada fichero. Cada tareaMap procesa un único "input split".

Cada demonio con su identificador jps es una instancia de la Máquina Virtual de Java. Cada vez queel TaskTracker lanza un tarea se crea una nueva instancia de la JVM. Así se aisla el TraskTracker defallos de código o bugs, en caso de fallo se vuelve a lanzar la tarea asignada hasta un númerodeterminado de intentos. Las tareas Task envían heartbreats al TaskTracker para indicar que estándisponibles y funcionales. Si un TackTracker está ejecutando 3 tareas, tenemos 3 JVM. Cada JVMenvía heartbeats al TaskTracker. Si dejan de recibirse heartbeats, el TaskTracker mata la instaciaJVM y notifica al JobTracker para que vuelva a lanzar la tarea en otro momento.

Si una tarea falla cuatra veces el Job se para.

8. HBase

Hbase es una base de datos NoSQL. Proporciona almacenamiento de tablas a gran escala paraHadoop utilizando HDFS.

Cloudera recomienda siempre instalar HBase en un modo independiente antes de intentarejecutarlo en un clúster de conjunto.

Dado que Hbase almacena varias versiones de los registros almacenados en las tablas esnecesario instalar además el cliente NTP para sincronizar la hora con el resto de DataNodes.

8.1. Instalación

El paquete de cloudera hbase instala las dependencias necesarias.

$ sudo apt-get install hbase

Con el siguiente comando se puede comprobar las rutas donde se ha instalado Hbase.

$ sudo dpkg -L hbase

Una vez completada la instalación se pueden utilizar las librerías de Hbase ubicadas en /usr/lib/HBase/ y /usr/lib/HBase/lib/ para incluir en el CLASSPATH de programas escritos en Java

Page 17: Administración de Apache Hadoop a través de Cloudera

para utilizar la base de datos.

8.2. Configuración de HBase

En la ruta de configuración /etc/hbase/conf se encuentran los siguientes ficheros deconfiguración

• hbase-env.sh: Definición de las variables de entorno necesarias para Hbase.

• hbase-site.xml: Descripción de propiedades de Hbase.

8.2.1. DNS con Hbase

HBase utiliza el nombre de localhost para informar de su dirección IP. Si la máquina tiene múltiples interfaces, HBase utiliza la interfaz del nombre del host principal. Si no es suficiente se puede establecer en el archivo hbase.regionserver.dns.interface en hbase-site.xml para indicar la interfaz principal. Para que funcione correctamente esta configuración requiere que la configuracióndel clúster sea constante y cada host tenga la misma configuración de la interfaz de red. Como alternativa se puede establecer hbase.regionserver.dns.nameserver en el archivo hbase-site.xml paraelegir un servidor de nombres diferente al predeterminado para todo el sistema.

8.2.2. Utilizando el protocolo de tiempo de red (NTP ) con Hbase

Los relojes de los nodos deben estar sincronizados. Es necesario tener el demonio NTP ejecutado en todos los nodos del clúster. Si usted está teniendo problemas de consulta de datos o las operaciones del clúster inusuales , verifique la hora del sistema. Para obtener más información sobreNTP , consulte el sitio NTP. Para más información consultar el servicio NTP en http://www.ntp.org/

8.2.3. Ajuste de los límites de usuario para HBase

Debido a que HBase es una base de datos que utiliza gran cantidad de archivos al mismo tiempo. La configuración por defecto de ulimit en sistemas Unix, 1024 archivos abiertos como máximo, es insuficiente. Cualquier cantidad significativa de carga dará lugar a fallos con exceptiones del tipo java.io.IOException (demasiados archivos abiertos).

Es recomendable incrementar el número máximo de identificadores de archivo a más de 10.000. Esta configuración se realiza en el propio sistema operativo. Además es un error muy común aumentar el número de identificadores de archivo para un usuario en concreto cuando HBase se ejecuta con un usuario diferente. Por eso se aumentan los valores para los usuarios hdfs y hbase.

$ sudo vi /etc/security/limits.confhdfs - nofile 32768hbase - nofile 32768

En sistemas basados en Debian añadir además la siguiente línea:$ sudo vi /etc/pam.d/common-session

session required pam_limits.so

Page 18: Administración de Apache Hadoop a través de Cloudera

8.2.4. Configurar dfs.datanode.max.xcievers con Hbase

El parámetro de HDFS dfs.datanode.max.xciervers indica a los DataNode el límite superior delnúmero de ficheros que puede servir al mismo tiempo. El valor recomendado es de 4096. Paraefectuar los cambios se debe reiniciar HDFS.

$ sudo vi /etc/hadoop/conf/hdfs-site.xml

# Añadir al final del fichero “:$”

<property>

<name>dfs.datanode.max.xcievers</name>

<value>4096</value>

</property>

# Reiniciar HDFS

$ for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $xrestart ; done

8.3. Activar Hbase en modo Pseudodistribuído

Para activar Hbase en modo pseudodistribuído se debe indicar en el archivo de configuración hbase-site.xml el hostname del nodo NameNode de HDFS, descrito en la propiedad fs.defaultFS del fichero de configuración de Hadoop core-site.xml. En el ejemplo se utiliza el host local hdfs://localhost:8020

$ sudo vi /etc/hbase/conf/hbase-site.xml

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

</property>

<property>

<name>hbase.rootdir</name>

<value>hdfs://localhost:8020/hbase</value>

</property>

8.3.1. Crear directorio en HDFS

Antes de iniciar el nodo maestro de HBase es necesario crear el directorio en HDFS. El nodomaestro se ejecuta como el usuario hbase por tanto también hay que asignarle los permisosnecesarios. Con HDFS en ejecución.

$ sudo -u hdfs hadoop fs -mkdir /hbase

$ sudo -u hdfs hadoop fs -chown hbase /hbase

$ sudo -u hdfs hadoop fs -ls / | grep hbase

Page 19: Administración de Apache Hadoop a través de Cloudera

8.3.2. Instalación de servidores adicionales

Una vez configurado se necesita instalar los servidores que forman un clúster de HBase en mododistribuído o distribuído:

• ZooKeeper: Proporciona un servicio centralizado de alta disponibilidad para la gestión delclúster. Permite a los clientes localizar los servidores o asegurar que un solo maestro estéactivo a la vez. Para un clúster pequeño se recomiendo instalar ZooKeeper en el NameNode.

# Actualizar sistema e instalar cliente y servidor

$ sudo apt-get update && sudo apt-get upgrade$ sudo apt-get install zookeeper-server# Nota: Versiones posteriores a Debian 6 squeeze podrían # tener problemas de dependencia con algún paquete.

# Iniciar servicio$ sudo service zookeeper-server start

• HBase Master: El servicio de nodo maestro para el cliente Hbase.

$ sudo apt-get install hbase-master

# Iniciar servicio$ sudo service hbase-master start

• HBase RegionServer: Es la parte de Hbase que recibe los datos y procesa las solicitudes. Seejecuta en todos los nodos esclavos pero no en el nodo maestro.

$ sudo apt-get install hbase-regionserver

# Iniciar servicio$ sudo service hbase-regionserver start

Una vez iniciados los servicios adicionales, HBASE se encuentra disponible en modo pseudo-distribuído. Se pueden comprobar los procesos independientes de Java con el comando jps:

$ sudo jps

Deben aparecer los procesos HMaster, HregionServer y QuorumPeerMain.

8.4. Ejemplo de HBASE

Se puede acceder a HBASE a través del cliente Shell instalado por defecto en el paquete hbase.

$ hbase shell

A continuación se detallan los pasos de creación de una tabla con el cliente shell de HBase.

# Crear tabla test con columna data

Page 20: Administración de Apache Hadoop a través de Cloudera

create 'test', 'data'

# Verificar la tabla creada

list 'test'

#Insertar filas

put 'test', 'row1', 'data:1', 'value1'

put 'test', 'row2', 'data:2', 'value2'

put 'test', 'row3', 'data:3', 'value3'

# Verificar datos en tabla

scan 'test'

# Obtener el dato de una fila

get 'test', 'row1'

# Eliminar tabla

disable 'test'

drop 'test'

9. Flume

Apache Flume es un servicio que permite distribuír y mover gran cantidad de ficheros log dedistintas fuentes origen a un sistema de almacenamiento distribuído de forma eficiente.

9.1. Funcionamiento de Flume

Flume funciona como un servicio de transporte de información de logs de servidores a travésdistintos agentes para almacenar la información y enviarla posteriormente a un clúster de Hadoop.

En la figura del ejemplo, un agente se encarga de obtener la información enviada por elservidor web a través de la rotación de logs en Unix con el proceso rsyslog y el agente se encarga deenviar la información de distintos logs serializada a HDFS.

Flume soporta encriptación y compresión de los datos transferidos. En caso de que el agentecaiga, los logs enviados por el servidor se mantienen en el origen o source. Los datos se suelen

Page 21: Administración de Apache Hadoop a través de Cloudera

guardar en el agente hasta alcanzar un tamaño máximo para así optimizar el uso de los bloques deHDFS, por defecto 64 Mbytes aunque se suele configurar con 128 Mbytes por bloque.

Para enviar los datos a HDFS, además se Sink se suele utilizar Apache Avro para serializar losdatos en la transferencia entre agentes sin perder el formato.

Es posible definir varios agentes flume y un recolector. En este caso se suele utilizar Avro paraserializar los datos y no perder el formato. De esta manera se realiza un reparto eficiente de losdistintos logs de varios servidores en varios agentes. El recolegor de flume se encarga de recoger lainformación recogida y serializada para transferirla a HDFS.

9.2. Instalación y Configuración

A continuación se detallan los pasos para realizar la instalación de Flume.

$ sudo apt-get install flume-ng

Para instalar el agente de Flume e iniciar automáticamente Flume en el inicio del sistema operativo.

$ sudo apt-get install flume-ng-agent

Para instalar la documentación de Flume.

$ sudo apt-get install flume-ng-doc

Para la configuración Se incluye una plantilla de configuración base en /etc/flume-ng/conf/flume-conf.properties.template y en /etc/flume-ng/conf/flume-env.sh.template. Copiar los ficheros plantilla a la configuración de Flume.

$ sudo cp /etc/flume-ng/conf/flume-conf.properties.template conf/flume.conf

En flume.conf se definen las propiedades que determinan las fuentes (sources) de datos que recompilar, sinks o canales Avro donde de flujo del agente. Por defecto estas propiedades están configuradas para trabajar con una única fuente de datos, un logger sink y un único canal de memoria.

Page 22: Administración de Apache Hadoop a través de Cloudera

Opcionalmente se pueden determinar variables de entorno para flume-env.sh. El ejecutable flume-ngutiliza el fichero flume-env.sh para ejecutar las variables de entorno que especifiquen opciones del agente ejecutado en un proceso Java como aumentar el tamaño del heap por defecto u opciones de depuración vía JAVA_OPTS para el desarrollo de componentes de Flume-ng.

$ sudo cp /etc/flume-ng/conf/flume-env.sh.template conf/flume-env.sh

Verificar la instalación de flume

$ flume-ng help

Ejecutar el agente Flume-ng

$ sudo service flume-ng-agent start

También se pueden definir el fichero de configuración con el comando flume-ng.

$ /usr/bin/flume-ng agent -c <config-dir> -f <config-file> -n <agent-name>

Donde -c indica la ruta de configuración, -f el fichero y n el nombre del agente. Por ejemplo:

$ /usr/bin/flume-ng agent -c /etc/flume-ng/conf -f /etc/flume-ng/conf/flume.conf-n agent

10. Sqoop

Apache Sqoop es una herramienta de integración de datos en HDFS a partir de fuentes deorígenes de bases de datos relacionales. Permite importar o exportar una base de datos en HDFS.Para realizar las tareas requiere de la instalación del driver JDBC del gestor de bases de datos, eldriver está incluído por los diferentes fabricantes y no se encuentra en el paquete de Sqoop.

Soporta varios gestores:

• MySQL

• Oracle

• Netezza

• Microsoft SQL Server

• Teradata

Sqoop se encarga de examinar las tablas de la BD y generar clases Java de forma automática.Existen dos versiones disponibles de Sqoop en los repositorios de Cloudera:

• Sqoop: Importación/Exportación de Bds a través del drive JDBC del fabricante. Incluye lasfuncionalidades descritas anteriormente. Se trata de un programa cliente que accede a labase de datos relacional y a Hadoop.

• Sqoop2: Permite la instalación de Sqoop como un servicio. De este modo se puede utilizarSqoop desde varios hosts sin necesidad de instalar todos los drivers JDBC y el cliente deSqoop en todos los hosts. Añade una interfaz web y servicio REST a través de dosinterfaces:

Page 23: Administración de Apache Hadoop a través de Cloudera

◦ WebHDFS: No soporta HDFS con alta disponibilidad o HA.

◦ Http FS: Opción recomendada, soporta HA.

Ambas interfaces soportan lectura/escritura sobre HDFS. Puede ser accesible desde unscript, requiere un cliente con acceso a los DataNodes en el clúster.

Para utilizar los servicios REST en Sqoop2 se requiere habilitarlos en la configuración deHDFS, en el fichero hdfs-site.xml.

$ sudo vi /etc/hadoop/conf/hdfs-site.xml

<propertie>dfs.webhdfs.enable</propertie>

<value>yes</value>

Se puede acceder por interfaz web al servicio rest webhdfs a través de la url:http://localhost:5007/webhdfs/

10.1. Instalación y configuración de HBase REST y Apache Thrift

Para acceder a una base de datos HBase existen los paquetes de HBase Rest y Thrift, APIS parautilizar HBase a través del servicio web REST y Thrift en lugar de utilizar un driver JDBCespecífico para la base de datos.

10.1.1. Instalación de HBase REST.

Para la instalación del paquete base de HBase REST ejecutar en terminal el siguiente comando.

$ sudo apt-get install hbase-rest

# Iniciar el servicio$ sudo service hbase-rest start

El script de inicio de Hbase utilizar por defecto el puerto 8080. Es posible cambiar el puerto en casode conflicto con otras aplicaciones ejecutadas en el mismo host, por ejemplo jetty o tomcat. Para modificar el puerto añadir en hbase-site.xml:

$ vi /etc/hbase/conf/hbase-site.xml<property> <name>hbase.rest.port</name> <value>60050</value></property>

También se puede utilizar la variable de entorno HBASE_REST_OPTS para pasar otros parámetrosen hbase-env.sh al servicio REST de JVM.

10.1.2. Instalación de HBase Thrift

El servicio de HBase Thrift es una alternativa para acceder e interactuar con HBASEindependientemente del lenguaje utilizado. El servicio Thrift es multiplataforma y más eficiente queREST en muchos casos. No debería de ser instalado en el mismo nodo donde está el NameNode yJobTracker.

Page 24: Administración de Apache Hadoop a través de Cloudera

La instalación se realizar a través de los siguientes pasos:

$ sudo apt-get install hbase-thrift

$ sudo service hbase-thrift start

Para más información sobre el servicio Thrift visitar la página http://incubator.apache.org/thrift/

10.2. Instalación de Sqoop

Para la instalación de sqoop solo se requiere la instalación del cliente y añadir los drivers JDBCde las bases de datos que se quieren importar.

$ sudo apt-get install sqoop

# Comprobar la instalación de sqoop

$ sqoop help

$ sqoop version

# Instalar la base de datos MySQL

$ sudo apt-get install mysql

# Durante la instalación se pedirá introducir la contraseña de root.

# Instalar los drivers JDBC de MySQL

$ sudo apt-get install libmysql-java

# Localizar la ubicación del driver

$ sudo dpkg -L libmysql-java

# Crear enlace simbólico del conector de MySQL en la ruta de configuraciónde Sqoop.

$ sudo ln -s /usr/share/java/mysql-connector-java.jar /usr/lib/sqoop/lib/

Page 25: Administración de Apache Hadoop a través de Cloudera

10.3. Importar una Base de Datos

Con Sqoop instalado y los drivers JDBC necesarios y copiados en la ruta del cliente se puedeimportar una base de datos. A continuación se detallan los pasos de la importación de una base dedatos de MySQL:

1. Crear una base de datos de prueba.

$ sudo service mysql start

$ mysql -u root -p

mysql> create database translator DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

mysql> grant select,insert,update,delete ON translator.* TO training@localhost IDENTIFIED BY 'training';

mysql> quit

2. Crear tablas y datos de pruebas. Para ello se utiliza un script existente con una base de datosque contiene cerca de 10.000 registros en la tablas binary_texts.

$ mysql -u training -p translator < script.sql

$ mysql -u training -p translator

mysql> show tables;

3. Importar de la base de datos una tabla del primer registro.

# Importar datos de binary_files

$ sqoop import --connect jdbc:mysql://localhost/translator --table binary_files--columns "id, filename, description" --fields-terminated-by '\t' --usernametraining --password training

# Importados datos de binary_texts

$ sqoop import --connect jdbc:mysql://localhost/translator --table binary_texts--columns "id, binary_file_id, english, spanish, modified" --fields-terminated-by '\t' --inline-lob-limit 1024 --username training --password training

El parámetro --inline-lob-limit indica que los datos no sean almacenen fuera de la línea hastasuperar los 1024 bytes.

Cuando se realiza la ejecución de importación se lanza automáticamente un trabajo Map, sin la faseReduce.

Page 26: Administración de Apache Hadoop a través de Cloudera

Los datos de salida se guardan automáticamente en la ruta de HDFS /user/{usuario}/{tabla} donde{usuario} es el usuario que ejecuta el comando sqoop import y {tabla}, el nombre de la tablaimportada.

En la ruta del usuario del sistema operativo se crea una clase java con el nombre de la tablaimportada que contiene el MapReduce.

4. Ver el contenido importado en HDFS.

$ hadoop fs -ls binary_files

$ hadoop fs -tail binary_texts/part-m-00000

Page 27: Administración de Apache Hadoop a través de Cloudera

En los ficheros part-m-xxxxx estan los datos importados. La m indica que son salidas de tareas tipoMap.

11. Hive

Hive fue desarrollado por el equipo de Facebook para realizar el análisis de gran canditada dedatos lanzando trabajos MapReduce automáticamente a través de sentencias SQL.

Hive traduce consultas de SQL en trabajos MapReduce.

Para su funcionamiento convierte las consultas SQL en HiveQL y de este formato autogeneraclases java para ejecutar trabajos MapReduce. No permite operaciones de modificación comoupdate o delete, pero sí se pueden realizar inserts.

Requiere de una Metastore donde se guarda la relación de los datos con los que se quieretrabajar indicando sus columnas, nombre y separadores. Para ello utiliza una base de datosrelaciones en MySQL. Para comunicarse con la base de datos necesita el drive JDBC.

La Metastore puede ser configurada de varios modo para un usuario local o ser compartida portodos los usuarios con acceso.

• Embedded Mode: Todo en un único proceso. Implementación por defecto. Utiliza una basede datos Apache Derby, la ejecución del MetaStore y la base de datos están dentro delproceso de Hive. Solo admite un usuario activo en cada ejecución. No se aconseja su uso enproducción.

• MetaStore Local: El proceso de MetaStore se ejecuta en el mismo proceso que el deHiveServer pero la base de datos se ejecuta en un proceso separado y puede estar en un hostseparado. La comunicación se realiza a través de JDBC. Soporta varios gestores de bases dedatos como Oracle, MySQL o PostgreSQL.

• MetaStore Compartido o Remoto: MetaStore ejecuta su propip proceso de JVM.HiveServer, Impala y otros servicios se comunican con él a través de la API de red Thrift. Elservicio de MetaStore se comunica con la base de datos a través de JDBC. Si múltiplesusuarios ejecutan Hive, se debe configurar en modo compartido.

Existe la versión Hive2 que funciona como servicio además de como cliente. Se trata de un servidordonde los clientes acceden al servidor Hive2. Los clientes no se conectan directamente al MetaStoreni al cluster de Hadoop aportando mayor segudad por restricción de acceso directo al MetaStrore y

Page 28: Administración de Apache Hadoop a través de Cloudera

al clúster y tiene una configuración más sencilla. Soporta ODBC para conectarse al MetaStoreademás de JDBC. Hive2 soporta Thrift para comunicarse con los clientes.

11.1. Instalación de Hive

En este apartado se describen los pasos de la instalación de Hive versión cliente.

# Instalar cliente de Hive

$ sudo apt-get install hive

# instalar MetaStore

$ sudo apt-get install hive-metastore

A continuación se realiza la configuración de MetaStore, servicio que almacena los metadatosnecesarios para las tablas y particiones de datos de Hive en una base de datos relacional. Para ellose configurará MetaStore en modo local con una base de datos MySQL.

# Instalar los paquetes$ sudo apt-get install mysql-server

# Iniciar el servicio de MySQL$ sudo service mysql start

# Instalar el driver jdbc$ sudo apt-get install libmysql-java$ sudo ln -s /usr/share/java/mysql-connector-java.jar /usr/lib/hive/lib

# Si no se ha configurado la contraseña de root para MySQL$ sudo /usr/bin/mysql_secure_installation

Con MySQL y el driver JDBC instalados, falta crear la base de datos para MetaStore y el usuario con acceso. El esquema de la base de datos se encuentra en la ruta de instalación de Hive.

# Por defecto arranca en inicio# Para desactivar el inicio automatico# sudo update-rd.d -f mysql remove

# Para activarlo de nuevo$ sudo chkconfig mysql on

# Acceder a MySQL con privilegios de administrador$ mysql -u root -p

mysql> CREATE DATABASE metastore;mysql> USE metastore;mysql> SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-0.10.0.mysql.sql;

Page 29: Administración de Apache Hadoop a través de Cloudera

También es necesario crear una cuenta de usuario con acceso a la base de datos MySQL para acceder a la MetaStore. Es muy importante evitar que esta cuenta de usuario tenga permisos de creación o modificación de tablas en el esquema de la base de datos de MetaStore.

mysql> CREATE USER 'hive'@'localhost' IDENTIFIED BY 'password';...mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'hive'@'localhost';mysql> GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES,EXECUTE ON metastore.* TO 'hive'@'localhost';mysql> FLUSH PRIVILEGES;mysql> quit;

Una vez está creada la base de datos y el usuario con acceso a ella se procede a configurar MetaStore en el fichero de configuración hive-site.xml. Las propiedades que vienen por defecto en el fichero se sustituyen por las indicadas a continuación.

$ sudo vi /etc/hive/conf/hive-site.xml<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost/metastore</value> <description>the URL of the MySQL database</description></property>

<property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value></property>

<property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value></property>

<property> <name>javax.jdo.option.ConnectionPassword</name> <value>password</value> <description>Indicar la contraseña de la bd</description></property>

<property>

Page 30: Administración de Apache Hadoop a través de Cloudera

<name>datanucleus.autoCreateSchema</name> <value>false</value></property>

<property> <name>datanucleus.fixedDatastore</name> <value>true</value></property>

<property> <name>datanucleus.autoStartMechanism</name> <value>SchemaTable</value></property>

<property> <name>hive.metastore.uris</name> <value>thrift://127.0.0.1:9083</value> <description>IP address (or fully-qualified domain name) and port of the metastore host</description></property>

La propiedad hive.metastore.uris debe estar en todos los host cliente, metastore y HiveServer. Las demás propiedades solo son necesarias en el nodo donde se instale el paquete de MetaStore.

Es necesario crear una ruta temporal y otra para el MetaStore en el sistema de ficheros de HadoopHDFS.

# Crear tmp en HDFS si no existe

$ sudo -u hdfs hdfs dfs -ls /tmp

$ sudo -u hdfs hdfs dfs -mkdir /tmp

$ sudo -u hdfs hdfs dfs -chmod 1777 /tmp

# Crear directorio para hive Metastore

$ sudo -u hdfs hdfs dfs -mkdir /user/hive/warehouse

$ sudo -u hdfs hdfs dfs -chmod 1777 /user/hive/warehouse

$ sudo -u hdfs hdfs dfs -ls /user/hive

Instalar e iniciar el servicio de MetaStore

$ sudo apt-get install hive-metastore

$ sudo service hive-metastore start

Iniciar hive

$ hive

hive> SHOW TABLES;

hive> quit;

Page 31: Administración de Apache Hadoop a través de Cloudera

Comprobar en otra terminal que el servicio está ejecutándose en la JVM con jps y con ps (RunJar)

$ sudo jps

$ ps -ef | grep RunJar

11.2. Ejemplo en Hive

Para ejecutar un ejemplo en Hive se necesitan tener datos estructurados en un formatocualquier en HDFS. En este ejemplo se utilizarán los datos importados de la base de datostranslator del capítulo de Sqoop.

Los datos que se van a utilizar son los de la tabla binary_files almacenados en la ruta/user/hdfs/binary_texts

Hay que tener en cuenta donde se situa cada columna en los ficheros de la ruta y cual es laseparación de cada campo. En el ejemplo, la primera columna hace referencia al campo english y lasegunda la columna spanish. Ambas columnas están separadas por una tabulación (\t). Los ficherosque comienzan por “_” se ignoran.

Desde un terminal ejecutar hive y crear la tabla que relacionará los datos en HDFS.

$ hive

hive> CREATE EXTERNAL TABLE translator (id_text INT, binary_file_id INT, englishSTRING, spanish STRING, created TIMESTAMP) ROW FORMAT DELIMITED FIELDSTERMINATED BY '\t' LOCATION '/user/david/binary_texts';

La ruta indicada en LOCATION tiene que ser absoluta.

Se pueden eliminar tablas creadas en el MetaStore

hive> drop table borrar_tabla;

Ahora los datos de la ruta indicada están relacionados con sus metadatos en MetaStore y se puedenejecutar trabajos MapReduce.

Page 32: Administración de Apache Hadoop a través de Cloudera

hive> SELECT COUNT(*) FROM translator;

El resultado se muestra al finalizar las tareas Reduce junto con el tiempo de ejecución total.

hive> select * from translator where id_text=5;

También se pueden realizar consultas más complejas con JOIN, GROUP, ORDER, y condicionesWHERE o HAVING.

Page 33: Administración de Apache Hadoop a través de Cloudera

12. Impala

Impala es una herramienta de código abierto creada por Cloudera que permite a los usuariosconsultar los datos en HDFS usando HiveQL. Utiliza la misma MetaStore compartida de Hive. Ladiferencia principal con Hive es que no lanza trabajos MapReduce.

Los resultados de las consultas de Impala son significativamente más rápidos que en Hive,entre 10 o 50 veces más rápido.

Tiene sus propios demonios y se componente de los siguientes elementos:

• Clientes: donde se ejecutan las consultas. Impala Shell

• Hive MetaStore: información almacenda relacionada con los datos que se analizan.

• Cloudera Impala: proceso ejecutado en los DataNodes que coordina y ejecuta las consultas.Cada instancia de Impala puede recibir, planificar y coordinar consultas solicitadas desde losclientes.

• HBase y HDFS: donde se almacenan los datos a analizar.

Incluye soporte para los principales gestores de bases de datos a través de sus drivers JDBC.También soporta ODBC.

12.1. Instalación de Impala

Impala se instala desde un repositorio aparte del resto de aplicaciones. Para instalar Impalaantes es necesario añadir el repositorio de Impala en la lista de fuentes de paquetes de Cloudera.

$ sudo vi /etc/apt/sources.list.d/cloudera.list

deb http://archive.cloudera.com/impala/debian/squeeze/amd64/impala squeeze-impala1 contribdeb-src http://archive.cloudera.com/impala/debian/squeeze/amd64/impala squeeze-impala1 contrib

$ sudo apt-get update

Impala crea y utiliza el usuario y grupo impala. Se crea automáticamente durante la instalación y nose debe eliminar.

Page 34: Administración de Apache Hadoop a través de Cloudera

Por otro lado, para el uso de la papelera .trash en HDFS a la hora de eliminar tablas de la MetaStore(DROP TABLE) con Impala Shell se debe crear la carperta del usuario en /user/impala.

$ sudo -u hdfs hadoop fs -mkdir /user/impala

$ sudo -u hdfs hadoop fs -chown impala /user/impala

Por último, Impala no debe ser ejecutado con el usuario root ya que este no tiene permitido las lecturas directas, afectando negativamente en el rendimiento de Impala.

Antes de instalar Impala es necesario tener el MetaStore local o compartido de Hive. Para la instalación de esta memoria se utiliza el MetaStore instalado en la sección de Hive.

Cloudera recomienda las siguitentes propiedades de configuración en Hive.

$ sudo vi /etc/hive/conf/hive-site.xml

<property><name>hive.metastore.uris</name><value>thrift://127.0.0.1:9083</value><description>La IP del host MetaStore. Ya añadido en la sección de la

instalación de Hive.</description></property>

<property><name>hive.metastore.client.socket.timeout</name><value>3600</value><description>MetaStore Client socket timeout in seconds</description>

</property>

A continuación se instalan los paquetes de Impala

$ sudo apt-get install impala # Binaries for daemons$ sudo apt-get install impala-server # Service start/stop script$ sudo apt-get install impala-state-store # Service start/stop script$ sudo apt-get install impala-catalog # Service start/stop script

No se recomienda instalar Impala en nodos NameNode de un clúster ya que requiere de una gran cantidad de memoria para ejecturar las consultas causando un impacto negativo en el proceso del NameNode.

Para instalar el cliente de Impala en los host que realizarán las consultas ejecutar el siguiente comando.

$ sudo apt-get install impala-shell

Impala tiene sus propios procesos en ejecución:

• impalad: demonio de Impala. Planifica y ejecuta las consultas contra HDFS o Hbase. Ejecuta un proceso demonio en cada nodo del clúster que sea DataNode.

• statestored: Maestro que monitoriza las instancias de Impala en los DataNode. Ejecuta una instancia de este demonio en el nodo del clúster donde está instalado.

• catalogd: Servicio de coordinación de los metadatos que envia cambios DDL y DML a todos

Page 35: Administración de Apache Hadoop a través de Cloudera

los nodos, de esta forma nuevas tablas o carga de nuevos datos son visibles inmediatamente por las consultas a través de los nodos de Impala.

• impala-shell: Interfaz de línea de comandos para ejecutar las consultas.

12.2. Configuración de Impala

Configurar en todos los nodos Impala DataNode las siguientes propiedades en core-site.xml y hdfs-site.xml

$ sudo vim /etc/hadoop/conf/core-site.xml

<!-- IMPALA Config --> <property> <name>dfs.client.read.shortcircuit</name> <value>true</value> </property> <!-- IMPALA Config -->

$ sudo vim /etc/hadoop/conf/hdfs-site.xml

<!-- IMPALA Config --> <property> <name>dfs.client.read.shortcircuit</name> <value>true</value></property>

<property> <name>dfs.domain.socket.path</name> <value>/var/run/hadoop-hdfs/dn._PORT</value></property>

<property> <name>dfs.client.file-block-storage-locations.timeout</name> <value>3000</value></property><!-- IMPALA Config -->

Copiar los ficheros de configuración del cliente Hive hive-site.xml y HDFS, core-site.xml y hdfs-site.xml, en la ruta de configuración de Impala /etc/impala/conf.

$ sudo cp /etc/hive/conf/hive-site.xml /etc/impala/conf/

$ sudo cp /etc/hadoop/conf/core-site.xml /etc/impala/conf/

$ sudo cp /etc/hadoop/conf/hdfs-site.xml /etc/impala/conf/

$ sudo cp /etc/hadoop/conf/log4j.properties /etc/impala/conf/

Reiniciar el DataNode

$ sudo service hadoop-hdfs-datanode restart

Page 36: Administración de Apache Hadoop a través de Cloudera

12.3. Ejemplo de Impala

En /etc/default/impala añadir los siguientes parámetros de configuración

$ sudo vi /etc/default/impala

# El nombre del host que ejecuta la instancia de Impala State Store (impala-state-store)

IMPALA_STATE_STORE_HOST=localhost

# Limitar la memoria utilizada por las consultas de Impala en los DataNode al50% de la memoria disponible con -mem_limit.

# Añadir la última línea con la barra invertida en la anterior.

IMPALA_SERVER_ARGS=" \

-log_dir=${IMPALA_LOG_DIR} \

-state_store_port=${IMPALA_STATE_STORE_PORT} \

-use_statestore \

-state_store_host=${IMPALA_STATE_STORE_HOST} \

-be_port=${IMPALA_BACKEND_PORT} \

-mem_limit=50%"

Si se está usando la versión de Java OpenJDK 7 en lugar de Oracle JDK 1.7 será necesario añadirtambién al final del fichero de configuración estas lineas.

# Soporte para OpenJDK

export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")

export LD_LIBRARY_PATH=/usr/lib:$JAVA_HOME/jre/lib/amd64/server

Además de quitar la ruta de libjvm.so utilizada por defecto

$ sudo mv /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/jamvm/libjvm.so /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/jamvm/libjvm.so.bak

Iniciar los servicios de MySQL, MetaStore y reiniciar los de Impala

$ sudo service mysql start

$ sudo service hive-metastore start

$ sudo service impala-server restart

$ sudo service impala-state-store restart

$ sudo service impala-catalog restart

Revisar los logs de Impala y los procesos de JVM

$ sudo tail /var/log/impala/impala-server.log

$ sudo tail /var/log/impala/impala-state-store.log

$ ps aux | grep impala

Page 37: Administración de Apache Hadoop a través de Cloudera

En la dirección http://localhost:25000/ se puede acceder a la interfaz web de Impala Server dondelocalhost es el hostname donde está instalado.

Iniciar los servicios de MySQL y MetaStore. Iniciar además los servicios de Hadoop HDFS si noestán iniciados.

$ sudo service mysql start

$ sudo service hive-metastore start

Desde un terminal ejecutar el cliente de impala y conectarse a servidor.

$ impala-shell

[Not connected] > CONNECT localhost;

Si al ejecutar una consulta SQL se muestra el siguiente error es debido a que el catálogo de Impalaaún no se ha actualizado a partir de la MetaStore actual.

Ejecutar las mismas consultas SQL que en el ejemplo de Hive.

[localhost:21000] > select count(*) from translator;

Page 38: Administración de Apache Hadoop a través de Cloudera

Cada vez que se ejecuta una misma consulta, los resultados se almacenan en el catálogo. Si se repitela misma consulta sobre los mismos datos, el resultado se obtiene en menor tiempo.

[localhost:21000] > select * from translator where id_text=5;

Como se puede apreciar el resultado de contar todas las filas dura menos de un segundo frente a los30 o 60 segundos que tarda en ejecutar la misma consulta en Hive.

13. Pig

Al igual que Hive o Impala, Pig es otra herramienta de análisis de gran cantidad de datos através de consultas. La diferencia es que no utiliza sentencias SQL sino que tiene su propiolenguaje.

Inicialmente desarrollado por Yahoo! y liberado para la Apache Software Fundation. Utiliza unlenguaje de control de flujo llamado Pig Latin que permite realizar consultas en un clústerdistribuído de Hadoop.

Se supone que el lenguaje es más sencillo y facilita realizar análisis de datos a personas que noconocen la sintaxis de SQL. Se trabaja con datos estructurados donde se definen bolsas en lugar detablas. Cada bolsa carga un conjunto de datos de HDFS.

13.1. Instalación de Pig

Para instalar Pig ejecutar.

Page 39: Administración de Apache Hadoop a través de Cloudera

$ sudo apt-get install pig

Pig utiliza automáticamente la configuración activa de Hadoop. Una vez instalado, se puede utilizar el cliente Grunt Shell.

Opcionalmente se puede configuran las variables de entorno de Pig indicando la ruta de librerías de HBase o Zookeeper separadas por dos puntos.

$ export PIG_CONF_DIR=/usr/lib/pig/conf$ export PIG_CLASSPATH=/usr/lib/hbase/hbase-0.94.6-cdh4.5.0-security.jar:/usr/lib/zookeeper/zookeeper-3.4.5-cdh4.4.0.jar

13.2. Ejemplo de Pig

Para realizar el ejemplo de Pig se utilizan dos tablas de la base de datos translator de MySQL.La tabla binary_files contiene el registros de nombres de ficheros, la tabla binary_texts contienetextos en inglés con su traducción al español. Cada registro de binary_texts pertenece a un registrode binary_files y su relación se establece con la columna binary_files_id.

Con los datos previamente almacenados en HDFS en la sección de Scoop, iniciar la shell grunt de Pig.

$ pig

grunt> ls

Cargar los datos de los ficheros en bolsas texts y files.

grunt> texts = LOAD 'binary_texts' AS (id_text:int, binary_file_id:int, english:chararray, spanish:chararray, create_date:chararray);

grunt> files = LOAD 'binary_files' AS (id_file:int, file:chararray, desc:chararray);

A contuación se crea una tercera bolsa con los datos de ambas tablas relacionados.

grunt> jnd = JOIN files BY id_file, texts BY binary_file_id;

Finalmente, se crean los filtros de búsqueda y se guarda el resultado en una ubicación.

grunt> filtro = FILTER jnd BY id_text == 5;

grunt> STORE filtro INTO 'pigout1';

Cuando se ejecuta la orden STORE se lanza un trabajo MapReduce.

Page 40: Administración de Apache Hadoop a través de Cloudera

El resultado de la consulta se almacena en el directorio indicado pigout1.

En el resultado se muestran todos los datos de la línea encontrada en binary_texts con el identificador 5 y los datos de la línas del registro asociado en binary_files.

Para contar el número de registros se utiliza la sentencia GROUP.

grunt> texts = LOAD 'binary_texts' AS (id_text:int, binary_file_id:int, english:chararray, spanish:chararray, create_date:chararray);

grunt> texts_group = GROUP texts ALL;

grunt> texts_count = FOREACH texts_group GENERATE COUNT(texts);

grunt> STORE texts_count INTO 'pigout2';

El resultado se almacena en la ruta indicada pigout2.

La ventaja de Pig frente a Impala y Hive es que los datos referenciados pueden contener saltos de línea sin que afecte al resultado. En las pruebas realizadas con las tres herramientas, Hive e Impala obtenian resultados distintos cuando los datos importados tenían saltos de líneas provocando que unregistro se almacenase en más de una línea en los ficheros. En cambio Pig obtenía los resultados

Page 41: Administración de Apache Hadoop a través de Cloudera

correctos y realizaba perfectamente la comparación where con los campos correspondientes a pesar de los saltos de línea.

Como desventaja, requiere por parte del usuario el aprendizaje del lenguaje Pig Latin. Además, los datos no se muestran en pantalla de grunt, sino que almacenan en directorios salida de HDFS.

14. Hue

Hue Server es un contenedor web de aplicaciones de Hadoop que permite gestionar yadministrar los servicios de diferentes aplicaciones a través de su interfaz web. El nodo con Hueinstalado se comunica con los diferentes servicios del clúster de Hadoo.

Hace más cómodo el uso de las herramientas de Hadoop para los usuarios mediante un navegador ypermite restringir acceso al clúster desde la interfaz web a través de usuarios y grupos. Tambiénincluye soporte para control de acceso a través de bases de datos (por defecto SQLite3) y LDAP.

Incluye las siguientes opciones de navegación:

• Hive UI. Permite acceder al shell de Hive. Para su uso se requier añadir los ficheros deconfiguración de Hive en los de Hue.

• Impala UI: Permite acceder al shell de Impala. Para su uso se requier añadir los ficheros deconfiguración de Impala en los de Hue.

• File Browser: Permite acceder a los datos en HDFS. Para ello es necesario activar el servicioREST bien con el protocolo webHDFS o HttpFS en la configuración de HDFS.

• Job Browser: Permite navegar por los trabajos lanzados al JobTracker. Requiere instalar losplugins de Hue en el JobTracker.

• Job Designer

• Oozie WorkFlow Editor

• Shell UI

14.1. Instalación de Hue

Para su instalación ejecutar la siguiente línea en un terminal de uno de los nodos.

$ sudo apt-get install hue

Para el acceso a HDFS a través del HDFS Browser instalar uno de los dos servicios REST.

• Para webHDFS (no incluye soporte de NameNode alta disponibilidad o HA)

Page 42: Administración de Apache Hadoop a través de Cloudera

$ sudo vi /etc/hadoop/conf/hdfs-site.xml

<propertie>dfs.webhdfs.enable</propertie>

<value>yes</value>

$ sudo service hadoop-hdfs-namenode restart

• Para HttpFS (incluye soporte para HA)

$ sudo apt-get install hadoop-httpfs

$ sudo service hadoop-httpfs start

# Editar permisos de acceso a HttpFS

$ sudo vi /etc/hadoop/conf/core-site.xml

<property>

<name>hadoop.proxyuser.httpfs.hosts</name>

<value>monkey</value>

</property>

<property>

<name>hadoop.proxyuser.httpfs.groups</name>

<value>*</value>

</property>

# Comprobar acceso a la API

curl -s "http://localhost:14000/webhdfs/v1?op=GETHOMEDIRECTORY&user.name=keri" | python -m json.tool

$ sudo service hadoop-hdfs-namenode restart

Para más información sobre la instalación de HttpFS ir la url https://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/latest/CDH4-Installation-Guide/cdh4ig_topic_25_5.html

A continuación se definen los parámetros de configuración en la ruta /etc/hue/hue.ini.

$ sudo vi /etc/hue/hue.ini

webhdfs_url=http://localhost:14000/webhdfs/v1/

jobtracker_host=localhost

server_host=localhost

Para utilizar Hive UI e Impala UI es necesario añadir los ficheros de configuración de ambosservicios en la configuración de Hue.

$ sudo cp /etc/hive/conf/hive-site.xml /etc/hive/conf

$ sudo service hue start

Copiar los plugins de JobTracker de Hue al JobTracker

$ sudo cp /usr/share/hue/desktop/libs/hadoop/java-lib/hue-plugins* /usr/lib/hadoop-0.20-mapreduce/lib/

# Configurar los plugins añadidos en el JobTracker

Page 43: Administración de Apache Hadoop a través de Cloudera

$ sudo vi /etc/hadoop/conf/mapred-site.xml

<property>

<name>jobtracker.thrift.address</name>

<value>localhost:9290</value>

</property>

<property>

<name>mapred.jobtracker.plugins</name>

<value>org.apache.hadoop.thriftfs.ThriftJobTrackerPlugin</value>

</property>

# Reiniciar el JobTracker

$ sudo service hadoop-0.20-mapreduce-jobtracker restart

# Reiniciar los TaskTrackers

$ sudo service hadoop-0.20-mapreduce-tasktracker restart

Crear el usuario con acceso a la interfaz de Hue.

$ sudo /usr/sbin/useradd hue_admin

Acceder a la interfaz ir a http://localhost:8888 e introducir la contraseña del usuario hue_adminindicada en el paso anterior.

NOTA: En modo distribuído con varios clústers sustituír “localhost” por en hostname del nododonde están instalados los diferentes servicios JobTracker, TaskTracker, MetaStore, Hive, Impala yHue.

15. Otras Herramientas para Hadoop

15.1. Oozie

El planificador Oozie es una herramienta para el diseño y la planificación de flujos de trabajo.Gestiona y coordina trabajos de Apache Hadoop.

Oozie se compone de tres componentes principales:

• Oozie Workflow: los trabajos de Oozie Workflow se planifican mediante acciones definidasen grafos DAG (Directed Acyclical Graphs).

• Ooozie Coordinator: el coordinador de Oozie lanza estos trabajos según cada unidad tiempoy la disponibilidad de los datos.

• Oozie Bundle: Agrupación de un conjunto de trabajos que son gestionados como un únicotrabajo.

En resumen Oozie es un servicio extensible, escalable y contenedor de datos que permiteharmonizar dependencias de varios trabajos ejecutados en Hadoop como un único trabajoMapReduce.

Para instalar Oozie se necesitan los paquete del servicio y el cliente:

$ sudo apt-get install oozie$ sudo apt-get install oozie-client

Page 44: Administración de Apache Hadoop a través de Cloudera

Por defecto está configurado para MapReduce v1 con la variable de entornoCATALINA_BASE=/usr/lib/oozie/oozie-server-0.20 definida en el fichero /etc/oozie/conf/oozie-env.sh.

Para utilizar Oozie con YARN (MapReduce v2) cambiar el valor de la variable por/usr/lib/oozie/oozie-server-0.20.

Por defecto utiliza la base de datos Derby. Pero se puede utilizar otro gestor, para como Oracle,MySQL o PostgreSQL. Cloudera recomienda utilizar una de estas base de datos que Derby es unabase de datos embebida que no permite monitorizar su estado de salud. Para configurar la base dedatos añadir las propiedades en /etc/oozie/conf/oozie-site.xml.

$ sudo vi /etc/oozie/conf/oozie-site.xml

<property>

<name>oozie.service.JPAService.jdbc.driver</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>oozie.service.JPAService.jdbc.url</name> <value>jdbc:mysql://localhost:3306/oozie</value> </property> <property> <name>oozie.service.JPAService.jdbc.username</name> <value>oozie</value> </property> <property> <name>oozie.service.JPAService.jdbc.password</name> <value>password</value> </property>

15.2. Zookeeper

Zookeeper es un servicio centralizado para el mantenimiento de la información deconfiguraciones, nombres y sincronización de servicios disponibles. Al igual el resto deaplicaciones para Hadoo, es una herramienta de código abierto a cargo de Apache SoftwareFundation.

Como su nombre indica, cuidador del zoo, se encarga de gestionar la fauna de Hadoop. Todoslos servicios se utilizan a través de aplicaciones distribuídas y cada vez que se implementan haymuchas tareas y trabajos que realizar para su configuración y funcionamiento que terminan enproblemas con corrección de errores y fallos.

Zookeeper se compone de dos paquetes.

• Zookeeper base: bibliotecas básicas y scripts necesarios para ejecutar un servidor Zookeepery sus clientes.

• Zookeeper Server: Contiene los scripts de inicio del servicio necesarios para ejecutarZookeeper como un proceso demonio. Depende de zookeeper, su instalación incluye elpaquete básico.

Para su instalación ejecutar las siguientes lineas en un terminal.

$ sudo apt-get install zookeeper$ sudo apt-get install zookeeper-server

Page 45: Administración de Apache Hadoop a través de Cloudera

15.3. Whirr

Es un conjunto de bibliotecas para ejecutar Hadoop en servicios Cloud. Se puede usar enclústers como Amazon EC2 sin necesidad de instalar los paquetes de Hadoop ni realizarconfiguración alguna, tan solo se necesita ejecutar los comandos de Whirr. Es ideal para crear yejecutar clusters de Hadoop como prueba de concepto para ejecutar unos pocos trabajosMapReduce. Cuando terminen los trabajos se puede eliminar el clúster de Hadoop y todos los datosgenerados con un comando.

Para instalar el cliente Whirr ejecutar.

$ sudo apt-get install whirr

# Verificar la versión$ whirr version

# Generar par de clave SSHssh-keygen -t rsa -P ''

Una vez instalado Whirr se procede a definir un cluster de Hadoop con MapReduce v1.$ vim hadoop.properties

whirr.cluster-name=myhadoopclusterwhirr.instance-templates=1 hadoop-jobtracker+hadoop-namenode,1 hadoop-datanode+hadoop-tasktrackerwhirr.provider=aws-ec2whirr.identity=<cloud-provider-identity>whirr.credential=<cloud-provider-credential>whirr.private-key-file=${sys:user.home}/.ssh/id_rsawhirr.public-key-file=${sys:user.home}/.ssh/id_rsa.pubwhirr.env.repo=cdh4whirr.hadoop-install-function=install_cdh_hadoopwhirr.hadoop-configure-function=configure_cdh_hadoopwhirr.hardware-id=m1.largewhirr.image-id=us-east-1/ami-ccb35ea5whirr.location-id=us-east-1

Con esta configuración se crean dos instancias en AWS, una instancia es el NameNode con su JobTracker.

Lanzar el clúster de Hadoop a través de la configuración definida.

$ whirr launch-cluster --config hadoop.properties

Este comando lanza un clúster definido en hadoop.properties y genera una carpeta oculta en la rutadel usario del sistema con el nombre del valor definido en la propiedad whirr.cluster-name.

Ejecutar un proxy para conectarse al clúster. Abre un túnel SSH a través del puerto 6666.

$ . ~/.whirr/<cluster-name>/hadoop-proxy.sh

Para terminar el proxy pulsar Ctrl + C.

Después de crear un clúster de Hadoop se crea automáticamente el fichero hadoop-site.xml en eldirectorio ~/.whirr/<cluster-name>.

Para lanzar un trabajo MapReduce:

$ export HADOOP_MAPRED_HOME=/usr/lib/hadoop-0.20-mapreduce

Page 46: Administración de Apache Hadoop a través de Cloudera

$ hadoop fs -mkdir input$ hadoop fs -put $HADOOP_MAPRED_HOME/CHANGES.txt input$ hadoop jar $HADOOP_MAPRED_HOME/hadoop-examples.jar wordcount input output$ hadoop fs -cat output/part-* | head

Para destruír el clúster creado.

$ whirr destroy-cluster --config hadoop.properties

# y finalizar el proxy de whirr.

15.4. Snappy

Es una biblioteca para compresión/descompresión de datos. Su uso está orientado para laobtener porcentajes razonables de compresión en poco tiempo y su máxima compresión concompatibilidad con otras bibliotecas de compresión.

Se utiliza en trabajos MapReduce, Pig, Hive, importación con Sqoop y con la base de datosHBase. En el caso de MapReduce se utiliza como compresión/descompresión de los datosintermediarios de la fase shuffle & order haciendo la ejecución de trabajos más rápida gracías a larapidez de compresión/descompresión comparado con otros formatos como Gzip.

Por defecto viene instalado con los paquetes básicos de Hadoop.

Para activar la compresión snappy añadir en la configuración de mapred-site.xml enMapReduce v1.

$ sudo vi /etc/hadoop/conf/mapred-site.xml

<property> <name>mapred.compress.map.output</name> <value>true</value></property><property> <name>mapred.map.output.compression.codec</name> <value>org.apache.hadoop.io.compress.SnappyCodec</value></property>

15.5. Mahout

Apache Mahout es una herramienta para Machine-Learning2 para construir conjuntos de datosrazonablemente grandes a partir de librerías de aprendizaje.

La traducción de la palabra Mahout significa la persona que conoce y maneja a un elefante. Lamascota de Hadoop es un elefante, en alusión al elefante de peluche de la hija de su creador, DougCutting. Mahout es la herramienta inteligente que utiliza Hadoop para obtener

Mahout utiliza algorimots definidos para tareas de análisis de datos y minería tales como:

• Recomendación en minería de datos: técnicas de recomendación de objetos.

• Clustering: para descubrir estructuras en colección de datos.

• Classification: técnica supervisada para encontrar relaciones y crear categorías.

• Frecuencia de objetos: identificar los objetos de más usados dentro de un conjnto, porejemplo artículos más comprados por usuarios.

2 Machine-Learning: Técnica para enseñar a los programas que deben hacer.

Page 47: Administración de Apache Hadoop a través de Cloudera

Para instalar Mahout

$ sudo apt-get install mahout$ sudo apt-get install mahout-doc

Para más información sobre Mahout ir a la wiki de la función Apache en https://cwiki.apache.org/confluence/display/MAHOUT/Mahout+Wiki

15.6. Avro

Avro es un sistema de serialización de datos. Soporta estructuras de datos, datos binarios ycontenedor de ficheros ("Avro data files"). Su uso está pensado para el envío de datos entreaplicaciones o servicios escritos en distintos lenguajes de programación. Se suele utilizar en losagentes de Flume para la serialización de datos en HDFS que provienen de distintas fuentes.

16. Clúster de Hadoop con Alta Disponibilidad

En esta sección se explica la instalación de un clúster de Hadoop con 4 nodos utilizando la altadisponibilidad (HA o High Avaliability) para el NameNode y el JobTracker.

16.1. Componentes

A continuación se detallan los componentes del clúster y sus funcionalidades.

16.1.1. NameNode

Un clúster de Hadoop utiliza el servicio NameNode o nodo maestro para mantener losmetadatos de los ficheros de HDFS y las tripletas fichero-bloque-DataNode para localizar losbloques de los ficheros almacenados en los nodos DataNode.

Si el NameNode falla no se puede acceder al sistema de ficheros HDFS. Por eso es importantetener alta disponibilidad instalando un NameNode activo y otro pasivo para que en caso de fallo delprime, entre en ejecución el segundo.

Solo puede existir un único NameNode funcionado, el cual guarda los metadatos de losficheros (permisos de ficheros, fechas de creación y acceso, etc) y la información de donde estánalmacenados los bloques de estos y sus réplicas.

Cuanto mayor sea el tamaño total del clúster, más memoria RAM se necesita en el NameNodepara guardar la información de los ficheros y sus bloques.

16.1.2. SecundaryNamenode

Sirve para liberar la carga del NameNode se puede instalar este servicio en otro nodo,encargándose de guardar una copia de los bloques de datos en memoria que se van modificando yposteriomente actualizándose en el NameNode activo.

Page 48: Administración de Apache Hadoop a través de Cloudera

Sin embargo, este nodo no ofrece la alta disponibilidad, si cae el NameNode se case el sistemade ficheros HDFS y con ello todos los trabajos MapReduce lanzados.

La importancia del SecundaryNamenode reside en tener una copia actualizada del fichero quecontiene la información de los bloques del clúster.

16.1.3. DataNode

Los nodos que guardan físicamente los bloques de los ficheros son los DataNode o nodosesclavos. Cada DataNode guarda solo los bloques de los ficheros y sus checksums para verificarque no están corruptos.

16.1.4. JobTracker

El JobTracker es el servicio que se encarga de lanzar y coordinar los trabajos MapReduce a losJobTracker. Normalmente está instalado en el NameNode.

Si el JobTracker falla, todos los trabajos MapReduce ejecutados en ese momento fallan.

16.1.5. TaskTracker

Son los servicios que ejecutan las tareas Map y Reduce en un DataNode, por tanto se ejecutanen los DataNode. Si un TaskTracker detecta un fallo en la tarea ejecutada en el nodo, avisa alJobTaskTracker y este envía la orden de ejecutar la tarea en otro nodo que contenga los bloques dedatos de la tarea fallida. Se ejecuta en el DataNode.

16.2. Instalación del clúster

A continuación se detalla el proceso de instalación del clúster con 4 nodos. Para ello se utiliza una máquina virtual con CentOS 6.2 descargada de la documentación del sitio web de Cloudera http://www.cloudera.com/content/support/en/downloads/download-components/download-products.html

Pulsar en el enlace QuickStart VM.

El usuario del sistema por defecto es cloudera y la contraseña, cloudera.

Para la instalación se harán cuatro copias de los archivos de la máquina virtual descargada. Losnodos se identificarán por nombres de animales:

• elephant: nodo NameNode, DataNode y TaskTracker.

• tiger: nodo SecundaryNamenode, DataNode y TaskTracker.

• horse: nodo JobTracker, DataNode y TaskTracker.

• monkey: nodo DataNode y TaskTracker.

Por defecto la máquina virtual está configurada con el teclado en inglés y la zona horaria deEstados Unidos de la región del Este.

16.2.1. Requisitos Mínimos

Para la creación del clúster de cuatro nodos con máquinas virtuales se necesita como mínimode las siguientes características:

Page 49: Administración de Apache Hadoop a través de Cloudera

• Procesador Intel i3 o similar con dos núcleos

• Memoria RAM 8 GB DDR3 1600 Mhz

• Disco Duro 500 GB SATA

16.2.2. Desinstalar Cloudera Manager

Iniciar la máquina virtual descargada y desinstalar Cloudera Manager.

Cloudera Manager es un gestor con interfaz web que se encarga de instalar y actualizar lospaquetes de Cloudera. También gestiona el inicio de los servicios de Hadoop y se encarga delanzarlos en caso de que se paren.

Abrir el navegador Firefox y pulsar en el enlace “Coudera Manager”. Iniciar sesión con elusuario y contraseña cloudera. Seleccionar la pestaña Actions general de la parte superior derecha yescoger Stop.

Eliminar los datos de Cloudera Manager.

$ sudo rm -Rf /usr/share/cmf /var/lib/cloudera* /var/cache/yum/cloudera*

$ sudo rm -Rf /etc/cloudera-scm-*

Finalizar los servicios de Cloudera Manager

$ sudo service cloudera-scm-server stop

$ sudo service cloudera-scm-server-db stop

$ sudo service cloudera-scm-agent hard_stop

Eliminar los paquetes de Cloudera Manager

$ sudo yum remove --assumeyes cloudera-manager-server

$ sudo yum remove –-assumeyes cloudera-manager-server-db

$ sudo yum remove -–assumeyes 'cloudera-manager-*'

Page 50: Administración de Apache Hadoop a través de Cloudera

Comprobar que los servicios de NameNode, DataNode, JobTracker y TaskTracker no estánejecutándose.

$ sudo jps

Si por algún motivo no se han parado alguno servicios, se paran manualmente.

$ for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x stop ; done

$ for x in `cd /etc/init.d ; ls hadoop-0.20-mapreduce-*` ; do sudo service $x stop ; done

En caso de que no funcione, terminar todos los proceso java.

$ sudo killall java

Eliminar todos los paquetes de Hadoop, HBase, Hive, Impala, Pig, Hue, Zookeeper, etc.

$ sudo yum remove --assumeyes zookeeper

$ sudo rm -rf /etc/hadoop/

$ sudo rm -rf /etc/hive/

$ sudo rm -rf /etc/impala/

$ sudo rm -rf /etc/hbase/

$ sudo rm -rf /etc/hue/

sudo rm -rf /etc/pig

sudo rm -rf /etc/hadoop-httpfs/

sudo rm -rf /etc/hcatalog/

sudo rm -rf /etc/hbase-solr/

sudo rm -rf /usr/lib/zookeeper/

Dejar instalados los paquetes DataNode y TaskTracker ya que se usarán en los cuatro nodos.

$ sudo yum install --assumeyes hadoop-hdfs-datanode$ sudo yum install --assumeyes hadoop-0.20-mapreduce-tasktracker

16.3. Crear un Clúster de Hadoop

Abrir VirtualBox e ir a Archivo, “Importar Servicio Virtualizado”. Seleccionar el archivo .ovf.de cada copia.

El DVD, el controlador USB y la tarjeta de sonido se pueden deshabilitar ya que no sonnecesarios.

Cada máquina virtual necesita como mínimo:

• CPU con 1 núcleo

Page 51: Administración de Apache Hadoop a través de Cloudera

• Tarjeta de Red

• Memoria RAM de 1.5 GB

• Disco Duro 15 GB

Pulsar en Importar. La importación de la máquina virtual puede tardar entre 1 y 5 minutos.

Para facilitar la instalación se recomienda habilitar “Compartir portapapeles” enConfiguración, opción General, pestaña Avanzado y seleccionar Bidireccional. En la misma pestañaes posible cambiar el nombre de la máquina virtual descargada por un nombre identificativo delnodo.

Los ficheros .ovf se pueden renombrar, pero los discos *.vmdk si se modifican, se debeespecificar el nuevo nombre en la configuración de la importación.

Finalmente, una vez importadas las cuatro máquinas, ir a Configuración, opción Red, pesataña“Adaptador 2” y marcar “Habilitar adaptador de red”. En Tipo de adaptador seleccionar Redinterna.

16.3.1. Configuración de Red

Iniciar las cuatro máquinas virtuales y configurar la segunda interfaz de red con las siguientes IPestáticas bien con network-manager desde el panel de escritorio o editando la configuración de lainterfaz de red en /etc/sysconfig/network-scripts/ifcfg-eth1:

TYPE=Ethernet

BOOTPROTO=none

IPADDR=192.168.1.1

PREFIX=24

DEFROUTE=yes

IPV4_FAILURE_FATAL=yes

IPV6INIT=no

NAME="eth1"

ONBOOT=yes

Las IPs de cada nodo son:

• elephant: 192.168.1.1/24

Page 52: Administración de Apache Hadoop a través de Cloudera

• tiger: 192.168.1.2/24

• horse: 192.168.1.3/24

• monkey: 192.168.1.4/24

Añadir las Ips de los 4 nodos en /etc/hosts. Eliminar la línea de localhost.domain

$ sudo vim /etc/hosts

192.168.1.1 elephant

192.168.1.2 tiger

192.168.1.3 horse

192.168.1.4 monkey

En cada instancia modificar su hostname.$ sudo hostname elephant

$ sudo hostname tiger

$ sudo hostname horse

$ sudo hostname monkey

Comprobar conectividad en todas las instancias.

$ ping elephant

$ ping tiger

$ ping horse

$ ping monkey

Reiniciar la sesión de usuario en los cuatro nodos y comprobar el hostname.

$ echo $HOSTNAME

Page 53: Administración de Apache Hadoop a través de Cloudera

16.3.2. Instalación de paquetes

Instalar en cada instancia los paquetes necesarios.

• En elephant

$ sudo yum install --assumeyes hadoop-hdfs-namenode

$ sudo yum install --assumeyes hadoop-hdfs-datanode

$ sudo yum install --assumeyes hadoop-0.20-mapreduce-tasktracker

# Si están, eliminar los paquetes

$ sudo yum remove --assumeyes hadoop-hdfs-secondarynamenode

$ sudo yum remove --assumeyes hadoop-0.20-mapreduce-jobtracker

• En tiger

$ sudo yum install --assumeyes hadoop-hdfs-secondarynamenode

$ sudo yum install --assumeyes hadoop-hdfs-datanode

$ sudo yum install --assumeyes hadoop-0.20-mapreduce-tasktracker

# Si están, eliminar los paquetes

$ sudo yum remove --assumeyes hadoop-hdfs-namenode

$ sudo yum remove --assumeyes hadoop-0.20-mapreduce-jobtracker

• En horse

$ sudo yum install --assumeyes hadoop-0.20-mapreduce-jobtracker

$ sudo yum install --assumeyes hadoop-hdfs-datanode

$ sudo yum install --assumeyes hadoop-0.20-mapreduce-tasktracker

# Eliminar los paquetes

$ sudo yum remove --assumeyes hadoop-hdfs-namenode

$ sudo yum remove --assumeyes hadoop-hdfs-secondarynamenode

• En monkey

$ sudo yum install --assumeyes hadoop-hdfs-datanode

$ sudo yum install --assumeyes hadoop-0.20-mapreduce-tasktracker

# Eliminar los siguientes paquetes

$ sudo yum remove --assumeyes hadoop-hdfs-namenode

$ sudo yum remove --assumeyes hadoop-hdfs-secondarynamenode

$ sudo yum remove --assumeyes hadoop-0.20-mapreduce-jobtracker

16.3.3. Configuración

En todos los nodos, crear la carpeta de configuración.

$ sudo mv /etc/hadoop/conf /etc/hadoop/conf.alternatives

$ sudo mv /etc/hadoop/conf.empty /etc/hadoop/conf

Desde elephant editar los ficheros de configuración.

$ sudo vi /etc/hadoop/conf/core-site.xml

Page 54: Administración de Apache Hadoop a través de Cloudera

<configuration>

<property>

<name>fs.default.name</name>

<value>hdfs://elephant:8020</value>

</property>

</configuration>

sudo vi /etc/hadoop/conf/hdfs-site.xml<configuration>

<property>

<name>dfs.name.dir</name>

<value>/disk1/dfs/nn,/disk2/dfs/nn</value>

</property>

<property>

<name>dfs.data.dir</name>

<value>/disk1/dfs/dn,/disk2/dfs/dn</value>

</property>

<property>

<name>dfs.http.address</name>

<value>elephant:50070</value>

</property>

</configuration>

sudo vi /etc/hadoop/conf/mapred-site.xml

<?xml version="1.0"?> <configuration> <property> <name>mapred.local.dir</name> <value>/disk1/mapred/local,/disk2/mapred/local</value> </property> <property> <name>mapred.job.tracker</name> <value>horse:8021</value> </property> <property> <name>mapred.system.dir</name> <value>/mapred/system</value> </property> <property> <name>mapreduce.jobtracker.staging.root.dir</name> <value>/user</value> </property></configuration>

# Variables de entorno de Hadoop

$ sudo vi /etc/hadoop/conf/hadoop-env.sh

export HADOOP_NAMENODE_OPTS="-Xmx64m"export HADOOP_SECONDARYNAMENODE_OPTS="-Xmx64m"export HADOOP_DATANODE_OPTS="-Xmx64m"

Page 55: Administración de Apache Hadoop a través de Cloudera

export HADOOP_JOBTRACKER_OPTS="-Xmx64m"export HADOOP_TASKTRACKER_OPTS="-Xmx64m"

$ sudo chmod +x /etc/hadoop/conf/hadoop-env.sh

Copiar la configuración en todos los nodos

$ sudo yum install --assumeyes sshpass

$ vim ~/copy_config.sh

#!/bin/bash

sshpass -p 'cloudera' scp /etc/hadoop/conf/core-site.xml root@tiger:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/core-site.xml root@horse:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/core-site.xml root@monkey:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/hdfs-site.xml root@tiger:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/hdfs-site.xml root@horse:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/hdfs-site.xml root@monkey:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/mapred-site.xml root@tiger:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/mapred-site.xml root@horse:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/mapred-site.xml root@monkey:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/hadoop-env.sh root@tiger:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/hadoop-env.sh root@horse:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/hadoop-env.sh root@monkey:/etc/hadoop/conf/

echo done

$ chmod +x copy_config.sh

$ ./copy_config.sh

Crear directorios para HDFS en todos los nodos

sudo mkdir -p /disk1/dfs/nnsudo mkdir -p /disk2/dfs/nnsudo mkdir -p /disk1/dfs/dnsudo mkdir -p /disk2/dfs/dnsudo mkdir -p /disk1/mapred/localsudo mkdir -p /disk2/mapred/local

# Cambiar propietarios

Page 56: Administración de Apache Hadoop a través de Cloudera

sudo chown -R hdfs:hadoop /disk1/dfs/nnsudo chown -R hdfs:hadoop /disk2/dfs/nnsudo chown -R hdfs:hadoop /disk1/dfs/dnsudo chown -R hdfs:hadoop /disk2/dfs/dnsudo chown -R mapred:hadoop /disk1/mapred/localsudo chown -R mapred:hadoop /disk2/mapred/local

Desde elephant formatear HDFS e iniciar el NameNode

$ sudo service hadoop-hdfs-namenode stop

$ sudo -u hdfs hdfs namenode -format

$ sudo service hadoop-hdfs-namenode start

# Comprobar el proceso

$ sudo jps -lvm

En tiger iniciar el Secundary-Namenode

$ sudo service hadoop-hdfs-secondarynamenode start

En todos los nodos iniciar el DataNode

$ sudo service hadoop-hdfs-datanode start

Crear los directorios HDFS de usuario desde elephant

$ sudo -u hdfs hadoop fs -mkdir /user/cloudera$ sudo -u hdfs hadoop fs -chown cloudera /user/cloudera

# Crear MapRed dir$ sudo -u hdfs hadoop fs -mkdir /mapred/system$ sudo -u hdfs hadoop fs -chown mapred:hadoop /mapred/system

En horse inicar el JobTracker de MapReduce

$ sudo service hadoop-0.20-mapreduce-jobtracker start

Se puede comprobar los logs desde la interfaz web en http://horse:50030/jobtracker.jsp

Iniciar el TaskTracker en todos los nodos.

$ sudo service hadoop-0.20-mapreduce-tasktracker start

El clúster está configurado con acceso a HDFS y MapReduce disponible.

Page 57: Administración de Apache Hadoop a través de Cloudera

16.4. Alta Disponibilidad del NameNode

La configuración de alta disponibilidad para el NameNode utiliza dos nodos, uno activo y otropasivo también llamado standby. El NameNode pasivo necesita tener acceso a los últimosmetadatos actualizados antes de un fallo en el NameNode activo. Para ello, los metadatos sealmacenan en otros nodos del clúster llamados JournalNodes.

Puede haber uno o varios JournalNode.

En el proceso de un NameNode con alta disponibilidad, cuando un cliente envía ficheros a HDFS se generan nuevo metadatos. El NameNode guarda los nuevos metadatos en memoria y se los envía a los JournalNodes. La escritura en JournalNode la hace el demonio del NameNode activo, ya está instalado no hace falta añadir ningún demonio nuevo.

El NameNode en standby recupera las últimas modificaciones de los metadatos de los JournalNodes y los añade a memoria.

Por otro lado, los DataNode envían señales de vida o heartbeats a ambos NameNodes para indicar que están en funcionamiento.

Es posible crear un clúster de alta disponibilidad con al menos 3 JournalNode. Se necesitan tener disponibles más de la mitad de los JournalNodes para que funcionen ambos NameNode, por eso se suele trabajar con un número de JournalNode impar. Para que el NameNode considere exitosa la escritura en al menos dos JournalNodes se utiliza el algoritmo de Paxos3.

En la alta disponibilidad no hay SecundaryNamenode. La función de checkpoint ya la realiza elNameNode pasivo o standby.

3 http://es.wikipedia.org/wiki/Algoritmo_de_Paxos

Page 58: Administración de Apache Hadoop a través de Cloudera

16.4.1. Failover Automático

Por defecto, si falla el NameNode activo, se debe realizar manualmente la activación delNameNode pasivo. Es decir, si el nodo maestro cae, el administrador tiene que cambiar de pasivo aactivo el NameNode en standby.

Es posible hacer que el cambio se haga de forma automática con Zookeeper. Zookeeper es undemonio controlador de fallos que funciona en cada NameNode como un servicio de repositorio dedatos. Para su funcionamiento se necesita un grupo de nodos con Zookeeper instalado llamadoquorum de nodos. Normalmente se utilizan entre 3 y 5 nodos. Se puede instalar en los NameNode.

16.5. Clúster de Hadoop con Alta Disponibilidad

Para crear un clúster de alta disponibilidad se pueden utilizar las mismas máquinas virtuales de Cloudera. En este caso no es necesario instalar un SecundaryNameNode, sino que se instalarán dos NameNodes, uno activo y otro pasivo.

A continuación se detalla la instalación del NameNode con alta disponibilidad.

16.5.1. Instalación de paquetes

Instalar en cada instancia los paquetes necesarios.

• En elephant

$ sudo yum install --assumeyes hadoop-hdfs-namenode

$ sudo yum install --assumeyes hadoop-hdfs-datanode

$ sudo yum install --assumeyes hadoop-0.20-mapreduce-tasktracker

$ sudo yum install --assumeyes hadoop-hdfs-journalnode

$ sudo yum install --assumeyes zookeeper

$ sudo yum install --assumeyes zookeeper-server

• En tiger

$ sudo yum install --assumeyes hadoop-hdfs-namenode

$ sudo yum install --assumeyes hadoop-hdfs-datanode

$ sudo yum install --assumeyes hadoop-0.20-mapreduce-tasktracker

$ sudo yum install --assumeyes hadoop-hdfs-journalnode

$ sudo yum install --assumeyes zookeeper

$ sudo yum install --assumeyes zookeeper-server

• En horse

$ sudo yum install --assumeyes hadoop-0.20-mapreduce-jobtracker

$ sudo yum install --assumeyes hadoop-hdfs-datanode

$ sudo yum install --assumeyes hadoop-0.20-mapreduce-tasktracker

$ sudo yum install --assumeyes hadoop-hdfs-journalnode

$ sudo yum install --assumeyes zookeeper

$ sudo yum install --assumeyes zookeeper-server

• En monkey

Page 59: Administración de Apache Hadoop a través de Cloudera

$ sudo yum install --assumeyes hadoop-hdfs-datanode

$ sudo yum install --assumeyes hadoop-0.20-mapreduce-tasktracker

16.5.2. Configuración

Editar los archivos de configuración de Hadoop core-site.xml, hdfs-site.xml.$ sudo vi /etc/hadoop/conf/core-site.xml<property> <name>fs.default.name</name> <value>hdfs://mycluster</value></property><property> <name>ha.zookeeper.quorum</name> <value>elephant:2181,tiger:2181,horse:2181</value></property>

El valor hdfs://mycluster se define a continuación, en la configuración de hdfs-site.xml.

$ sudo vi /etc/hadoop/conf/hdfs-site.xml

<property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>elephant:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>tiger:8020</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>elephant:50070</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>tiger:50070</value> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://elephant:8485;tiger:8485;horse:8485/mycluster</value> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/disk1/dfs/jn</value> </property> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <property> <name>dfs.ha.fencing.methods</name> <value>shell(/bin/true)</value>

Page 60: Administración de Apache Hadoop a través de Cloudera

</property> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property>

Nn1 y nn2 son los nombres identificadores de los dos NameNode. Nn1 será el nombre asignado al NameNode de elephant y nn2 el de tiger.

El valor de dfs.ha.automatic-failover.enabled activa el Failover automático, gestionado poruna cola de procesos Zookeeper.

En dfs.ha.fencing.methods se indica el comando ha ejecutar en caso de fallo, por ejemplo para avisar al administrador de que el NameNode ha caído.

Configurar mapred-site.xml para MapReduce.

$ sudo vi /etc/hadoop/conf/mapred-site.xml

<?xml version="1.0"?> <configuration> <property> <name>mapred.local.dir</name> <value>/disk1/mapred/local,/disk2/mapred/local</value> </property> <property> <name>mapred.job.tracker</name> <value>horse:8021</value> </property> <property> <name>mapred.system.dir</name> <value>/mapred/system</value> </property> <property> <name>mapreduce.jobtracker.staging.root.dir</name> <value>/user</value> </property></configuration>

Configurar las variables de entorno utilizadas en Hadoop. Indicar la memoria reservada para cadaservicio. Como se está ejecutando 4 máquinas virtuales en un entorno con memoria limitada, sereduce a 64 Megas por servicio.

NOTA: En un clúster real se deben ajustar para la memoria necesaria para cada proceso Java,teniendo siempre en cuenta el resto de servicios ejecutados en cada nodo.

$ sudo vi /etc/hadoop/conf/hadoop-env.sh

export HADOOP_NAMENODE_OPTS="-Xmx64m"export HADOOP_SECONDARYNAMENODE_OPTS="-Xmx64m"export HADOOP_DATANODE_OPTS="-Xmx64m"export HADOOP_JOBTRACKER_OPTS="-Xmx64m"export HADOOP_TASKTRACKER_OPTS="-Xmx64m"

export HADOOP_JOURNALNODE_OPTS="-Xmx64m"

export HADOOP_ZKFC_OPTS="-Xmx64m"

$ sudo chmod +x /etc/hadoop/conf/hadoop-env.sh

Page 61: Administración de Apache Hadoop a través de Cloudera

Copiar la configuración en todos los nodos.

NOTA: Obviar la creación del script copy_config.sh si ya se ha realizado en el paso anterior.

$ sudo yum install --assumeyes sshpass

$ vim ~/copy_config.sh

#!/bin/bash

sshpass -p 'cloudera' scp /etc/hadoop/conf/core-site.xml root@tiger:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/core-site.xml root@horse:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/core-site.xml root@monkey:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/hdfs-site.xml root@tiger:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/hdfs-site.xml root@horse:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/hdfs-site.xml root@monkey:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/mapred-site.xml root@tiger:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/mapred-site.xml root@horse:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/mapred-site.xml root@monkey:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/hadoop-env.sh root@tiger:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/hadoop-env.sh root@horse:/etc/hadoop/conf/

sshpass -p 'cloudera' scp /etc/hadoop/conf/hadoop-env.sh root@monkey:/etc/hadoop/conf/

echo done

$ chmod +x copy_config.sh

$ ./copy_config.sh

Crear directorios para HDFS en todos los nodossudo mkdir -p /disk1/dfs/nnsudo mkdir -p /disk2/dfs/nnsudo mkdir -p /disk1/dfs/dnsudo mkdir -p /disk2/dfs/dnsudo mkdir -p /disk1/mapred/localsudo mkdir -p /disk2/mapred/local

# Cambiar propietarios

sudo chown -R hdfs:hdfs /disk1/dfs/nnsudo chown -R hdfs:hdfs /disk2/dfs/nnsudo chown -R hdfs:hdfs /disk1/dfs/dnsudo chown -R hdfs:hdfs /disk2/dfs/dnsudo chown -R mapred:mapred /disk1/mapred/localsudo chown -R mapred:mapred /disk2/mapred/local

Page 62: Administración de Apache Hadoop a través de Cloudera

En elephant, tiger y horse, crear directorios para los metadatos en los JournalNodes$ sudo mkdir -p /disk1/dfs/jn$ sudo chown -R hdfs:hdfs /disk1/dfs/jn

Iniciar los JournalNode$ sudo service hadoop-hdfs-journalnode start$ sudo jps | grep JournalNode

A continuación se procede a configurar los servicios de Zookeeper para añadir Failover automático.

En elephant, tiger y horse, crear los directorios de datos de ZooKeeper$ sudo mkdir -p /disk1/dfs/zk

$ sudo chown zookeeper:zookeeper -R /disk1/dfs/zk/

Es importante que la ruta donde se guardarán los datos del servidor Zookeeper pertenezca al usuarioy grupo zookeeper.

En elephant, crear el fichero de configuración de ZooKeeper en la ruta /etc/zookeeper/conf/zoo.cfg.

$ sudo mv /etc/zookeeper/conf/zoo.cfg /etc/zookeeper/conf/zoo.cfg.bak$ sudo vi /etc/zookeeper/conf/zoo.cfgtickTime=2000dataDir=/disk1/dfs/zkclientPort=2181initLimit=5syncLimit=2server.1=elephant:2888:3888server.2=tiger:2888:3888server.3=horse:2888:3888

Copiar configuración de elephant a tiger y horse.$ sshpass -p 'cloudera' scp /etc/zookeeper/conf/zoo.cfg root@tiger:/etc/zookeeper/conf/$ sshpass -p 'cloudera' scp /etc/zookeeper/conf/zoo.cfg root@horse:/etc/zookeeper/conf/

En elephant, tiger y horse, iniciar los servicios de Zookeeper.

# En elephant con el id 1

$ sudo service zookeeper-server init --force -–myid=1

# En tiger con el id 2

$ sudo service zookeeper-server init --force --myid=2

# En horse con el id 3

$ sudo service zookeeper-server init --force --myid=3

# Iniciar el servicio en las tres instancias

$ sudo service zookeeper-server start$ sudo jps | grep QuorumPeerMain

En elephant, formatear el sistema de ficheros HDFS.

Page 63: Administración de Apache Hadoop a través de Cloudera

NOTA: Obviar este paso si ya estaba creado en la configuración de un clúster de Hadoop.

# Parar el servicio del NameNode

$ sudo service hadoop-hdfs-namenode stop

$ sudo -u hdfs hdfs namenode -format

# Acceptar Re-format filesystem in Storage Directory y en Re-format filesystem in QJM (quorum).

Convertir un NameNode sin HA a un NameNode con HA, es necesario reinicializar los metadatos edits en modo compartido.

$ sudo -u hdfs hdfs namenode -initializeSharedEdits

# Acceptar Re-format filesystem in QJM

Iniciar el NameNode

$ sudo service hadoop-hdfs-namenode start

$ sudo jps | grep NameNode

Verificar que está en modo StandBy$ sudo -u hdfs hdfs haadmin -getServiceState nn1

Si se instenta acceder a HDFS dará un error ya que todavía no está activo ningún NameNode$ sudo -u hdfs hadoop fs -ls /

En tiger, iniciar el NameNode Standby.

$ sudo -u hdfs hdfs namenode -bootstrapStandby

# Acceptar Re-format filesystem in Storage Directory

$ sudo service hadoop-hdfs-namenode start$ sudo jps | grep NameNode

Comprobar estado del NameNode de tiger (nombre nn2 configurado en hdfs-site.xml)$ sudo -u hdfs hdfs haadmin -getServiceState nn2

Por ahora todos los dos NameNode están en estado pasivo, standby.

Page 64: Administración de Apache Hadoop a través de Cloudera

En elephant y tiger, instalar Failover Controller, formatear el znode e iniciar servicio

$ sudo yum install --assumeyes hadoop-hdfs-zkfc

# Formatear solo desde una de las instancias$ sudo -u hdfs hdfs zkfc -formatZK

$ sudo service hadoop-hdfs-zkfc start$ sudo jps | grep DFSZKFailoverController

Verificar que los estados de los NameNode son active y standby$ sudo -u hdfs hdfs haadmin -getServiceState nn1$ sudo -u hdfs hdfs haadmin -getServiceState nn2

Ir a http://elephant:50070/dfshealth.jsp y comprobar que aparece NameNode 'elephant:8020' como active.Ir a http://tiger:50070/dfshealth.jsp y comprobar que aparece el NameNode 'tiger:8020' como standby.

Iniciar los DataNodes en las 4 instancias.$ sudo service hadoop-hdfs-datanode start

Crear los directorios HDFS de usuario

$ sudo -u hdfs hadoop fs -mkdir /user/cloudera$ sudo -u hdfs hadoop fs -chown cloudera /user/cloudera

# Crear MapRed dir$ sudo -u hdfs hadoop fs -mkdir /mapred/system$ sudo -u hdfs hadoop fs -chown mapred:hadoop /mapred/system

# Comprobar directorios

Page 65: Administración de Apache Hadoop a través de Cloudera

$ sudo -u hdfs hadoop fs -ls -R /

En horse, inicar el JobTracker.$ sudo service hadoop-0.20-mapreduce-jobtracker start$ sudo jps | grep JobTracker

Iniciar los TaskTracker en las 4 instancias.$ sudo service hadoop-0.20-mapreduce-tasktracker start$ sudo jps | grep TaskTracker

Comprobar que el failover automático funciona. Parar el NameNode activo en elephant.$ sudo service hadoop-hdfs-namenode stop

Comprobar que el NameNode de tiger ahora está activo.$ sudo -u hdfs hdfs haadmin -getServiceState nn2

# Iniciar de nuevo el NameNode nn1 en elephant.$ sudo service hadoop-hdfs-namenode start$ sudo -u hdfs hdfs haadmin -getServiceState nn1

# Si se comprueba antes de reiniciar el NameNode dará error.

$ sudo -u hdfs hdfs haadmin -getServiceState nn2

Aunque se levante el NameNode activo de nuevo, no pasa a estado activo directamente, sino que elephant se inicia quedando en estado pasivo o standby. Si se desea cambiar los estados hay que parar el NameNode de tiger y luego levantarlo de nuevo.$ sudo service hadoop-hdfs-namenode stop$ sudo service hadoop-hdfs-namenode start

Comprobar que ahora sí está activo el NameNode en elephant.$ sudo -u hdfs hdfs haadmin -getServiceState nn2$ sudo -u hdfs hdfs haadmin -getServiceState nn1

Page 66: Administración de Apache Hadoop a través de Cloudera

16.6. Alta Disponibilidad en el JobTracker

El JobTracker es el servicio que se encarga de gestionar los trabajos MapReduce lanzados por los clientes. Si el JobTracker falla, todos los trabajos en ejecución fallan. Por eso es interesante configurar el JobTracker en modo HA o High Avaliability.

Al igual que en el NameNode con alta disponibilidad, se puede configurar un JobTracker con HA utilizando como mínimo 3 nodos.

El JobTracker sin alta disponibilidad se encuentra disponible en la instancia horse. Para habilitar la alta disponibilidad es necesario desinstalar el paquete e instalar el paquete hadoop-0.20-mapreduce-jobtrackerha.

Parar los TaskTracker en todos los nodos .

$ sudo service hadoop-0.20-mapreduce-tasktracker stop

Parar el JobTracker de Horse

$ sudo service hadoop-0.20-mapreduce-jobtracker stop

# verificar que están parados los demonios

ps -eaf | grep -i job

ps -eaf | grep -i task

Desinstalar JobTracker de horse

$ sudo yum remove --assumeyes hadoop-0.20-mapreduce-jobtracker

En elephant y tiger, instalar JobTracker con alta disponibilidad, es ideal instalar este servicio en losnodos NameNode activo y pasivo.

$ sudo yum install --assumeyes hadoop-0.20-mapreduce-jobtrackerha

Instalar además el failover automático para MapReduce con Zookeeper.

Previamente debe estar instalado ZooKeeper en 3 nodos, este paso ya ha sido realizado en la instalación del NameNode con alta disponibilidad.

$ sudo yum install --assumeyes hadoop-0.20-mapreduce-zkfc

En elephant, configurar los JobTrackers en /etc/hadoop/conf/mapred-site.xml

$ sudo vi /etc/hadoop/conf/mapred-site.xml

<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration> <property> <name>mapred.local.dir</name> <value>/disk1/mapred/local,/disk2/mapred/local</value> </property> <property> <name>mapred.job.tracker</name> <value>logicaljt</value> </property> <property>

Page 67: Administración de Apache Hadoop a través de Cloudera

<name>mapred.jobtrackers.logicaljt</name> <value>jt1,jt2</value> <description>Comma-separated list of JobTracker IDs.</description> </property>

<property> <name>mapred.jobtracker.rpc-address.logicaljt.jt1</name> <!-- RPC address for jt1 --> <value>elephant:8021</value> </property>

<property> <name>mapred.jobtracker.rpc-address.logicaljt.jt2</name> <!-- RPC address for jt2 --> <value>tiger:8022</value> </property>

<property> <name>mapred.job.tracker.http.address.logicaljt.jt1</name> <!-- HTTP bind address for jt1 --> <value>0.0.0.0:50030</value> </property>

<property> <name>mapred.job.tracker.http.address.logicaljt.jt2</name> <!-- HTTP bind address for jt2 --> <value>0.0.0.0:50031</value> </property>

<property> <name>mapred.ha.jobtracker.rpc-address.logicaljt.jt1</name> <!-- RPC address for jt1 HA daemon --> <value>elephant:8023</value> </property>

<property> <name>mapred.ha.jobtracker.rpc-address.logicaljt.jt2</name> <!-- RPC address for jt2 HA daemon --> <value>tiger:8024</value> </property>

<property> <name>mapred.ha.jobtracker.http-redirect-address.logicaljt.jt1</name> <!-- HTTP redirect address for jt1 --> <value>elephant:50030</value> </property>

<property> <name>mapred.ha.jobtracker.http-redirect-address.logicaljt.jt2</name> <!-- HTTP redirect address for jt2 --> <value>tiger:50031</value> </property>

<property> <name>mapred.jobtracker.restart.recover</name> <value>true</value> </property>

<property> <name>mapred.job.tracker.persist.jobstatus.active</name> <value>true</value> </property>

<property>

Page 68: Administración de Apache Hadoop a través de Cloudera

<name>mapred.job.tracker.persist.jobstatus.hours</name> <value>1</value> </property>

<property> <name>mapred.job.tracker.persist.jobstatus.dir</name> <value>/jobtracker/jobsInfo</value> </property>

<property> <name>mapred.client.failover.proxy.provider.logicaljt</name> <value>org.apache.hadoop.mapred.ConfiguredFailoverProxyProvider</value> </property>

<property> <name>mapred.client.failover.max.attempts</name> <value>15</value> </property>

<property> <name>mapred.client.failover.sleep.base.millis</name> <value>500</value> </property>

<property> <name>mapred.client.failover.sleep.max.millis</name> <value>1500</value> </property>

<property> <name>mapred.client.failover.connection.retries</name> <value>0</value> </property>

<property> <name>mapred.client.failover.connection.retries.on.timeouts</name> <value>0</value> </property> <property> <name>mapred.ha.fencing.methods</name> <value>shell(/bin/true)</value> </property>

<property> <name>mapred.system.dir</name> <value>/mapred/system</value> </property> <property> <name>mapreduce.jobtracker.staging.root.dir</name> <value>/user</value> </property>

</configuration>

Copiar la configuración de mapred-site.xml al resto de nodos.

./copy_config.sh

En elephant, crear el directorio para la información del JobTracker con HA.

$ sudo -u hdfs hadoop fs -mkdir /jobtracker/jobsInfo

Page 69: Administración de Apache Hadoop a través de Cloudera

$ sudo -u hdfs hadoop fs -chown mapred /jobtracker/jobsInfo

En elephant y tiger , iniciar el JobTracker HA.

$ sudo service hadoop-0.20-mapreduce-jobtrackerha start

$ sudo jps | grep JobTrackerHADaemon

En elephant y tiger , ver estados de los JobTracker HA.

$ sudo -u mapred hadoop mrhaadmin -getServiceState jt1

$ sudo -u mapred hadoop mrhaadmin -getServiceState jt2

Ambos están en standby, todavía no se a activado ningún JobTracker. En elephant, cambiar el JobTracker a modo activo. Es importante no haber habilitado todavía el failover automático para poder realizar el cambio manual.

$ sudo -u mapred hadoop mrhaadmin -transitionToActive jt1

$ sudo -u mapred hadoop mrhaadmin -getServiceState jt1

Configurar el failover automático. Añadir a mapred-site.xml la propiedad mapred.ha.automatic-failover.enabled y el puerto de escucha de Zookeeper. El puerto debe ser distinto al utilizado para los puertos de Zookeeper para el NameNode con alta disponibilidad.

$ sudo vi /etc/hadoop/conf/mapred-site.xml

<property> <name>mapred.ha.automatic-failover.enabled</name> <value>true</value> </property>

<property> <name>mapred.ha.zkfc.port</name> <value>8018</value> <!-- Pick a different port for each failover controller when running one machine --> </property>

Si no se han añadido los nodos con el servicio de Zookeeper en el NameNode de alta disponibilidad, añadir a la configuración de core-site.xml el quorum de nodos de Zookeeper. Si ya está configurado, obviar esta parte.

$ sudo vi /etc/hadoop/conf/core-site.xml

<property>

Page 70: Administración de Apache Hadoop a través de Cloudera

<name>ha.zookeeper.quorum</name>

<value>elephant:2181,tiger:2181,horse:2181</value>

<!-- Zookeeper ensemble addresses -->

</property>

Copiar la configuración a todos los nodos.

$ ./copy_config.sh

En elephant, iniciar ZooKeeper MapReduce$ sudo service hadoop-0.20-mapreduce-zkfc init

En elephant y tiger, reiniciar Zookeeper para MapReduce y los JobTracker.

$ sudo service hadoop-0.20-mapreduce-zkfc restart

$ sudo service hadoop-0.20-mapreduce-jobtrackerha restart

Verificar el estado de los JobTracker.

$ sudo -u mapred hadoop mrhaadmin -getServiceState jt1

$ sudo -u mapred hadoop mrhaadmin -getServiceState jt2

Matar el proceso del Jobtracker en el nodo activo, en este caso debería ser elephant .

$ sudo jps | grep JobTracker

<id> JobTraceker

$ sudo kill -9 <id>

# Verificar que ya no está el proceso

$ sudo jps | grep JobTracker

Verificar el estado del actual de los JobTracker.

$ sudo -u mapred hadoop mrhaadmin -getServiceState jt1

$ sudo -u mapred hadoop mrhaadmin -getServiceState jt2

Page 71: Administración de Apache Hadoop a través de Cloudera

Reiniciar el JobTracker de elephant y levantar los TaskTracker en todos los nodos.

$ sudo service hadoop-0.20-mapreduce-jobtrackerha restart

$ sudo service hadoop-0.20-mapreduce-tasktracker start

Ahora están todos los servicios del clúster de Hadoop iniciados con alta disponibilidad para el NameNode y el JobTracker.

Page 72: Administración de Apache Hadoop a través de Cloudera

16.7. MapReduce en el clúster

Ejecutar varios ejemplos de MapReduce.

16.7.1. Wordcount

Con el usuario training ejecutar en el clúster de alta disponibilidad.

$ mkdir shakespeare && cd shakespeare

$ wget http://www3.nd.edu/~ccl/software/tutorials/ndtut12/makeflow/shakespeare-text.tgz

$ tar zxvf shakespeare-text.tgz

$ hadoop fs -mkdir shakespeare

$ hadoop fs -put *.txt shakespeare/

$ hadoop fs -ls shakespeare/

$ hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar wordcount shakespeare output-wordcount

El JobTracker activo en el ejemplo es tiger, configurado en el puerto 50031. Desde la interfazweb se puede ver la información del JobTracker y los trabajos lanzados o en ejecución.

Pulsando sobre en enlace del Jobid se accede a la información del trabajo de MapReduce wordcount.

Page 73: Administración de Apache Hadoop a través de Cloudera

En la información del trabajo se pueden ver las tareas de tipo Map y Reduce, el número detareas pendientes, en ejecución, completadas y fallidas.

Pulsando sobre en enlace del número de tareas Map completadas se accede a la información delas mismas tareas.

La lista de tareas Map muestra las tareas completadas. Para más detalles pulsar sobre una tarea.

La tarea Map se ejecutó en el nodo tiger. El bloque de datos se leyó del nodo monkey, en latabla Input Split Locations se indican en que nodos está replicado el bloque de datos de entradautilizado en esta tarea.

Page 74: Administración de Apache Hadoop a través de Cloudera

Del mismo modo se puede acceder al detalle de las tareas Reduce.

Si en el directorio de entrada shakespeare hubiesen varios ficheros de más de 64 MB, tamañode bloque por defecto en Hadoop, se generarían varias tareas en varios nodos del clúster.

Por defecto, cada bloque de datos se almacena en 3 nodos distintos y cada nodo ejecuta comomáximo 2 tareas simultáneas. Por ese motivo en la configuración del clúster se añadieron rutas ados discos distintos /disk1 y /disk2 para así optimizar lecturas de los bloques durante la ejecución delas tareas simultáneas.

Hadoop optimizará en la medida de los posible el reparto de tareas a los nodos en función de laproximidad de los datos.

17. Seguridad

Un clúster de Hadoop por defecto no tiene ningún tipo de seguridad. Cualquiera que tengaacceso a la red del clúster puede hacerse pasar por el NameNode o el JobTracker con ténicas deDNS spoofing4.

Además, un equipo al que se tenga acceso de adminitrador puede acceder a todas las carpetasde los usuarios y realizar cualquier cambio en el sistema de ficheros HDFS. Por ejemplo, instalandoel cliente en un equipo.

$ sudo apt-get install hadoop-client

# Configurar el NameNode en /etc/hadoop/core-site.xml

<property>

<name>fs.defaultFS</name>

<value>hdfs://[hostname_namenode]:8020</value>

</property>

$ sudo -u hdfs hadoop fs -ls /

$ sudo -u hdfs hadoop fs -rm -r /*

HDFS soporta permisos de usuario y de grupo lectura, escritura y ejecución. Pero no hayautenticación, solo existe del lado del cliente.

Hadoop tampoco utiliza cifrado de datos del disco. Aunque los datos están repartidos en bloques de64 MB o más, si alguien extrae un disco podría obtener la información contenido a partir de losbloques y el fichero “edits” del NameNode. La razón de no cifrar los datos en disco reside en la

4 http://en.wikipedia.org/wiki/DNS_spoofing

Page 75: Administración de Apache Hadoop a través de Cloudera

eficiencia de los trabajos MapReduce para aumentar la compresión de los datos al enviarse a travésde los nodos.

Para la transmisión de datos entre los nodos se puede configurar IPSec independiente para cifrar eltráfico.

La seguridad de un cluster está orientado al aislamiento. Debería estar en una red privada. Losaccesos a los nodos/red deben estar restringidos a usuarios no legítimos.

Para que un cliente pueda lanzar trabajos MapReduce es suficiente con tener acceso al nodo delJobTracker. No necesita acceso a los DataNode en ningún momento.

En resumen, permitir a los clientes accesos a los puertos del NameNode y el JobTracker. Permitir eltráfico de estos con los DataNode y TaskTracker.

Si se desea añadir autenticación del lado servidor hay que añadir Kerberos y configurar cadaservicio de Hadoop. Los requisitos para poder tener autenticación con Kerberos son:

• Tener configurado el clúster de Hadoop y probar antes su funcionamiento.

• Instalar el servidor de Kerberos KDC.

• Instalar las bibliotecas de Kerberos en todos los nodos del clúster.

Algunas aplicaciones necesitan añadir configuración adicional para el uso de Kerberos, por ejemploMapReduce y Hive. Pig y Sqoop no lo necesitan.

18. Bibliografía

Guía de Instalación de Cloudera http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/latest/CDH4-High-Availability-Guide/CDH4-High-Availability-Guide.html

Guía de Instalación de Alta Disponibilidad de Cloudera http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/latest/CDH4-High-Availability-Guide/CDH4-High-Availability-Guide.html

Guía de Instalación de Kerberos de Cloudera http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/4.3.0/CDH4-Security-Guide/CDH4-Security-Guide.html

WHITE, Tom. Hadoop: The Definitive Guide. O'Reilly. 2013