hit counter

Sistemas y servicios informáticos para Internet. Curso 2009-2010

Capítulo 6. Hadoop

Tabla de contenidos

6.1. Introducción
6.2. Información sobre Hadoop
6.3. Gestión de ficheros y directorios
6.4. Gestión de trabajos

6.1. Introducción

Conectate a tecgrid03.epv.uniovi.es, en caso de que no lo estés ya. La conexión debe ser ssh, por lo que es necesario utilizar un cliente que soporte este protocolo. Se recomienda utilizar el PuTTY.

Antes de empezar vamos a crear un directorio para contener los ficheros con los que se va a trabajar.

$> mkdir ~/datagrid
$> mkdir ~/datagrid/hadoop
$> cd ~/datagrid/hadoop
$> cat > $USER-hadoop

Escribe algo y pulsa Ctrl-D. Haz un listado del contenido del fichero y verifica que está bien.

6.2. Información sobre Hadoop

Hadoop proporciona una interfaz de usuario web que ofrece sobre información su estado. Por defecto, se puede acceder en el puerto 50070 para el sistema de ficheros HDFS, y en el puerto 50030 para los trabajos que se hayan enviado y se encuentren ejecutando. Utilizad esta funcionalidad para comprobar el estado del sistema de ficheros en tecgrid03.epv.uniovi.es. También puedes comprobar el estado de los trabajos enviados tecgrid03.epv.uniovi.es.

6.3. Gestión de ficheros y directorios

Hay tres formas de utilizar el sistema de ficheros HDFS:

  • Utilizar los comandos Hadoop.

  • Montar el sistema de ficheros utilizando FUSE y utilizar las herramientas habituales (ls, rm, etc.).

  • Utilizar el API de programación.

Los comandos Hadoop son siempre de la siguiente forma:

$> hadoop [Comando] [Opciones]

Por ejemplo, para listar un directorio se usaría:

$> hadoop fs -ls /
Found 3 items
drwxrwxrwx   - root supergroup          0 2009-05-26 19:30 /datagrid
-rw-rw-r--   3 root supergroup        346 2009-05-06 11:17 /hosts
drwxr-xr-x   - root supergroup          0 2009-05-20 14:24 /opt

Para crear un directorio se utilizaría el siguiente comando:

$> hadoop fs -mkdir /datagrid/$USER
Found 3 items
drwxrwxrwx   - root supergroup          0 2009-05-26 19:30 /datagrid
-rw-rw-r--   3 root supergroup        346 2009-05-06 11:17 /hosts
drwxr-xr-x   - root supergroup          0 2009-05-20 14:24 /opt
$> hadoop fs -ls /datagrid/$USER

A continuación, vamos a copiar un fichero a dicho directorio:

$> hadoop fs -put $USER-hadoop /datagrid/$USER
$> hadoop fs -ls /datagrid/$USER
Found 1 items
-rw-rw-r--   3 ruf supergroup         14 2009-10-07 11:32 /datagrid/ruf/ruf-hadoop

Recuerda que HDFS es un sistema de ficheros distribuido, es decir, una vez que copiemos un fichero a HDFS estará disponible en todas las máquinas del cluster.

Nota

Si se quiere obtener información sobre comandos adicionales se puede consultar la ayuda.

Algunos de los comandos habituales tienen creado un alias:

$> alias
alias hdu='hadoop fs -du'
alias hget='hadoop fs -get'
alias hls='hadoop fs -ls'
alias hmkdir='hadoop fs -mkdir'
alias hput='hadoop fs -put'
alias hrm='hadoop fs -rm'
alias hstat='hadoop fs -stat'
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

Otra forma de interactuar con el sistema de ficheros HDFS es montarlo y luego usar los comandos habituales de gestión de ficheros y directorios. Primero, se pueden comprobar los sistemas de ficheros montados, donde se observará el lugar en el que están montado HDFS.

$> mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/hda2 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
fuse on /mnt/hadoop type fuse (rw,nosuid,nodev,allow_other,allow_other,default_permissions)

Una vez que se conoce el lugar de montaje se pueden utilizar los comandos habituales:

$> ls -al /mnt/hadoop
total 20
drwxr-xr-x   5 root nobody 4096 may 20 13:50 .
drwxr-xr-x   3 root root   4096 mar 28  2009 ..
drwxrwxrwx 143 root nobody 4096 oct  7 11:28 datagrid
-rw-rw-r--   1 root nobody  346 may  6 11:17 hosts
drwxr-xr-x   3 root nobody 4096 may 20 14:24 opt
$> ls -al /mnt/hadoop/datagrid/$USER
total 8
drwxrwxr-x   3 ruf  nobody 4096 oct  7 11:32 .
drwxrwxrwx 143 root nobody 4096 oct  7 11:28 ..
-rw-rw-r--   1 ruf  nobody   14 oct  7 11:32 ruf-hadoop
$> cat /mnt/hadoop/datagrid/$USER/*
...

Por último borramos el directorio creado:

$> rm -rf /mnt/hadoop/datagrid/$USER

6.4. Gestión de trabajos

Si alguien está interesado en enviar trabajos a Hadoop siguiendo el esquema Map-Reduce puede consultar los ejemplos disponibles y ejecutarlos sobre las máquinas de prácticas.