Comandos HDF Breve manual Diego J. Bodas Sagi Julio de 2014
Índice Comandos Linux / Unix Comandos HDFS Ejemplos Resumen 2
Comandos interesantes para Data Science Tener soltura a la hora de interactuar con ciertos comandos en la consola de linux y Unix mejora la velocidad del proceso Comandos importantes: wget: copiar un archivo de la red al directorio activo wget https://ruta/sample.txt grep: una utilidad para la búsqueda de patrones Uso: grep [options] [pattern] [files] Interesante la opción -v (no cumple el patrón) Ejemplo: grep foo orig_file.txt > newfile.txt Busca todas las líneas que contienen foo y lo manda a newfile.txt grep foo bar sample.tx Imprimir en consola las líneas que contienen foo bar (en sample.txt) 3
Más comandos sort: implementación de merge sort. Cuidado con los ficheros especialmente grandes! Uso: Ejemplo: sort [options] [file] sort sample.tx cut: seleccionar sólo ciertas columnas, se suele usar con la opción f para especificar el rango de columnas Ejemplo: cut -f2,4 sample.tx 4
Más comandos cat: concatenar y mostrar en la salida estándar definida (consola normalmente) Ejemplo: cat sample.tx head / tail: mostrar las primeras líneas de un fichero (interesante si éste es muy largo) Ejemplo: head -n 5 sample.txt tail -n 5 sample.tx -n número de filas a mostrar (por defecto 10) wc: contar palabras, líneas y bytes (en ese orden) Ejemplo: wc sample.tx 5
Por último less: navegar sobre los contenidos de un fichero grande Uso: less [some big file] Opciones (del manual) (space): space navigates forward one screen. (enter): enter navigates forward one line. b: navigates backwards one screen y: navigates backwards one line. /[pattern]: search forwards for the next occurrence of [pattern]?[pattern]: search backwards for the previous occurrence of [pattern] Where [pattern] can be a basic string or a regular expression. 6
Comandos HDFS La interacción online con el filesystem puede llevarse acabo mediante la linea de comandos $ hdfs dfs <comando> <opciones> Lógicamente, para que el SO encuentre el comando hdfs las variables de entorno tienen que estar correctamente configuradas export HADOOP_HOME=/usr/local/hadoop export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin export HADOOP_MAPRED_HOME=${HADOOP_HOME} export HADOOP_COMMON_HOME=${HADOOP_HOME} export HADOOP_HDFS_HOME=${HADOOP_HOME} export YARN_HOME=${HADOOP_HOME} 7
En Cloudera Para consultar una variable de entorno $ echo $VARIABLE Ejemplo $ echo $PATH Por ejemplo, en la ruta /usr/bin encontramos un archivo ejecutable llamado hdfs 8
Listando los archivos de HDFS $ hdfs dfs ls hdfs dfs: con esto indicamos que no es un comando normal de bash, sino que es un comando propio del sistema distribuido (dfs) -ls: listado de directorios y archivos Pregunta: o Al ejecutar el comando $hdfs dfs ls, qué directorio del DFS estamos visualizando? o Cada usuario tiene una especie de directorio personal 9
Comandos más frecuentes Recursos https://hadoop.apache.org/docs/r1.2.1/commands_manual.html 10
archive Crea un archivo de hadoop Éste es un archivo especial (HAR) que almacena la información de forma más eficiente y puede hacer uso de MapReduce de forma directa Lo trabajaremos más próximamente Uso hadoop archive -archivename NAME <src> <dest> Ejemplo: hadoop archive -archivename files.har /my/files /my Exit Code: 0 éxito, -1 error 11
Ficheros HAR Para listar los contenidos de un archivo se utiliza como protocolo har:// hdfs fs -ls -R har:///user/cloudera/datos.har La URI también puede incluir la url del namenode: har://localhost:8020/user/cloudera/datos.har Los ficheros har no soportan compresión 12
cat Concatena archivos y los muestra en la salida estándar, por ejemplo la consola Uso hadoop fs -cat URI [URI ] Ejemplo: hadoop fs -cat hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2 hadoop fs -cat file:///file3 /user/hadoop/file4 Exit Code: 0 éxito, -1 error 13
chgrp Cambia el grupo de usuarios al que está asociado un directorio o fichero Uso: hadoop fs -chgrp [-R] GROUP URI [URI ] -R: opción, aplicar recursivamente al contenido Ejemplo: hdfs dfs -chgrp MiGrupoID hdfs://nn1.example.com/file1 Exit Code: Devuelve 0 si termina correctamente y -1 en caso de error 14
chmod Cambia los permisos de acceso a un directorio o fichero Uso: hadoop fs -chmod [-R] <MODE[,MODE]... OCTALMODE> URI [URI ] -R: opción, aplicar recursivamente al contenido El usuario debe estar en posesión de los permisos adecuados Ejemplo: hdfs dfs -chmod 220 hdfs://nn1.example.com/file1 Exit Code: Devuelve 0 si termina correctamente y -1 en caso de error 15
Permisos Recordemos el orden User/Group/Others Recordemos los números Read = 4 Write = 2 Execute = 1 Nothing = 0 Permisos combinados 4 (read) + 2 (write) = 6 (permiso para leer y escribir pero no para ejecutar) 16
chown Cambia el propietario de un fichero o directorio Uso hdfs dfs -chown [-R] [OWNER][:[GROUP]] URI [URI ] -R: recursivo Ejemplo: hdfs dfs -chown user hdfs://nn1.example.com/file1 Exit Code: 0 éxito, -1 error 17
copyfromlocal Copia un fichero desde el sistema de ficheros local al DFS (relacionado con put pero el origen debe ser una referencia al sistema de ficheros local) Uso: hadoop fs -copyfromlocal <localsrc> URI Ejemplo: hdfs dfs -copyfromlocal /home/app.log hdfs://nn1.example.com/route Exit Code: Devuelve 0 si termina correctamente y -1 en caso de error 18
copytolocal Copia un fichero desde DFS al sistema de ficheros local (relacionado con get, pero el destino debe ser una referencia al sistema de ficheros local) Uso: hadoop fs -copytolocal [-ignorecrc] [-crc] URI <local> Ejemplo: hdfs dfs -copytolocal hdfs://nn1.example.com/logs/app.log./home/dbodas/app.log Exit Code: Devuelve 0 si termina correctamente y -1 en caso de error 19
cp Copy. Admite multiples ficheros en el mismo destino Uso hadoop fs -cp URI [URI ] <dest> Ejemplo: hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2 hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir Exit Code: 0 éxito, -1 error 20
distcp Copy Distribuido : Permite copiar un fichero utilizando un proceso distribuido. El destino de la copia puede ser el mismo sistema de ficheros de origen u otro sistema distribuido (DFS) Por ello se emplea para realizar copias pesadas entre clusters distintos (usa MapReduce en el proceso) Uso: hadoop distcp [OPCIONES] <origen 1> [<origen 2>...] <destino> Ejemplo: hadoop distcp -p -update "/user/cloudera1/datos" "/user/cloudera2/datos" Exit Code: Devuelve 0 si termina correctamente y -1 en caso de error. 21
du Mostrar tamaño de ficheros y directorios Uso: hadoop fs -du [-s] [-h] URI [URI ] Ejemplo: -s agrega los contenidos de los directorios en lugar de mostrar los ficheros individuales -h muestra los resultados en formato legible (KB, MB, GB...). hadoop fs -du /user/hadoop/dir1 /user/hadoop/file1 hdfs://nn.example.com/user/hadoop/dir1 Exit Code: Devuelve 0 si termina correctamente y -1 en caso de error 22
expunge Vacía la papelera de reciclaje Uso hadoop fs -expunge Ejemplo: hadoop fs expunge Exit Code: 0 éxito, -1 error 23
get Similar a copytolocal, pero NO se restringe el destino a ser una referencia al sistema de ficheros local Uso: hdfs dfs -get [-ignorecrc] [-crc] <src> <localdst> Ejemplo: hadoop fs -get /user/hadoop/file localfile hadoop fs -get hdfs://nn.example.com/user/hadoop/file localfile Exit Code: Devuelve 0 si termina correctamente y -1 en caso de error 24
getmerge Copia uno o más ficheros desde DFS al Local File System unificando todo en un único fichero Opcionalmente añade un salto de línea entre cada uno de los ficheros [addnl] Uso: hadoop fs -getmerge <src> <localdst> [addnl] Ejemplo: hdfs dfs -getmerge hdfs://nn.example.com/user/hadoop/fich*.log ficherolocal addnl Exit Code: Devuelve 0 si termina correctamente y -1 en caso de error 25
ls Listado de información asociada a una ruta Uso hadoop fs -ls <args> Ejemplo: hdfs dfs -ls -R hdfs://nn.example.com/user/hadoop/file Exit Code: 0 éxito, -1 error 26
mkdir MaKe DIRectory (crear directorio) Uso: hadoop fs -mkdir <paths> Ejemplo: hadoop fs -mkdir /user/hadoop/dir1 /user/hadoop/dir2 hadoop fs -mkdir hdfs://nn1.example.com/user/hadoop/dir hdfs://nn2.example.com/user/hadoop/dir Exit Code: Devuelve 0 si termina correctamente y -1 en caso de error 27
movefromlocal Similar a copyfromlocal pero borra el fichero original Uso: dfs -movefromlocal <src> <dst> Ejemplo: hdfs dfs -movefromlocal localfile hdfs://nn.example.com/ Exit Code: Devuelve 0 si termina correctamente y -1 en caso de error 28
mv Mover dentro del DFS Uso: hadoop fs -mv URI [URI ] <dest> Permite mover varios ficheros a un directorio Ejemplo: hadoop fs -mv /user/hadoop/file1 /user/hadoop/file2 hadoop fs -mv hdfs://nn.example.com/file1 hdfs://nn.example.com/file2 hdfs://nn.example.com/file3 hdfs://nn.example.com/dir1 Exit Code: Devuelve 0 si termina correctamente y -1 en caso de error 29
put Similar a copyfromlocal, pero el origen NO está restringido a ser una referencia al LFS Uso hadoop fs -put <localsrc>... <dst> Ejemplo: hadoop fs -put localfile /user/hadoop/hadoopfile hadoop fs -put - hdfs://nn.example.com/hadoop/hadoopfile Exit Code: 0 éxito, -1 error 30
rm Remove, borrar en el DFS (mueve a la papelera de reciclaje si esta opción está activada) Uso: hadoop fs -rm URI [URI ] -r opción recursiva Ejemplo: hdfs dfs -rm hdfs://nn.example.com/file Exit Code: Devuelve 0 si termina correctamente y -1 en caso de error 31
setrep Cambiar el factor de replicación de un fichero Uso: hadoop fs -setrep [-R] <path> Ejemplo: hdfs dfs -setrep -w 5 hdfs://nn.example.com/file Exit Code: Devuelve 0 si termina correctamente y -1 en caso de error 32
stat Muestra información estadística de un directorio Uso: hadoop fs -stat URI [URI ] Ejemplo: hadoop fs -stat / Exit Code: Devuelve 0 si termina correctamente y -1 en caso de error 33
tail Muestra el último KB del fichero opción [-f]: imprimir los contenidos que se vayan añadiendo al fichero hasta que éste se cierre Uso hadoop fs -tail [-f] URI Ejemplo: hdfs dfs -tail -f hdfs://nn.example.com/fail Exit Code: 0 éxito, -1 error 34
test Realizar un test sobre una ruta Uso: hdfs dfs -test -[ezd] URI e chequea si el fichero existe z chequea si el fichero existe y está vacío chequea si se trata de un directorio Ejemplo: hdfs dfs -test -e hdfs://nn.example.com/file Exit Code: Devuelve 0 si TRUE y -1 en caso contrario 35
text Mostrar el contenido de un fichero como texto Uso: hdfs dfs -text <src> Ejemplo: hdfs dfs -text -e hdfs://nn.example.com/file Exit Code: Devuelve 0 si termina correctamente y -1 en caso de error 36
touchz Crea uno o varios ficheros vacíos Uso hdfs dfs -touchz URI [URI ] Ejemplo: hdfs dfs -touchz hdfs://nn.example.com/newfile Exit Code: 0 éxito, -1 error 37
Copiando un archivo a HDFS Nos descargamos Viaje al centro de la Tierra de Julio Verne y se lo pasamos a HDFS # -p: crear directorios padres si se necesita # estamos dentro del directorio cloudera $ mkdir -p hadoop/examples/julioverne $ cd hadoop/examples/julioverne # nos traemos el libro de la red $ wget http://www.textfiles.com/etext/fiction/center_earth # Copiamos (no movemos) el archivo a HDFS $ cd.. S cd.. # Ahora estamos dentro del directorio hadoop $ hdfs dfs copyfromlocal examples / Si no hubiésemos corregido la cuestión de los permisos del tema anterior, no hubiese funcionado el último comando 38
Copiando un archivo a HDFS (2) # Se ha copiado correctamente el archivo? $ hdfs dfs -ls /examples/julioverne # o, usando el comportamiento de servidor # hdfs dfs -ls hdfs://localhost:8020/examples/julioverne Si falla: revisar el puerto (8020), hay que preguntar la configuración al administrador. Por ejemplo, es muy frecuente que, si no trabajamos con cloudera, que esta consulta se haga a través del puerto 54310 39
Opción web No tiene sentido copiar archivos a través de la interfaz web, el tamaño del archivo sería un gran problema 40
Ejecutemos algún programa Ejecutaremos el programa hadoop-mapreduce-examples- 0,23,9.jar que es un contador de palabras Contar palabras es importante, por ejemplo, se usa para clasificación de textos al calcular las probabilidades condicionadas $ hadoop jar hadoop-mapreduce-examples-0.23.9.jar wordcount examples/julioverne/ examples/julioverne/output 41
Consideración En MRv1, el jar debe estar disponible en la IP del JobTracker En MRv2, el jar debe estar disponible en la IP del Resource Manager 42
Ejecución en YARN $ yarn jar hadoop-mapreduce-examples-0.23.9.jar wordcount examples/julioverne/ examples/julioverne/output Más comandos YARN https://hadoop.apache.org/docs/r2.2.0/hadoopyarn/hadoop-yarn-site/yarncommands.html 43
Ejemplo detallado yarn jar api.samples-0.0.1-snapshot.jar com.utad.api.wordcount.driverwordcount examples/libros/quijote/ examples/libros/quijote/output 44
Resultado 45
Qué ha pasado? No ha tardado tanto, no? Es un trabajo muy intenso de cómputo (y memoria) Se podría realizar un test contra otra configuración Listado de resultados 46
Mostramos el resultado $ hdfs dfs -cat examples/julioverne/output/part-r-00000 47
O, a través de la interfaz web 48
Y, toda esa información que ha salido por el camino? (Log) Hadoop nos informa de todos los pasos que ha realizado Verifica si el archivo de entrada existe. Verifica si el directorio de salida existe, y si existe, aborta el trabajo. No sea que se sobrescriba un trabajo que ha costado horas de ejecución Distribuye el archivo Java jar hacia todos los nodos responsables de realizar el trabajo. En este caso, este es solo un nodo. Ejecuta la fase mapper del trabajo. Analiza el archivo de entrada y emite un par <clave, valor>. La clave y el valor pueden ser objeto Ordena la salida del mapper en base a la clave Ejecuta el reducer Crea las métricas adecuadas para controlar el proceso 49
Control a través de Cloudera Manager 50
Información detallada 51
Control con YARN 52
53
54
Resumen Hemos aprendido a copiar un archivo del Local File System (LFS) al DFS También hemos visto que hay disponible un interfaz web muy recomendable (Cloudera Manager) Por último, hemos resumido los comandos más importantes para interactuar con Hadoop modo consola 55