SlideShare une entreprise Scribd logo
1  sur  75
Télécharger pour lire hors ligne
Informática como Servicio
Administración de Apache Hadoop
a través de Cloudera
David Albela Pérez
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.
Tabla de Contenidos
1.Introducción.......................................................................................................................................5
2.Requisitos previos.............................................................................................................................6
2.1.Instalación de Java Development Kit........................................................................................6
3.Añadir repositorio de Cloudera.........................................................................................................6
4.Instalación en modo pseudo-distribuído............................................................................................7
4.1.Instalación en Debian 7 o superior............................................................................................7
5.Componentes de Hadoop...................................................................................................................8
5.1.HDFS.........................................................................................................................................8
5.2.NameNode.................................................................................................................................9
5.3.Secundary NameNode.............................................................................................................10
5.4.JobTracker................................................................................................................................10
5.5.DataNode y TaskTracker.........................................................................................................10
6.Configuración en modo pseudodistribuído.....................................................................................10
6.1.1.Puertos de Interfaz Web de los Servicios de HDFS y MapReduce..................................12
7.MapReduce......................................................................................................................................12
7.1.Ejemplo Grep...........................................................................................................................13
7.2.Funcionamiento de MapReduce..............................................................................................14
7.3.Terminología de MapReduce...................................................................................................15
8.HBase..............................................................................................................................................15
8.1.Instalación................................................................................................................................15
8.2.Configuración de HBase..........................................................................................................16
8.2.1.DNS con Hbase................................................................................................................16
8.2.2.Utilizando el protocolo de tiempo de red (NTP ) con Hbase...........................................16
8.2.3.Ajuste de los límites de usuario para HBase....................................................................16
8.2.4.Configurar dfs.datanode.max.xcievers con Hbase...........................................................17
8.3.Activar Hbase en modo Pseudodistribuído..............................................................................17
8.3.1.Crear directorio en HDFS................................................................................................17
8.3.2.Instalación de servidores adicionales...............................................................................18
8.4.Ejemplo de HBASE.................................................................................................................18
9.Flume...............................................................................................................................................19
9.1.Funcionamiento de Flume.......................................................................................................19
9.2.Instalación y Configuración.....................................................................................................20
10.Sqoop.............................................................................................................................................21
10.1.Instalación y configuración de HBase REST y Apache Thrift..............................................22
10.1.1.Instalación de HBase REST...........................................................................................22
10.1.2.Instalación de HBase Thrift...........................................................................................22
10.2.Instalación de Sqoop..............................................................................................................23
10.3.Importar una Base de Datos...................................................................................................24
11.Hive................................................................................................................................................26
11.1.Instalación de Hive................................................................................................................27
11.2.Ejemplo en Hive....................................................................................................................30
12.Impala............................................................................................................................................32
12.1.Instalación de Impala.............................................................................................................32
12.2.Configuración de Impala.......................................................................................................34
12.3.Ejemplo de Impala.................................................................................................................35
13.Pig..................................................................................................................................................37
13.1.Instalación de Pig...................................................................................................................37
13.2.Ejemplo de Pig.......................................................................................................................38
14.Hue................................................................................................................................................40
14.1.Instalación de Hue.................................................................................................................40
15.Otras Herramientas para Hadoop..................................................................................................42
15.1.Oozie......................................................................................................................................42
15.2.Zookeeper..............................................................................................................................43
15.3.Whirr......................................................................................................................................44
15.4.Snappy...................................................................................................................................45
15.5.Mahout...................................................................................................................................45
15.6.Avro.......................................................................................................................................46
16.Clúster de Hadoop con Alta Disponibilidad..................................................................................46
16.1.Componentes.........................................................................................................................46
16.1.1.NameNode.....................................................................................................................46
16.1.2.SecundaryNamenode.....................................................................................................46
16.1.3.DataNode.......................................................................................................................47
16.1.4.JobTracker......................................................................................................................47
16.1.5.TaskTracker....................................................................................................................47
16.2.Instalación del clúster............................................................................................................47
16.2.1.Requisitos Mínimos.......................................................................................................47
16.2.2.Desinstalar Cloudera Manager.......................................................................................48
16.3.Crear un Clúster de Hadoop...................................................................................................49
16.3.1.Configuración de Red....................................................................................................50
16.3.2.Instalación de paquetes..................................................................................................52
16.3.3.Configuración.................................................................................................................52
16.4.Alta Disponibilidad del NameNode.......................................................................................56
16.4.1.Failover Automático.......................................................................................................57
16.5.Clúster de Hadoop con Alta Disponibilidad..........................................................................57
16.5.1.Instalación de paquetes..................................................................................................57
16.5.2.Configuración.................................................................................................................58
16.6.Alta Disponibilidad en el JobTracker....................................................................................65
16.7.MapReduce en el clúster........................................................................................................71
16.7.1.Wordcount......................................................................................................................71
17.Seguridad.......................................................................................................................................73
18.Bibliografía....................................................................................................................................74
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/
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
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.
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á de
distribuír los trabajos enviados por el cliente a los distintos TraskTrackers. Normalmente se
ejecuta en el nodo maestro denominado NameNode. Este paquete no incluye JobTracker en
modo de alta disponibilidad (HA).
• hadoop-0.20-mapreduce-tasktracker: Servicio TaskTracker. Este demonio se encarga de
ejecutar 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. Cada
DataNode se encarga de almacenar un conjunto de bloques de HDFS así como un checksum
para validar que no está corrupto. Un nodo maestro o NameNode puede ser también
DataNode.
• Hadoop-hdfs-namenode: Servicio NameNode. Se instala en el nodo maestro. Se encarga
de gestionar la metainformación de los ficheros almacenados en HDFS así como guardar un
registro de los bloques que contiene cada fichero y en que DataNodes están. Cuando se
guarda un bloque automáticamente se almacenan 3 réplicas en diferentes DataNodes. El
NameNode también se encarga de solicitar nuevas réplicas en caso de encontrarse bloques
corruptos o caer algún DataNode. Si el NameNode cae no se puede acceder al sistema de
ficheros HDFS.
• Hadoop-hdfs-secondarynamenodelib: Servicio SecondaryNameNode se trata de un
NameNode secundario que libera de carga para la actualización del registro de bloques-
archivo del NameNode principal. Este NameNode secundario no provee de alta
disponibildad 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 el
nodo 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 Hadoop
está preparado para trabajar con gran candidad de datos.
Los ficheros son de una única escritura. Una vez colocado en HDFS, el fichero no se puede
modificar. La única opción es leerlo, modificarlo y resubirlo. Sin embargo, existe la opción
APPEND para agregar más datos a un fichero. Por ejemplo, la base de datos NoSQL HBase utiliza
esta opción para guardar sus tablas de datos en HDFS optimizando el tamaño de estas hasta ocupar
el mínimo bloque.
Los directorios en HDFS no tienen ningún bloque asignado, pero sí tienen metadatos como los
permisos 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 o
checkpoint. La información de los metadatos se almacena y actualiza solo en memoria, sin embargo
los cambios son registados en disco en los ficheros edits.
Si el NameNode cae, no se puede acceder al sistema de ficheros de Hadoop. Durante el
arranque 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, sin
embargo la ubicación de los bloques se guarda en memoria en base al informe enviado por cada
DataNode. Los bloques nunca son transferidos al NameNode, sino que este le dice al nodo con la
réplica que la envíe a un tercer nodo. Cuando un cliente quiere leer un fichero, le pregunta al
NameNode donde se encuetran los datos, devoliendo una lista ordenada de los DataNode y nombre
de 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
5.4. JobTracker
Es el proceso encargado de gestionar los trabajos MapReduce. Sin el JobTracker no se pueden
ejecutar trabajos MapReduce en el clúster.
En caso de que un nodo TaskTracker falle una tarea Map intenta ejecutar la misma tarea en otro
nodo del clúster. Realiza hasta cuatro intentos en distintos nodos por cada tarea antes de avisar del
fallo de la tarea.
El JobTracker recibe mensajes heartbeat enviados por los TraskTracker para saber si están
disponibles 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 servicio
encargado de ejecutar las tareas MapReduce en un nodo.
Normalmente el DataNode y el TaskTracker se instalan en el mismo nodo para poder procesar
bloques de datos locales, aunque es posible tener un nodo solo con el demonio del TaskTracker y
recibir los datos de otro nodo.
El DataNode y el TaskTracker envían mensajes heartbeats al NameNode y JobTracker
respectivamente para indicar que están disponibles. El DataNode envía además, para informar al
NameNode, los bloques de datos que tiene disponibles.
Cada bloque de datos almacenado en el DataNode tiene asociado un fichero .meta con el
checksum 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, de
forma que los bloques de datos se puedan leer directamente de cada uno de los distos
simultáneamente en las tareas Map. Para evitar pérdidas de información, se realiza un réplica de
cada bloque por defecto en 3 DataNode.
Por otra parte, los TaskTracker cuando terminan una tarea Map almacenan los datos de salida
en el disco local para sen enviados posteriormente al TraskTracker que ejecuta la tarea Reduce (en
la 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.
NOTA: En el caso de haber instalado Hadoop 2.0 o superior se incluiría el fichero de configuración
yarn-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
$ 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
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 sobre
ficheros 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 estado
del JobTracker y todos los trabajos lanzados.
Pulsando en el enlace sobre el jobid del trabajo lanzado se puede ver información detallada del
mismo.
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 fase
intermedia que incluye los procesos shuffle y short.
Estes dos procesos se encargan de mezclar y reordenar los datos generados en cada tarea Map para
que las tareas Reduce obtengan los pares clave-valor ordenados y agrupados. Los datos
intermediarios generados, de la salida Map, se almacenan en el nodo local donde se generan. Por
ejemplo, en el ejemplo clásico de WordCount las salidas Map generadas en la tarea de un nodo (the
1) (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 datos
intermediarios se escriben en el disco del nodo local. Durante la fase de shuffle & sort todos los
valores asociadores se reordenan.
Los datos intercambiados entre los nodos a través de la red del clúster se comprimen por defecto
para 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 de
con que tipo de ficheros se desee trabajar, por ejemplo, tratamiento de imágenes requiere un mayor
coste computacional de compresión/descompresión con mucho menor ahora de espacio frente a
tratamiento de archivos de texto.
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 entrada
para cada trabajo. Por defecto, los input splits son los bloques de cada fichero. Cada tarea
Map procesa un único "input split".
Cada demonio con su identificador jps es una instancia de la Máquina Virtual de Java. Cada vez que
el TaskTracker lanza un tarea se crea una nueva instancia de la JVM. Así se aisla el TraskTracker de
fallos de código o bugs, en caso de fallo se vuelve a lanzar la tarea asignada hasta un número
determinado de intentos. Las tareas Task envían heartbreats al TaskTracker para indicar que están
disponibles y funcionales. Si un TackTracker está ejecutando 3 tareas, tenemos 3 JVM. Cada JVM
envía heartbeats al TaskTracker. Si dejan de recibirse heartbeats, el TaskTracker mata la instacia
JVM 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 para
Hadoop utilizando HDFS.
Cloudera recomienda siempre instalar HBase en un modo independiente antes de intentar
ejecutarlo en un clúster de conjunto.
Dado que Hbase almacena varias versiones de los registros almacenados en las tablas es
necesario 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
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 de
configuració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ón
del 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 para
elegir 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 sobre
NTP , 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.conf
hdfs - nofile 32768
hbase - 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
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 del
número de ficheros que puede servir al mismo tiempo. El valor recomendado es de 4096. Para
efectuar 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 $x
restart ; 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 nodo
maestro se ejecuta como el usuario hbase por tanto también hay que asignarle los permisos
necesarios. 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
8.3.2. Instalación de servidores adicionales
Una vez configurado se necesita instalar los servidores que forman un clúster de HBase en modo
distribuído o distribuído:
• ZooKeeper: Proporciona un servicio centralizado de alta disponibilidad para la gestión del
clú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. Se
ejecuta 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
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 de
distintas 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és
distintos 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 el
servidor web a través de la rotación de logs en Unix con el proceso rsyslog y el agente se encarga de
enviar 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 agente
caiga, los logs enviados por el servidor se mantienen en el origen o source. Los datos se suelen
guardar en el agente hasta alcanzar un tamaño máximo para así optimizar el uso de los bloques de
HDFS, 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 los
datos 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 para
serializar los datos y no perder el formato. De esta manera se realiza un reparto eficiente de los
distintos logs de varios servidores en varios agentes. El recolegor de flume se encarga de recoger la
informació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.
Opcionalmente se pueden determinar variables de entorno para flume-env.sh. El ejecutable flume-ng
utiliza 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 de
orí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, el
driver 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 las
funcionalidades descritas anteriormente. Se trata de un programa cliente que accede a la
base de datos relacional y a Hadoop.
• Sqoop2: Permite la instalación de Sqoop como un servicio. De este modo se puede utilizar
Sqoop desde varios hosts sin necesidad de instalar todos los drivers JDBC y el cliente de
Sqoop en todos los hosts. Añade una interfaz web y servicio REST a través de dos
interfaces:
◦ 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 un
script, 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 de
HDFS, 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 para
utilizar HBase a través del servicio web REST y Thrift en lugar de utilizar un driver JDBC
especí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 caso
de 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ámetros
en 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 HBASE
independientemente del lenguaje utilizado. El servicio Thrift es multiplataforma y más eficiente que
REST en muchos casos. No debería de ser instalado en el mismo nodo donde está el NameNode y
JobTracker.
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 JDBC
de 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ón
de Sqoop.
$ sudo ln -s /usr/share/java/mysql-connector-java.jar /usr/lib/sqoop/lib/
10.3. Importar una Base de Datos
Con Sqoop instalado y los drivers JDBC necesarios y copiados en la ruta del cliente se puede
importar una base de datos. A continuación se detallan los pasos de la importación de una base de
datos 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 datos
que 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' --username
training --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 hasta
superar los 1024 bytes.
Cuando se realiza la ejecución de importación se lanza automáticamente un trabajo Map, sin la fase
Reduce.
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 tabla
importada.
En la ruta del usuario del sistema operativo se crea una clase java con el nombre de la tabla
importada que contiene el MapReduce.
4. Ver el contenido importado en HDFS.
$ hadoop fs -ls binary_files
$ hadoop fs -tail binary_texts/part-m-00000
En los ficheros part-m-xxxxx estan los datos importados. La m indica que son salidas de tareas tipo
Map.
11. Hive
Hive fue desarrollado por el equipo de Facebook para realizar el análisis de gran canditada de
datos 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 autogenera
clases java para ejecutar trabajos MapReduce. No permite operaciones de modificación como
update 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 quiere
trabajar indicando sus columnas, nombre y separadores. Para ello utiliza una base de datos
relaciones 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 por
todos los usuarios con acceso.
• Embedded Mode: Todo en un único proceso. Implementación por defecto. Utiliza una base
de datos Apache Derby, la ejecución del MetaStore y la base de datos están dentro del
proceso de Hive. Solo admite un usuario activo en cada ejecución. No se aconseja su uso en
producción.
• MetaStore Local: El proceso de MetaStore se ejecuta en el mismo proceso que el de
HiveServer pero la base de datos se ejecuta en un proceso separado y puede estar en un host
separado. La comunicación se realiza a través de JDBC. Soporta varios gestores de bases de
datos 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. El
servicio de MetaStore se comunica con la base de datos a través de JDBC. Si múltiples
usuarios 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 servidor
donde los clientes acceden al servidor Hive2. Los clientes no se conectan directamente al MetaStore
ni al cluster de Hadoop aportando mayor segudad por restricción de acceso directo al MetaStrore y
al clúster y tiene una configuración más sencilla. Soporta ODBC para conectarse al MetaStore
ademá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 metadatos
necesarios para las tablas y particiones de datos de Hive en una base de datos relacional. Para ello
se 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;
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>
<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 Hadoop
HDFS.
# 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;
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 formato
cualquier en HDFS. En este ejemplo se utilizarán los datos importados de la base de datos
translator 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 la
separación de cada campo. En el ejemplo, la primera columna hace referencia al campo english y la
segunda la columna spanish. Ambas columnas están separadas por una tabulación (t). Los ficheros
que 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, english
STRING, spanish STRING, created TIMESTAMP) ROW FORMAT DELIMITED FIELDS
TERMINATED 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 pueden
ejecutar trabajos MapReduce.
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 condiciones
WHERE o HAVING.
12. Impala
Impala es una herramienta de código abierto creada por Cloudera que permite a los usuarios
consultar los datos en HDFS usando HiveQL. Utiliza la misma MetaStore compartida de Hive. La
diferencia 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 los
clientes.
• 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 Impala
antes 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 contrib
deb-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 no
se debe eliminar.
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
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
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 al
50% 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ñadir
tambié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
En la dirección http://localhost:25000/ se puede acceder a la interfaz web de Impala Server donde
localhost es el hostname donde está instalado.
Iniciar los servicios de MySQL y MetaStore. Iniciar además los servicios de Hadoop HDFS si no
está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 Impala
aú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;
Cada vez que se ejecuta una misma consulta, los resultados se almacenan en el catálogo. Si se repite
la 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 los
30 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 a
través de consultas. La diferencia es que no utiliza sentencias SQL sino que tiene su propio
lenguaje.
Inicialmente desarrollado por Yahoo! y liberado para la Apache Software Fundation. Utiliza un
lenguaje de control de flujo llamado Pig Latin que permite realizar consultas en un clúster
distribuído de Hadoop.
Se supone que el lenguaje es más sencillo y facilita realizar análisis de datos a personas que no
conocen la sintaxis de SQL. Se trabaja con datos estructurados donde se definen bolsas en lugar de
tablas. Cada bolsa carga un conjunto de datos de HDFS.
13.1. Instalación de Pig
Para instalar Pig ejecutar.
$ 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 contiene
textos en inglés con su traducción al español. Cada registro de binary_texts pertenece a un registro
de 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.
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 un
registro se almacenase en más de una línea en los ficheros. En cambio Pig obtenía los resultados
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 y
administrar los servicios de diferentes aplicaciones a través de su interfaz web. El nodo con Hue
instalado 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 y
permite restringir acceso al clúster desde la interfaz web a través de usuarios y grupos. También
incluye 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 de
configuración de Hive en los de Hue.
• Impala UI: Permite acceder al shell de Impala. Para su uso se requier añadir los ficheros de
configuración de Impala en los de Hue.
• File Browser: Permite acceder a los datos en HDFS. Para ello es necesario activar el servicio
REST 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 los
plugins 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)
$ 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 ambos
servicios 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
$ 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_admin
indicada en el paso anterior.
NOTA: En modo distribuído con varios clústers sustituír “localhost” por en hostname del nodo
donde están instalados los diferentes servicios JobTracker, TaskTracker, MetaStore, Hive, Impala y
Hue.
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 definidas
en grafos DAG (Directed Acyclical Graphs).
• Ooozie Coordinator: el coordinador de Oozie lanza estos trabajos según cada unidad tiempo
y la disponibilidad de los datos.
• Oozie Bundle: Agrupación de un conjunto de trabajos que son gestionados como un único
trabajo.
En resumen Oozie es un servicio extensible, escalable y contenedor de datos que permite
harmonizar dependencias de varios trabajos ejecutados en Hadoop como un único trabajo
MapReduce.
Para instalar Oozie se necesitan los paquete del servicio y el cliente:
$ sudo apt-get install oozie
$ sudo apt-get install oozie-client
Por defecto está configurado para MapReduce v1 con la variable de entorno
CATALINA_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 una
base de datos embebida que no permite monitorizar su estado de salud. Para configurar la base de
datos 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 de
configuraciones, nombres y sincronización de servicios disponibles. Al igual el resto de
aplicaciones para Hadoo, es una herramienta de código abierto a cargo de Apache Software
Fundation.
Como su nombre indica, cuidador del zoo, se encarga de gestionar la fauna de Hadoop. Todos
los servicios se utilizan a través de aplicaciones distribuídas y cada vez que se implementan hay
muchas tareas y trabajos que realizar para su configuración y funcionamiento que terminan en
problemas 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 Zookeeper
y sus clientes.
• Zookeeper Server: Contiene los scripts de inicio del servicio necesarios para ejecutar
Zookeeper como un proceso demonio. Depende de zookeeper, su instalación incluye el
paquete básico.
Para su instalación ejecutar las siguientes lineas en un terminal.
$ sudo apt-get install zookeeper
$ sudo apt-get install zookeeper-server
15.3. Whirr
Es un conjunto de bibliotecas para ejecutar Hadoop en servicios Cloud. Se puede usar en
clústers como Amazon EC2 sin necesidad de instalar los paquetes de Hadoop ni realizar
configuración alguna, tan solo se necesita ejecutar los comandos de Whirr. Es ideal para crear y
ejecutar clusters de Hadoop como prueba de concepto para ejecutar unos pocos trabajos
MapReduce. Cuando terminen los trabajos se puede eliminar el clúster de Hadoop y todos los datos
generados con un comando.
Para instalar el cliente Whirr ejecutar.
$ sudo apt-get install whirr
# Verificar la versión
$ whirr version
# Generar par de clave SSH
ssh-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=myhadoopcluster
whirr.instance-templates=1 hadoop-jobtracker+hadoop-namenode,1 hadoop-
datanode+hadoop-tasktracker
whirr.provider=aws-ec2
whirr.identity=<cloud-provider-identity>
whirr.credential=<cloud-provider-credential>
whirr.private-key-file=${sys:user.home}/.ssh/id_rsa
whirr.public-key-file=${sys:user.home}/.ssh/id_rsa.pub
whirr.env.repo=cdh4
whirr.hadoop-install-function=install_cdh_hadoop
whirr.hadoop-configure-function=configure_cdh_hadoop
whirr.hardware-id=m1.large
whirr.image-id=us-east-1/ami-ccb35ea5
whirr.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 ruta
del 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 el
directorio ~/.whirr/<cluster-name>.
Para lanzar un trabajo MapReduce:
$ export HADOOP_MAPRED_HOME=/usr/lib/hadoop-0.20-mapreduce
$ 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 la
obtener porcentajes razonables de compresión en poco tiempo y su máxima compresión con
compatibilidad con otras bibliotecas de compresión.
Se utiliza en trabajos MapReduce, Pig, Hive, importación con Sqoop y con la base de datos
HBase. En el caso de MapReduce se utiliza como compresión/descompresión de los datos
intermediarios de la fase shuffle & order haciendo la ejecución de trabajos más rápida gracías a la
rapidez 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 en
MapReduce 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 datos
razonablemente 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. La
mascota de Hadoop es un elefante, en alusión al elefante de peluche de la hija de su creador, Doug
Cutting. 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, por
ejemplo artículos más comprados por usuarios.
2 Machine-Learning: Técnica para enseñar a los programas que deben hacer.
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 y
contenedor de ficheros ("Avro data files"). Su uso está pensado para el envío de datos entre
aplicaciones o servicios escritos en distintos lenguajes de programación. Se suele utilizar en los
agentes 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 alta
disponibilidad (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 los
metadatos de los ficheros de HDFS y las tripletas fichero-bloque-DataNode para localizar los
bloques de los ficheros almacenados en los nodos DataNode.
Si el NameNode falla no se puede acceder al sistema de ficheros HDFS. Por eso es importante
tener alta disponibilidad instalando un NameNode activo y otro pasivo para que en caso de fallo del
prime, entre en ejecución el segundo.
Solo puede existir un único NameNode funcionado, el cual guarda los metadatos de los
ficheros (permisos de ficheros, fechas de creación y acceso, etc) y la información de donde están
almacenados 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 NameNode
para 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 y
posteriomente actualizándose en el NameNode activo.
Sin embargo, este nodo no ofrece la alta disponibilidad, si cae el NameNode se case el sistema
de ficheros HDFS y con ello todos los trabajos MapReduce lanzados.
La importancia del SecundaryNamenode reside en tener una copia actualizada del fichero que
contiene 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 nodos
esclavos. Cada DataNode guarda solo los bloques de los ficheros y sus checksums para verificar
que no están corruptos.
16.1.4. JobTracker
El JobTracker es el servicio que se encarga de lanzar y coordinar los trabajos MapReduce a los
JobTracker. 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 ejecutan
en los DataNode. Si un TaskTracker detecta un fallo en la tarea ejecutada en el nodo, avisa al
JobTaskTracker y este envía la orden de ejecutar la tarea en otro nodo que contenga los bloques de
datos 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. Los
nodos 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 de
Estados 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ínimo
de las siguientes características:
• 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 los
paquetes de Cloudera. También gestiona el inicio de los servicios de Hadoop y se encarga de
lanzarlos en caso de que se paren.
Abrir el navegador Firefox y pulsar en el enlace “Coudera Manager”. Iniciar sesión con el
usuario y contraseña cloudera. Seleccionar la pestaña Actions general de la parte superior derecha y
escoger 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-*'
Comprobar que los servicios de NameNode, DataNode, JobTracker y TaskTracker no están
ejecutá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 son
necesarios.
Cada máquina virtual necesita como mínimo:
• CPU con 1 núcleo
• 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” en
Configuración, opción General, pestaña Avanzado y seleccionar Bidireccional. En la misma pestaña
es posible cambiar el nombre de la máquina virtual descargada por un nombre identificativo del
nodo.
Los ficheros .ovf se pueden renombrar, pero los discos *.vmdk si se modifican, se debe
especificar 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 Red
interna.
16.3.1. Configuración de Red
Iniciar las cuatro máquinas virtuales y configurar la segunda interfaz de red con las siguientes IP
estáticas bien con network-manager desde el panel de escritorio o editando la configuración de la
interfaz 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
• 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
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
<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"
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/nn
sudo mkdir -p /disk2/dfs/nn
sudo mkdir -p /disk1/dfs/dn
sudo mkdir -p /disk2/dfs/dn
sudo mkdir -p /disk1/mapred/local
sudo mkdir -p /disk2/mapred/local
# Cambiar propietarios
sudo chown -R hdfs:hadoop /disk1/dfs/nn
sudo chown -R hdfs:hadoop /disk2/dfs/nn
sudo chown -R hdfs:hadoop /disk1/dfs/dn
sudo chown -R hdfs:hadoop /disk2/dfs/dn
sudo chown -R mapred:hadoop /disk1/mapred/local
sudo 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.
16.4. Alta Disponibilidad del NameNode
La configuración de alta disponibilidad para el NameNode utiliza dos nodos, uno activo y otro
pasivo también llamado standby. El NameNode pasivo necesita tener acceso a los últimos
metadatos actualizados antes de un fallo en el NameNode activo. Para ello, los metadatos se
almacenan 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 el
NameNode pasivo o standby.
3 http://es.wikipedia.org/wiki/Algoritmo_de_Paxos
16.4.1. Failover Automático
Por defecto, si falla el NameNode activo, se debe realizar manualmente la activación del
NameNode pasivo. Es decir, si el nodo maestro cae, el administrador tiene que cambiar de pasivo a
activo el NameNode en standby.
Es posible hacer que el cambio se haga de forma automática con Zookeeper. Zookeeper es un
demonio controlador de fallos que funciona en cada NameNode como un servicio de repositorio de
datos. Para su funcionamiento se necesita un grupo de nodos con Zookeeper instalado llamado
quorum 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
$ 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>
Administración de Apache Hadoop a través de Cloudera
Administración de Apache Hadoop a través de Cloudera
Administración de Apache Hadoop a través de Cloudera
Administración de Apache Hadoop a través de Cloudera
Administración de Apache Hadoop a través de Cloudera
Administración de Apache Hadoop a través de Cloudera
Administración de Apache Hadoop a través de Cloudera
Administración de Apache Hadoop a través de Cloudera
Administración de Apache Hadoop a través de Cloudera
Administración de Apache Hadoop a través de Cloudera
Administración de Apache Hadoop a través de Cloudera
Administración de Apache Hadoop a través de Cloudera
Administración de Apache Hadoop a través de Cloudera
Administración de Apache Hadoop a través de Cloudera
Administración de Apache Hadoop a través de Cloudera
Administración de Apache Hadoop a través de Cloudera

Contenu connexe

Tendances

SQL Server Index and Partition Strategy
SQL Server Index and Partition StrategySQL Server Index and Partition Strategy
SQL Server Index and Partition StrategyHamid J. Fard
 
SISTEMAS OPERATIVOS (I Bimestre Abril Agosto 2011)
SISTEMAS OPERATIVOS (I Bimestre Abril Agosto 2011)SISTEMAS OPERATIVOS (I Bimestre Abril Agosto 2011)
SISTEMAS OPERATIVOS (I Bimestre Abril Agosto 2011)Videoconferencias UTPL
 
PSW Unidad 4 ESTIMACIÓN DE PROYECTOS DE SOFTWARE
PSW Unidad 4 ESTIMACIÓN DE PROYECTOS DE SOFTWAREPSW Unidad 4 ESTIMACIÓN DE PROYECTOS DE SOFTWARE
PSW Unidad 4 ESTIMACIÓN DE PROYECTOS DE SOFTWAREFranklin Parrales Bravo
 
Herramientas CASE
Herramientas CASEHerramientas CASE
Herramientas CASEI R
 
Taller de Base de datos - Unidad 1 SGBD introduccion
Taller de Base de datos - Unidad 1 SGBD introduccionTaller de Base de datos - Unidad 1 SGBD introduccion
Taller de Base de datos - Unidad 1 SGBD introduccionJosé Antonio Sandoval Acosta
 
Decodificación de direcciones de comunicación
Decodificación de direcciones de comunicaciónDecodificación de direcciones de comunicación
Decodificación de direcciones de comunicaciónMely Elizabeth
 
Dependencias Funcionales en Bases de Datos
Dependencias Funcionales en Bases de DatosDependencias Funcionales en Bases de Datos
Dependencias Funcionales en Bases de DatosEsteban Andres Diaz Mina
 
DiseñO Del Software E IngenieríA Del Software
DiseñO Del Software E IngenieríA Del SoftwareDiseñO Del Software E IngenieríA Del Software
DiseñO Del Software E IngenieríA Del Softwarelcastillo110
 
39029313 libro-de-texto-para-la-materia-de-graficacion
39029313 libro-de-texto-para-la-materia-de-graficacion39029313 libro-de-texto-para-la-materia-de-graficacion
39029313 libro-de-texto-para-la-materia-de-graficacionYamil Hernandez Ortega
 
Gestión de riesgos de software
Gestión de riesgos de softwareGestión de riesgos de software
Gestión de riesgos de softwareOmar S. Gomez
 
Database Performance Tuning
Database Performance Tuning Database Performance Tuning
Database Performance Tuning Arno Huetter
 
Oracle RAC - New Generation
Oracle RAC - New GenerationOracle RAC - New Generation
Oracle RAC - New GenerationAnil Nair
 
Oracle data guard for beginners
Oracle data guard for beginnersOracle data guard for beginners
Oracle data guard for beginnersPini Dibask
 
Estimación de costo de software
Estimación de costo de softwareEstimación de costo de software
Estimación de costo de softwareJhoseph Lugo
 

Tendances (20)

SQL Server Index and Partition Strategy
SQL Server Index and Partition StrategySQL Server Index and Partition Strategy
SQL Server Index and Partition Strategy
 
SISTEMAS OPERATIVOS (I Bimestre Abril Agosto 2011)
SISTEMAS OPERATIVOS (I Bimestre Abril Agosto 2011)SISTEMAS OPERATIVOS (I Bimestre Abril Agosto 2011)
SISTEMAS OPERATIVOS (I Bimestre Abril Agosto 2011)
 
PSW Unidad 4 ESTIMACIÓN DE PROYECTOS DE SOFTWARE
PSW Unidad 4 ESTIMACIÓN DE PROYECTOS DE SOFTWAREPSW Unidad 4 ESTIMACIÓN DE PROYECTOS DE SOFTWARE
PSW Unidad 4 ESTIMACIÓN DE PROYECTOS DE SOFTWARE
 
Herramientas CASE
Herramientas CASEHerramientas CASE
Herramientas CASE
 
Taller de Base de datos - Unidad 1 SGBD introduccion
Taller de Base de datos - Unidad 1 SGBD introduccionTaller de Base de datos - Unidad 1 SGBD introduccion
Taller de Base de datos - Unidad 1 SGBD introduccion
 
Decodificación de direcciones de comunicación
Decodificación de direcciones de comunicaciónDecodificación de direcciones de comunicación
Decodificación de direcciones de comunicación
 
Dependencias Funcionales en Bases de Datos
Dependencias Funcionales en Bases de DatosDependencias Funcionales en Bases de Datos
Dependencias Funcionales en Bases de Datos
 
Arquitectura del software
Arquitectura del softwareArquitectura del software
Arquitectura del software
 
Estimación de Proyectos de Software
Estimación de Proyectos de SoftwareEstimación de Proyectos de Software
Estimación de Proyectos de Software
 
DiseñO Del Software E IngenieríA Del Software
DiseñO Del Software E IngenieríA Del SoftwareDiseñO Del Software E IngenieríA Del Software
DiseñO Del Software E IngenieríA Del Software
 
39029313 libro-de-texto-para-la-materia-de-graficacion
39029313 libro-de-texto-para-la-materia-de-graficacion39029313 libro-de-texto-para-la-materia-de-graficacion
39029313 libro-de-texto-para-la-materia-de-graficacion
 
Gestión de riesgos de software
Gestión de riesgos de softwareGestión de riesgos de software
Gestión de riesgos de software
 
Round robin
Round robinRound robin
Round robin
 
Database Performance Tuning
Database Performance Tuning Database Performance Tuning
Database Performance Tuning
 
Oracle RAC - New Generation
Oracle RAC - New GenerationOracle RAC - New Generation
Oracle RAC - New Generation
 
Oracle data guard for beginners
Oracle data guard for beginnersOracle data guard for beginners
Oracle data guard for beginners
 
Historias de usuario
Historias de usuarioHistorias de usuario
Historias de usuario
 
Estimación de costo de software
Estimación de costo de softwareEstimación de costo de software
Estimación de costo de software
 
Fases del Modelo PSP
Fases del Modelo PSPFases del Modelo PSP
Fases del Modelo PSP
 
GESTIÓN DE LA CONFIGURACIÓN DEL SOFTWARE (GCS)
GESTIÓN DE LA CONFIGURACIÓN DEL SOFTWARE (GCS)GESTIÓN DE LA CONFIGURACIÓN DEL SOFTWARE (GCS)
GESTIÓN DE LA CONFIGURACIÓN DEL SOFTWARE (GCS)
 

En vedette

Creación de un clúster de Hadoop con Cloudera
Creación de un clúster de Hadoop con ClouderaCreación de un clúster de Hadoop con Cloudera
Creación de un clúster de Hadoop con ClouderaDavid Albela Pérez
 
IOGDC Open Data Tutorial
IOGDC Open Data TutorialIOGDC Open Data Tutorial
IOGDC Open Data TutorialJeanne Holm
 
MONITORIZACIÓN Y ANÁLISIS DE TRÁFICO DE RED CON APACHE HADOOP
MONITORIZACIÓN Y ANÁLISIS DE TRÁFICO DE RED CON APACHE HADOOPMONITORIZACIÓN Y ANÁLISIS DE TRÁFICO DE RED CON APACHE HADOOP
MONITORIZACIÓN Y ANÁLISIS DE TRÁFICO DE RED CON APACHE HADOOPJorge E. López de Vergara Méndez
 
TECNOLOGIA DETRAS DE LAS REDES SOCIALES(FACEBOOK) - LENGUAJE DE PROGRAMACION II
TECNOLOGIA DETRAS DE LAS REDES SOCIALES(FACEBOOK) - LENGUAJE DE PROGRAMACION IITECNOLOGIA DETRAS DE LAS REDES SOCIALES(FACEBOOK) - LENGUAJE DE PROGRAMACION II
TECNOLOGIA DETRAS DE LAS REDES SOCIALES(FACEBOOK) - LENGUAJE DE PROGRAMACION IIChristian Garcia Gamio
 
G te c sesion3b- mapreduce
G te c sesion3b- mapreduceG te c sesion3b- mapreduce
G te c sesion3b- mapreduceVictoria López
 
Hadoop, Cloud y Spring
Hadoop, Cloud y Spring Hadoop, Cloud y Spring
Hadoop, Cloud y Spring Miguel Pastor
 
Comparacion Entre Rmi Y Api De Sockets
Comparacion Entre Rmi Y Api De SocketsComparacion Entre Rmi Y Api De Sockets
Comparacion Entre Rmi Y Api De Socketsmallita
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosNanda Moran
 
Log -Analytics with Apache-Flume Elasticsearch HDFS Kibana
Log -Analytics with Apache-Flume  Elasticsearch HDFS KibanaLog -Analytics with Apache-Flume  Elasticsearch HDFS Kibana
Log -Analytics with Apache-Flume Elasticsearch HDFS KibanaFelix Rodriguez
 
Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...
Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...
Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...Joseph Lopez
 
Big Data a traves de una implementación
Big Data a traves de una implementaciónBig Data a traves de una implementación
Big Data a traves de una implementaciónDiego Krauthamer
 
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Socialmetrix
 
Big Data en el entorno Bancario
Big Data en el entorno BancarioBig Data en el entorno Bancario
Big Data en el entorno BancarioMartín Cabrera
 

En vedette (20)

Creación de un clúster de Hadoop con Cloudera
Creación de un clúster de Hadoop con ClouderaCreación de un clúster de Hadoop con Cloudera
Creación de un clúster de Hadoop con Cloudera
 
OpenAnalytics Madrid 2014: Spark
OpenAnalytics Madrid 2014: SparkOpenAnalytics Madrid 2014: Spark
OpenAnalytics Madrid 2014: Spark
 
IOGDC Open Data Tutorial
IOGDC Open Data TutorialIOGDC Open Data Tutorial
IOGDC Open Data Tutorial
 
MONITORIZACIÓN Y ANÁLISIS DE TRÁFICO DE RED CON APACHE HADOOP
MONITORIZACIÓN Y ANÁLISIS DE TRÁFICO DE RED CON APACHE HADOOPMONITORIZACIÓN Y ANÁLISIS DE TRÁFICO DE RED CON APACHE HADOOP
MONITORIZACIÓN Y ANÁLISIS DE TRÁFICO DE RED CON APACHE HADOOP
 
TECNOLOGIA DETRAS DE LAS REDES SOCIALES(FACEBOOK) - LENGUAJE DE PROGRAMACION II
TECNOLOGIA DETRAS DE LAS REDES SOCIALES(FACEBOOK) - LENGUAJE DE PROGRAMACION IITECNOLOGIA DETRAS DE LAS REDES SOCIALES(FACEBOOK) - LENGUAJE DE PROGRAMACION II
TECNOLOGIA DETRAS DE LAS REDES SOCIALES(FACEBOOK) - LENGUAJE DE PROGRAMACION II
 
G te c sesion3b- mapreduce
G te c sesion3b- mapreduceG te c sesion3b- mapreduce
G te c sesion3b- mapreduce
 
Hadoop, Cloud y Spring
Hadoop, Cloud y Spring Hadoop, Cloud y Spring
Hadoop, Cloud y Spring
 
Comparacion Entre Rmi Y Api De Sockets
Comparacion Entre Rmi Y Api De SocketsComparacion Entre Rmi Y Api De Sockets
Comparacion Entre Rmi Y Api De Sockets
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Hadoop
HadoopHadoop
Hadoop
 
Log -Analytics with Apache-Flume Elasticsearch HDFS Kibana
Log -Analytics with Apache-Flume  Elasticsearch HDFS KibanaLog -Analytics with Apache-Flume  Elasticsearch HDFS Kibana
Log -Analytics with Apache-Flume Elasticsearch HDFS Kibana
 
Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...
Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...
Big Data, Almacenes de datos empresariales (EDW) y Windows Azure (SQL Databas...
 
Big data, Hadoop, HDInsight
Big data, Hadoop, HDInsightBig data, Hadoop, HDInsight
Big data, Hadoop, HDInsight
 
Big Data a traves de una implementación
Big Data a traves de una implementaciónBig Data a traves de una implementación
Big Data a traves de una implementación
 
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
 
MapReduce en Hadoop
MapReduce en HadoopMapReduce en Hadoop
MapReduce en Hadoop
 
Aula virtual apache_hadoop_v3 1
Aula virtual apache_hadoop_v3 1Aula virtual apache_hadoop_v3 1
Aula virtual apache_hadoop_v3 1
 
Introducción a Apache HBase
Introducción a Apache HBaseIntroducción a Apache HBase
Introducción a Apache HBase
 
Hadoop: tecnologias relacionadas
Hadoop: tecnologias relacionadasHadoop: tecnologias relacionadas
Hadoop: tecnologias relacionadas
 
Big Data en el entorno Bancario
Big Data en el entorno BancarioBig Data en el entorno Bancario
Big Data en el entorno Bancario
 

Similaire à Administración de Apache Hadoop a través de Cloudera

Teamviewer manual es[1]
Teamviewer manual es[1]Teamviewer manual es[1]
Teamviewer manual es[1]Raul Mendoza
 
Teamviewer manual en Español
Teamviewer manual en EspañolTeamviewer manual en Español
Teamviewer manual en EspañolCarlos Ceballos
 
Fwpa doc-desarrollo
Fwpa doc-desarrolloFwpa doc-desarrollo
Fwpa doc-desarrollociriako
 
Cómo montar un servidor doméstico con OpenBSD
Cómo montar un servidor doméstico con OpenBSDCómo montar un servidor doméstico con OpenBSD
Cómo montar un servidor doméstico con OpenBSDJoan Català
 
Índice del libro "Hacking Web Technologies" Silver Edition de 0xWord
Índice del libro "Hacking Web Technologies" Silver Edition de 0xWordÍndice del libro "Hacking Web Technologies" Silver Edition de 0xWord
Índice del libro "Hacking Web Technologies" Silver Edition de 0xWordTelefónica
 
1 estudio-cloud_computing_retos_y_oportunidades_vdef
1  estudio-cloud_computing_retos_y_oportunidades_vdef1  estudio-cloud_computing_retos_y_oportunidades_vdef
1 estudio-cloud_computing_retos_y_oportunidades_vdefOrlando Verdugo
 
Cloud computing. retos y oportunidades
Cloud computing. retos y oportunidadesCloud computing. retos y oportunidades
Cloud computing. retos y oportunidadesLogisman
 
Herramientas y ejemplos de trabajos MapReduce con Apache Hadoop
Herramientas y ejemplos de trabajos MapReduce con Apache HadoopHerramientas y ejemplos de trabajos MapReduce con Apache Hadoop
Herramientas y ejemplos de trabajos MapReduce con Apache HadoopDavid Albela Pérez
 
Postgres adminss
Postgres adminssPostgres adminss
Postgres adminssLuis Ramon
 
Índice del libro "Kubernetes para profesionales: Desde cero al despliegue de ...
Índice del libro "Kubernetes para profesionales: Desde cero al despliegue de ...Índice del libro "Kubernetes para profesionales: Desde cero al despliegue de ...
Índice del libro "Kubernetes para profesionales: Desde cero al despliegue de ...Telefónica
 
Logica de programacion efrain oviedo
Logica de programacion efrain oviedoLogica de programacion efrain oviedo
Logica de programacion efrain oviedoJuan Gonzalo Quiroz
 
Lógica de Programacion. Efrain Oviedo
Lógica de Programacion. Efrain OviedoLógica de Programacion. Efrain Oviedo
Lógica de Programacion. Efrain Oviedosullinsan
 
Odca compute iaa_s_masterum_es
Odca compute iaa_s_masterum_esOdca compute iaa_s_masterum_es
Odca compute iaa_s_masterum_esHector C
 

Similaire à Administración de Apache Hadoop a través de Cloudera (20)

Documentación ubuntu cloud
Documentación ubuntu cloudDocumentación ubuntu cloud
Documentación ubuntu cloud
 
Teamviewer manual es[1]
Teamviewer manual es[1]Teamviewer manual es[1]
Teamviewer manual es[1]
 
Teamviewer manual en Español
Teamviewer manual en EspañolTeamviewer manual en Español
Teamviewer manual en Español
 
Fwpa doc-desarrollo
Fwpa doc-desarrolloFwpa doc-desarrollo
Fwpa doc-desarrollo
 
Cómo montar un servidor doméstico con OpenBSD
Cómo montar un servidor doméstico con OpenBSDCómo montar un servidor doméstico con OpenBSD
Cómo montar un servidor doméstico con OpenBSD
 
Win 2003 admin y getio
Win 2003 admin y getioWin 2003 admin y getio
Win 2003 admin y getio
 
Índice del libro "Hacking Web Technologies" Silver Edition de 0xWord
Índice del libro "Hacking Web Technologies" Silver Edition de 0xWordÍndice del libro "Hacking Web Technologies" Silver Edition de 0xWord
Índice del libro "Hacking Web Technologies" Silver Edition de 0xWord
 
1 estudio-cloud_computing_retos_y_oportunidades_vdef
1  estudio-cloud_computing_retos_y_oportunidades_vdef1  estudio-cloud_computing_retos_y_oportunidades_vdef
1 estudio-cloud_computing_retos_y_oportunidades_vdef
 
Cloud computing. retos y oportunidades
Cloud computing. retos y oportunidadesCloud computing. retos y oportunidades
Cloud computing. retos y oportunidades
 
Explorador de archivos windows 10
Explorador de archivos windows 10Explorador de archivos windows 10
Explorador de archivos windows 10
 
Herramientas y ejemplos de trabajos MapReduce con Apache Hadoop
Herramientas y ejemplos de trabajos MapReduce con Apache HadoopHerramientas y ejemplos de trabajos MapReduce con Apache Hadoop
Herramientas y ejemplos de trabajos MapReduce con Apache Hadoop
 
Php manual
Php manualPhp manual
Php manual
 
Postgres adminss
Postgres adminssPostgres adminss
Postgres adminss
 
Índice del libro "Kubernetes para profesionales: Desde cero al despliegue de ...
Índice del libro "Kubernetes para profesionales: Desde cero al despliegue de ...Índice del libro "Kubernetes para profesionales: Desde cero al despliegue de ...
Índice del libro "Kubernetes para profesionales: Desde cero al despliegue de ...
 
Logica de programacion efrain oviedo
Logica de programacion efrain oviedoLogica de programacion efrain oviedo
Logica de programacion efrain oviedo
 
Lógica de Programacion. Efrain Oviedo
Lógica de Programacion. Efrain OviedoLógica de Programacion. Efrain Oviedo
Lógica de Programacion. Efrain Oviedo
 
19
1919
19
 
Odca compute iaa_s_masterum_es
Odca compute iaa_s_masterum_esOdca compute iaa_s_masterum_es
Odca compute iaa_s_masterum_es
 
Memoria
MemoriaMemoria
Memoria
 
Trabajo de informatica
Trabajo de informaticaTrabajo de informatica
Trabajo de informatica
 

Dernier

Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...RaymondCode
 
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...OLGAMILENAMONTAEZNIO
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETGermán Küber
 
Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.marianarodriguezc797
 
La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2montoyagabriela340
 
Matriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxMatriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxPaolaCarolinaCarvaja
 
Carta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdfCarta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdfangelinebocanegra1
 
Análisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfAnálisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfcastrodanna185
 
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfymiranda2
 
Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfodalistar77
 
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfTENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfJoseAlejandroPerezBa
 
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfalejandrogomezescoto
 
VIDEOS DE APOYO.docx E
VIDEOS DE APOYO.docx                                  EVIDEOS DE APOYO.docx                                  E
VIDEOS DE APOYO.docx Emialexsolar
 
Inteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidadInteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidaddanik1023m
 
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfInmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfOBr.global
 
La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....Aaron Betancourt
 
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSPRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSLincangoKevin
 
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosEl diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosLCristinaForchue
 

Dernier (20)

Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
 
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
 
BEDEC Sostenibilidad, novedades 2024 - Laura Silva
BEDEC Sostenibilidad, novedades 2024 - Laura SilvaBEDEC Sostenibilidad, novedades 2024 - Laura Silva
BEDEC Sostenibilidad, novedades 2024 - Laura Silva
 
Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.
 
La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2
 
Matriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxMatriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docx
 
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier FolchBEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
 
Carta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdfCarta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdf
 
Análisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfAnálisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdf
 
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
 
Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdf
 
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfTENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
 
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
 
VIDEOS DE APOYO.docx E
VIDEOS DE APOYO.docx                                  EVIDEOS DE APOYO.docx                                  E
VIDEOS DE APOYO.docx E
 
Inteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidadInteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidad
 
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfInmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
 
La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....
 
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSPRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
 
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosEl diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
 

Administración de Apache Hadoop a través de Cloudera

  • 1. Informática como Servicio Administración de Apache Hadoop a través de Cloudera David Albela Pérez
  • 3. Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 3.0 España.
  • 4. Tabla de Contenidos 1.Introducción.......................................................................................................................................5 2.Requisitos previos.............................................................................................................................6 2.1.Instalación de Java Development Kit........................................................................................6 3.Añadir repositorio de Cloudera.........................................................................................................6 4.Instalación en modo pseudo-distribuído............................................................................................7 4.1.Instalación en Debian 7 o superior............................................................................................7 5.Componentes de Hadoop...................................................................................................................8 5.1.HDFS.........................................................................................................................................8 5.2.NameNode.................................................................................................................................9 5.3.Secundary NameNode.............................................................................................................10 5.4.JobTracker................................................................................................................................10 5.5.DataNode y TaskTracker.........................................................................................................10 6.Configuración en modo pseudodistribuído.....................................................................................10 6.1.1.Puertos de Interfaz Web de los Servicios de HDFS y MapReduce..................................12 7.MapReduce......................................................................................................................................12 7.1.Ejemplo Grep...........................................................................................................................13 7.2.Funcionamiento de MapReduce..............................................................................................14 7.3.Terminología de MapReduce...................................................................................................15 8.HBase..............................................................................................................................................15 8.1.Instalación................................................................................................................................15 8.2.Configuración de HBase..........................................................................................................16 8.2.1.DNS con Hbase................................................................................................................16 8.2.2.Utilizando el protocolo de tiempo de red (NTP ) con Hbase...........................................16 8.2.3.Ajuste de los límites de usuario para HBase....................................................................16 8.2.4.Configurar dfs.datanode.max.xcievers con Hbase...........................................................17 8.3.Activar Hbase en modo Pseudodistribuído..............................................................................17 8.3.1.Crear directorio en HDFS................................................................................................17 8.3.2.Instalación de servidores adicionales...............................................................................18 8.4.Ejemplo de HBASE.................................................................................................................18 9.Flume...............................................................................................................................................19 9.1.Funcionamiento de Flume.......................................................................................................19 9.2.Instalación y Configuración.....................................................................................................20 10.Sqoop.............................................................................................................................................21 10.1.Instalación y configuración de HBase REST y Apache Thrift..............................................22 10.1.1.Instalación de HBase REST...........................................................................................22 10.1.2.Instalación de HBase Thrift...........................................................................................22 10.2.Instalación de Sqoop..............................................................................................................23 10.3.Importar una Base de Datos...................................................................................................24 11.Hive................................................................................................................................................26 11.1.Instalación de Hive................................................................................................................27 11.2.Ejemplo en Hive....................................................................................................................30 12.Impala............................................................................................................................................32 12.1.Instalación de Impala.............................................................................................................32 12.2.Configuración de Impala.......................................................................................................34 12.3.Ejemplo de Impala.................................................................................................................35 13.Pig..................................................................................................................................................37 13.1.Instalación de Pig...................................................................................................................37
  • 5. 13.2.Ejemplo de Pig.......................................................................................................................38 14.Hue................................................................................................................................................40 14.1.Instalación de Hue.................................................................................................................40 15.Otras Herramientas para Hadoop..................................................................................................42 15.1.Oozie......................................................................................................................................42 15.2.Zookeeper..............................................................................................................................43 15.3.Whirr......................................................................................................................................44 15.4.Snappy...................................................................................................................................45 15.5.Mahout...................................................................................................................................45 15.6.Avro.......................................................................................................................................46 16.Clúster de Hadoop con Alta Disponibilidad..................................................................................46 16.1.Componentes.........................................................................................................................46 16.1.1.NameNode.....................................................................................................................46 16.1.2.SecundaryNamenode.....................................................................................................46 16.1.3.DataNode.......................................................................................................................47 16.1.4.JobTracker......................................................................................................................47 16.1.5.TaskTracker....................................................................................................................47 16.2.Instalación del clúster............................................................................................................47 16.2.1.Requisitos Mínimos.......................................................................................................47 16.2.2.Desinstalar Cloudera Manager.......................................................................................48 16.3.Crear un Clúster de Hadoop...................................................................................................49 16.3.1.Configuración de Red....................................................................................................50 16.3.2.Instalación de paquetes..................................................................................................52 16.3.3.Configuración.................................................................................................................52 16.4.Alta Disponibilidad del NameNode.......................................................................................56 16.4.1.Failover Automático.......................................................................................................57 16.5.Clúster de Hadoop con Alta Disponibilidad..........................................................................57 16.5.1.Instalación de paquetes..................................................................................................57 16.5.2.Configuración.................................................................................................................58 16.6.Alta Disponibilidad en el JobTracker....................................................................................65 16.7.MapReduce en el clúster........................................................................................................71 16.7.1.Wordcount......................................................................................................................71 17.Seguridad.......................................................................................................................................73 18.Bibliografía....................................................................................................................................74
  • 6. 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/
  • 7. 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
  • 8. 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.
  • 9. 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á de distribuír los trabajos enviados por el cliente a los distintos TraskTrackers. Normalmente se ejecuta en el nodo maestro denominado NameNode. Este paquete no incluye JobTracker en modo de alta disponibilidad (HA). • hadoop-0.20-mapreduce-tasktracker: Servicio TaskTracker. Este demonio se encarga de ejecutar 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. Cada DataNode se encarga de almacenar un conjunto de bloques de HDFS así como un checksum para validar que no está corrupto. Un nodo maestro o NameNode puede ser también DataNode. • Hadoop-hdfs-namenode: Servicio NameNode. Se instala en el nodo maestro. Se encarga de gestionar la metainformación de los ficheros almacenados en HDFS así como guardar un registro de los bloques que contiene cada fichero y en que DataNodes están. Cuando se guarda un bloque automáticamente se almacenan 3 réplicas en diferentes DataNodes. El NameNode también se encarga de solicitar nuevas réplicas en caso de encontrarse bloques corruptos o caer algún DataNode. Si el NameNode cae no se puede acceder al sistema de ficheros HDFS. • Hadoop-hdfs-secondarynamenodelib: Servicio SecondaryNameNode se trata de un NameNode secundario que libera de carga para la actualización del registro de bloques- archivo del NameNode principal. Este NameNode secundario no provee de alta disponibildad 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 el nodo 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 Hadoop está preparado para trabajar con gran candidad de datos.
  • 10. Los ficheros son de una única escritura. Una vez colocado en HDFS, el fichero no se puede modificar. La única opción es leerlo, modificarlo y resubirlo. Sin embargo, existe la opción APPEND para agregar más datos a un fichero. Por ejemplo, la base de datos NoSQL HBase utiliza esta opción para guardar sus tablas de datos en HDFS optimizando el tamaño de estas hasta ocupar el mínimo bloque. Los directorios en HDFS no tienen ningún bloque asignado, pero sí tienen metadatos como los permisos 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 o checkpoint. La información de los metadatos se almacena y actualiza solo en memoria, sin embargo los cambios son registados en disco en los ficheros edits. Si el NameNode cae, no se puede acceder al sistema de ficheros de Hadoop. Durante el arranque 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, sin embargo la ubicación de los bloques se guarda en memoria en base al informe enviado por cada DataNode. Los bloques nunca son transferidos al NameNode, sino que este le dice al nodo con la réplica que la envíe a un tercer nodo. Cuando un cliente quiere leer un fichero, le pregunta al NameNode donde se encuetran los datos, devoliendo una lista ordenada de los DataNode y nombre de 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
  • 11. 5.4. JobTracker Es el proceso encargado de gestionar los trabajos MapReduce. Sin el JobTracker no se pueden ejecutar trabajos MapReduce en el clúster. En caso de que un nodo TaskTracker falle una tarea Map intenta ejecutar la misma tarea en otro nodo del clúster. Realiza hasta cuatro intentos en distintos nodos por cada tarea antes de avisar del fallo de la tarea. El JobTracker recibe mensajes heartbeat enviados por los TraskTracker para saber si están disponibles 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 servicio encargado de ejecutar las tareas MapReduce en un nodo. Normalmente el DataNode y el TaskTracker se instalan en el mismo nodo para poder procesar bloques de datos locales, aunque es posible tener un nodo solo con el demonio del TaskTracker y recibir los datos de otro nodo. El DataNode y el TaskTracker envían mensajes heartbeats al NameNode y JobTracker respectivamente para indicar que están disponibles. El DataNode envía además, para informar al NameNode, los bloques de datos que tiene disponibles. Cada bloque de datos almacenado en el DataNode tiene asociado un fichero .meta con el checksum 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, de forma que los bloques de datos se puedan leer directamente de cada uno de los distos simultáneamente en las tareas Map. Para evitar pérdidas de información, se realiza un réplica de cada bloque por defecto en 3 DataNode. Por otra parte, los TaskTracker cuando terminan una tarea Map almacenan los datos de salida en el disco local para sen enviados posteriormente al TraskTracker que ejecuta la tarea Reduce (en la 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.
  • 12. NOTA: En el caso de haber instalado Hadoop 2.0 o superior se incluiría el fichero de configuración yarn-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
  • 13. $ 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
  • 14. 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 sobre ficheros 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 estado del JobTracker y todos los trabajos lanzados. Pulsando en el enlace sobre el jobid del trabajo lanzado se puede ver información detallada del mismo.
  • 15. 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 fase intermedia que incluye los procesos shuffle y short. Estes dos procesos se encargan de mezclar y reordenar los datos generados en cada tarea Map para que las tareas Reduce obtengan los pares clave-valor ordenados y agrupados. Los datos intermediarios generados, de la salida Map, se almacenan en el nodo local donde se generan. Por ejemplo, en el ejemplo clásico de WordCount las salidas Map generadas en la tarea de un nodo (the 1) (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 datos intermediarios se escriben en el disco del nodo local. Durante la fase de shuffle & sort todos los valores asociadores se reordenan. Los datos intercambiados entre los nodos a través de la red del clúster se comprimen por defecto para 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 de con que tipo de ficheros se desee trabajar, por ejemplo, tratamiento de imágenes requiere un mayor coste computacional de compresión/descompresión con mucho menor ahora de espacio frente a tratamiento de archivos de texto.
  • 16. 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 entrada para cada trabajo. Por defecto, los input splits son los bloques de cada fichero. Cada tarea Map procesa un único "input split". Cada demonio con su identificador jps es una instancia de la Máquina Virtual de Java. Cada vez que el TaskTracker lanza un tarea se crea una nueva instancia de la JVM. Así se aisla el TraskTracker de fallos de código o bugs, en caso de fallo se vuelve a lanzar la tarea asignada hasta un número determinado de intentos. Las tareas Task envían heartbreats al TaskTracker para indicar que están disponibles y funcionales. Si un TackTracker está ejecutando 3 tareas, tenemos 3 JVM. Cada JVM envía heartbeats al TaskTracker. Si dejan de recibirse heartbeats, el TaskTracker mata la instacia JVM 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 para Hadoop utilizando HDFS. Cloudera recomienda siempre instalar HBase en un modo independiente antes de intentar ejecutarlo en un clúster de conjunto. Dado que Hbase almacena varias versiones de los registros almacenados en las tablas es necesario 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
  • 17. 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 de configuració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ón del 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 para elegir 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 sobre NTP , 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.conf hdfs - nofile 32768 hbase - 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
  • 18. 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 del número de ficheros que puede servir al mismo tiempo. El valor recomendado es de 4096. Para efectuar 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 $x restart ; 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 nodo maestro se ejecuta como el usuario hbase por tanto también hay que asignarle los permisos necesarios. 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
  • 19. 8.3.2. Instalación de servidores adicionales Una vez configurado se necesita instalar los servidores que forman un clúster de HBase en modo distribuído o distribuído: • ZooKeeper: Proporciona un servicio centralizado de alta disponibilidad para la gestión del clú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. Se ejecuta 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
  • 20. 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 de distintas 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és distintos 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 el servidor web a través de la rotación de logs en Unix con el proceso rsyslog y el agente se encarga de enviar 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 agente caiga, los logs enviados por el servidor se mantienen en el origen o source. Los datos se suelen
  • 21. guardar en el agente hasta alcanzar un tamaño máximo para así optimizar el uso de los bloques de HDFS, 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 los datos 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 para serializar los datos y no perder el formato. De esta manera se realiza un reparto eficiente de los distintos logs de varios servidores en varios agentes. El recolegor de flume se encarga de recoger la informació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.
  • 22. Opcionalmente se pueden determinar variables de entorno para flume-env.sh. El ejecutable flume-ng utiliza 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 de orí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, el driver 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 las funcionalidades descritas anteriormente. Se trata de un programa cliente que accede a la base de datos relacional y a Hadoop. • Sqoop2: Permite la instalación de Sqoop como un servicio. De este modo se puede utilizar Sqoop desde varios hosts sin necesidad de instalar todos los drivers JDBC y el cliente de Sqoop en todos los hosts. Añade una interfaz web y servicio REST a través de dos interfaces:
  • 23. ◦ 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 un script, 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 de HDFS, 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 para utilizar HBase a través del servicio web REST y Thrift en lugar de utilizar un driver JDBC especí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 caso de 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ámetros en 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 HBASE independientemente del lenguaje utilizado. El servicio Thrift es multiplataforma y más eficiente que REST en muchos casos. No debería de ser instalado en el mismo nodo donde está el NameNode y JobTracker.
  • 24. 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 JDBC de 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ón de Sqoop. $ sudo ln -s /usr/share/java/mysql-connector-java.jar /usr/lib/sqoop/lib/
  • 25. 10.3. Importar una Base de Datos Con Sqoop instalado y los drivers JDBC necesarios y copiados en la ruta del cliente se puede importar una base de datos. A continuación se detallan los pasos de la importación de una base de datos 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 datos que 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' --username training --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 hasta superar los 1024 bytes. Cuando se realiza la ejecución de importación se lanza automáticamente un trabajo Map, sin la fase Reduce.
  • 26. 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 tabla importada. En la ruta del usuario del sistema operativo se crea una clase java con el nombre de la tabla importada que contiene el MapReduce. 4. Ver el contenido importado en HDFS. $ hadoop fs -ls binary_files $ hadoop fs -tail binary_texts/part-m-00000
  • 27. En los ficheros part-m-xxxxx estan los datos importados. La m indica que son salidas de tareas tipo Map. 11. Hive Hive fue desarrollado por el equipo de Facebook para realizar el análisis de gran canditada de datos 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 autogenera clases java para ejecutar trabajos MapReduce. No permite operaciones de modificación como update 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 quiere trabajar indicando sus columnas, nombre y separadores. Para ello utiliza una base de datos relaciones 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 por todos los usuarios con acceso. • Embedded Mode: Todo en un único proceso. Implementación por defecto. Utiliza una base de datos Apache Derby, la ejecución del MetaStore y la base de datos están dentro del proceso de Hive. Solo admite un usuario activo en cada ejecución. No se aconseja su uso en producción. • MetaStore Local: El proceso de MetaStore se ejecuta en el mismo proceso que el de HiveServer pero la base de datos se ejecuta en un proceso separado y puede estar en un host separado. La comunicación se realiza a través de JDBC. Soporta varios gestores de bases de datos 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. El servicio de MetaStore se comunica con la base de datos a través de JDBC. Si múltiples usuarios 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 servidor donde los clientes acceden al servidor Hive2. Los clientes no se conectan directamente al MetaStore ni al cluster de Hadoop aportando mayor segudad por restricción de acceso directo al MetaStrore y
  • 28. al clúster y tiene una configuración más sencilla. Soporta ODBC para conectarse al MetaStore ademá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 metadatos necesarios para las tablas y particiones de datos de Hive en una base de datos relacional. Para ello se 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;
  • 29. 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>
  • 30. <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 Hadoop HDFS. # 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;
  • 31. 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 formato cualquier en HDFS. En este ejemplo se utilizarán los datos importados de la base de datos translator 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 la separación de cada campo. En el ejemplo, la primera columna hace referencia al campo english y la segunda la columna spanish. Ambas columnas están separadas por una tabulación (t). Los ficheros que 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, english STRING, spanish STRING, created TIMESTAMP) ROW FORMAT DELIMITED FIELDS TERMINATED 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 pueden ejecutar trabajos MapReduce.
  • 32. 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 condiciones WHERE o HAVING.
  • 33. 12. Impala Impala es una herramienta de código abierto creada por Cloudera que permite a los usuarios consultar los datos en HDFS usando HiveQL. Utiliza la misma MetaStore compartida de Hive. La diferencia 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 los clientes. • 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 Impala antes 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 contrib deb-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 no se debe eliminar.
  • 34. 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
  • 35. 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
  • 36. 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 al 50% 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ñadir tambié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
  • 37. En la dirección http://localhost:25000/ se puede acceder a la interfaz web de Impala Server donde localhost es el hostname donde está instalado. Iniciar los servicios de MySQL y MetaStore. Iniciar además los servicios de Hadoop HDFS si no está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 Impala aú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;
  • 38. Cada vez que se ejecuta una misma consulta, los resultados se almacenan en el catálogo. Si se repite la 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 los 30 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 a través de consultas. La diferencia es que no utiliza sentencias SQL sino que tiene su propio lenguaje. Inicialmente desarrollado por Yahoo! y liberado para la Apache Software Fundation. Utiliza un lenguaje de control de flujo llamado Pig Latin que permite realizar consultas en un clúster distribuído de Hadoop. Se supone que el lenguaje es más sencillo y facilita realizar análisis de datos a personas que no conocen la sintaxis de SQL. Se trabaja con datos estructurados donde se definen bolsas en lugar de tablas. Cada bolsa carga un conjunto de datos de HDFS. 13.1. Instalación de Pig Para instalar Pig ejecutar.
  • 39. $ 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 contiene textos en inglés con su traducción al español. Cada registro de binary_texts pertenece a un registro de 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.
  • 40. 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 un registro se almacenase en más de una línea en los ficheros. En cambio Pig obtenía los resultados
  • 41. 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 y administrar los servicios de diferentes aplicaciones a través de su interfaz web. El nodo con Hue instalado 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 y permite restringir acceso al clúster desde la interfaz web a través de usuarios y grupos. También incluye 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 de configuración de Hive en los de Hue. • Impala UI: Permite acceder al shell de Impala. Para su uso se requier añadir los ficheros de configuración de Impala en los de Hue. • File Browser: Permite acceder a los datos en HDFS. Para ello es necesario activar el servicio REST 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 los plugins 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)
  • 42. $ 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 ambos servicios 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
  • 43. $ 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_admin indicada en el paso anterior. NOTA: En modo distribuído con varios clústers sustituír “localhost” por en hostname del nodo donde están instalados los diferentes servicios JobTracker, TaskTracker, MetaStore, Hive, Impala y Hue. 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 definidas en grafos DAG (Directed Acyclical Graphs). • Ooozie Coordinator: el coordinador de Oozie lanza estos trabajos según cada unidad tiempo y la disponibilidad de los datos. • Oozie Bundle: Agrupación de un conjunto de trabajos que son gestionados como un único trabajo. En resumen Oozie es un servicio extensible, escalable y contenedor de datos que permite harmonizar dependencias de varios trabajos ejecutados en Hadoop como un único trabajo MapReduce. Para instalar Oozie se necesitan los paquete del servicio y el cliente: $ sudo apt-get install oozie $ sudo apt-get install oozie-client
  • 44. Por defecto está configurado para MapReduce v1 con la variable de entorno CATALINA_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 una base de datos embebida que no permite monitorizar su estado de salud. Para configurar la base de datos 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 de configuraciones, nombres y sincronización de servicios disponibles. Al igual el resto de aplicaciones para Hadoo, es una herramienta de código abierto a cargo de Apache Software Fundation. Como su nombre indica, cuidador del zoo, se encarga de gestionar la fauna de Hadoop. Todos los servicios se utilizan a través de aplicaciones distribuídas y cada vez que se implementan hay muchas tareas y trabajos que realizar para su configuración y funcionamiento que terminan en problemas 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 Zookeeper y sus clientes. • Zookeeper Server: Contiene los scripts de inicio del servicio necesarios para ejecutar Zookeeper como un proceso demonio. Depende de zookeeper, su instalación incluye el paquete básico. Para su instalación ejecutar las siguientes lineas en un terminal. $ sudo apt-get install zookeeper $ sudo apt-get install zookeeper-server
  • 45. 15.3. Whirr Es un conjunto de bibliotecas para ejecutar Hadoop en servicios Cloud. Se puede usar en clústers como Amazon EC2 sin necesidad de instalar los paquetes de Hadoop ni realizar configuración alguna, tan solo se necesita ejecutar los comandos de Whirr. Es ideal para crear y ejecutar clusters de Hadoop como prueba de concepto para ejecutar unos pocos trabajos MapReduce. Cuando terminen los trabajos se puede eliminar el clúster de Hadoop y todos los datos generados con un comando. Para instalar el cliente Whirr ejecutar. $ sudo apt-get install whirr # Verificar la versión $ whirr version # Generar par de clave SSH ssh-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=myhadoopcluster whirr.instance-templates=1 hadoop-jobtracker+hadoop-namenode,1 hadoop- datanode+hadoop-tasktracker whirr.provider=aws-ec2 whirr.identity=<cloud-provider-identity> whirr.credential=<cloud-provider-credential> whirr.private-key-file=${sys:user.home}/.ssh/id_rsa whirr.public-key-file=${sys:user.home}/.ssh/id_rsa.pub whirr.env.repo=cdh4 whirr.hadoop-install-function=install_cdh_hadoop whirr.hadoop-configure-function=configure_cdh_hadoop whirr.hardware-id=m1.large whirr.image-id=us-east-1/ami-ccb35ea5 whirr.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 ruta del 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 el directorio ~/.whirr/<cluster-name>. Para lanzar un trabajo MapReduce: $ export HADOOP_MAPRED_HOME=/usr/lib/hadoop-0.20-mapreduce
  • 46. $ 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 la obtener porcentajes razonables de compresión en poco tiempo y su máxima compresión con compatibilidad con otras bibliotecas de compresión. Se utiliza en trabajos MapReduce, Pig, Hive, importación con Sqoop y con la base de datos HBase. En el caso de MapReduce se utiliza como compresión/descompresión de los datos intermediarios de la fase shuffle & order haciendo la ejecución de trabajos más rápida gracías a la rapidez 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 en MapReduce 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 datos razonablemente 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. La mascota de Hadoop es un elefante, en alusión al elefante de peluche de la hija de su creador, Doug Cutting. 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, por ejemplo artículos más comprados por usuarios. 2 Machine-Learning: Técnica para enseñar a los programas que deben hacer.
  • 47. 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 y contenedor de ficheros ("Avro data files"). Su uso está pensado para el envío de datos entre aplicaciones o servicios escritos en distintos lenguajes de programación. Se suele utilizar en los agentes 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 alta disponibilidad (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 los metadatos de los ficheros de HDFS y las tripletas fichero-bloque-DataNode para localizar los bloques de los ficheros almacenados en los nodos DataNode. Si el NameNode falla no se puede acceder al sistema de ficheros HDFS. Por eso es importante tener alta disponibilidad instalando un NameNode activo y otro pasivo para que en caso de fallo del prime, entre en ejecución el segundo. Solo puede existir un único NameNode funcionado, el cual guarda los metadatos de los ficheros (permisos de ficheros, fechas de creación y acceso, etc) y la información de donde están almacenados 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 NameNode para 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 y posteriomente actualizándose en el NameNode activo.
  • 48. Sin embargo, este nodo no ofrece la alta disponibilidad, si cae el NameNode se case el sistema de ficheros HDFS y con ello todos los trabajos MapReduce lanzados. La importancia del SecundaryNamenode reside en tener una copia actualizada del fichero que contiene 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 nodos esclavos. Cada DataNode guarda solo los bloques de los ficheros y sus checksums para verificar que no están corruptos. 16.1.4. JobTracker El JobTracker es el servicio que se encarga de lanzar y coordinar los trabajos MapReduce a los JobTracker. 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 ejecutan en los DataNode. Si un TaskTracker detecta un fallo en la tarea ejecutada en el nodo, avisa al JobTaskTracker y este envía la orden de ejecutar la tarea en otro nodo que contenga los bloques de datos 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. Los nodos 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 de Estados 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ínimo de las siguientes características:
  • 49. • 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 los paquetes de Cloudera. También gestiona el inicio de los servicios de Hadoop y se encarga de lanzarlos en caso de que se paren. Abrir el navegador Firefox y pulsar en el enlace “Coudera Manager”. Iniciar sesión con el usuario y contraseña cloudera. Seleccionar la pestaña Actions general de la parte superior derecha y escoger 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-*'
  • 50. Comprobar que los servicios de NameNode, DataNode, JobTracker y TaskTracker no están ejecutá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 son necesarios. Cada máquina virtual necesita como mínimo: • CPU con 1 núcleo
  • 51. • 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” en Configuración, opción General, pestaña Avanzado y seleccionar Bidireccional. En la misma pestaña es posible cambiar el nombre de la máquina virtual descargada por un nombre identificativo del nodo. Los ficheros .ovf se pueden renombrar, pero los discos *.vmdk si se modifican, se debe especificar 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 Red interna. 16.3.1. Configuración de Red Iniciar las cuatro máquinas virtuales y configurar la segunda interfaz de red con las siguientes IP estáticas bien con network-manager desde el panel de escritorio o editando la configuración de la interfaz 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
  • 52. • 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
  • 53. 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
  • 54. <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"
  • 55. 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/nn sudo mkdir -p /disk2/dfs/nn sudo mkdir -p /disk1/dfs/dn sudo mkdir -p /disk2/dfs/dn sudo mkdir -p /disk1/mapred/local sudo mkdir -p /disk2/mapred/local # Cambiar propietarios
  • 56. sudo chown -R hdfs:hadoop /disk1/dfs/nn sudo chown -R hdfs:hadoop /disk2/dfs/nn sudo chown -R hdfs:hadoop /disk1/dfs/dn sudo chown -R hdfs:hadoop /disk2/dfs/dn sudo chown -R mapred:hadoop /disk1/mapred/local sudo 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.
  • 57. 16.4. Alta Disponibilidad del NameNode La configuración de alta disponibilidad para el NameNode utiliza dos nodos, uno activo y otro pasivo también llamado standby. El NameNode pasivo necesita tener acceso a los últimos metadatos actualizados antes de un fallo en el NameNode activo. Para ello, los metadatos se almacenan 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 el NameNode pasivo o standby. 3 http://es.wikipedia.org/wiki/Algoritmo_de_Paxos
  • 58. 16.4.1. Failover Automático Por defecto, si falla el NameNode activo, se debe realizar manualmente la activación del NameNode pasivo. Es decir, si el nodo maestro cae, el administrador tiene que cambiar de pasivo a activo el NameNode en standby. Es posible hacer que el cambio se haga de forma automática con Zookeeper. Zookeeper es un demonio controlador de fallos que funciona en cada NameNode como un servicio de repositorio de datos. Para su funcionamiento se necesita un grupo de nodos con Zookeeper instalado llamado quorum 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
  • 59. $ 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>