Java >> Tutorial de Java >  >> Java

Ejecución de programas de ejemplo y puntos de referencia de MapReduce

Cuando se utiliza hardware o software nuevo o actualizado, los ejemplos simples y los puntos de referencia ayudan a confirmar el funcionamiento adecuado. Apache Hadoop incluye muchos ejemplos y puntos de referencia para ayudar en esta tarea. Este capítulo de la Guía de inicio rápido de Hadoop 2:Aprenda los fundamentos de la computación de Big Data en el ecosistema de Apache Hadoop 2 proporciona instrucciones sobre cómo ejecutar, monitorear y administrar algunos ejemplos y puntos de referencia básicos de MapReduce.

En este capítulo:

  • Se proporcionan los pasos necesarios para ejecutar los ejemplos de Hadoop MapReduce.
  • Se presenta una descripción general de la GUI web de YARN ResourceManager.
  • Se proporcionan los pasos necesarios para ejecutar dos puntos de referencia importantes.
  • El mapred El comando se presenta como una forma de listar y eliminar trabajos de MapReduce.

Cuando se utiliza hardware o software nuevo o actualizado, los ejemplos simples y los puntos de referencia ayudan a confirmar el funcionamiento adecuado. Apache Hadoop incluye muchos ejemplos y puntos de referencia para ayudar en esta tarea. Este capítulo proporciona instrucciones sobre cómo ejecutar, monitorear y administrar algunos ejemplos y puntos de referencia básicos de MapReduce.

Ejemplos de ejecución de MapReduce

Todas las versiones de Hadoop vienen con aplicaciones de ejemplo de MapReduce. Ejecutar los ejemplos de MapReduce existentes es un proceso simple, una vez que se encuentran los archivos de ejemplo, es decir. Por ejemplo, si instaló Hadoop versión 2.6.0 desde las fuentes de Apache en /opt , los ejemplos estarán en el siguiente directorio:

/opt/hadoop-2.6.0/share/hadoop/mapreduce/

En otras versiones, los ejemplos pueden estar en /usr/lib/hadoop-mapreduce/ o alguna otra ubicación. La ubicación exacta del archivo jar de ejemplo se puede encontrar utilizando find comando:

$ find / -name "hadoop-mapreduce-examples*.jar" -print

Para este capítulo se utilizará el siguiente entorno de software:

  • SO:Linux
  • Plataforma:RHEL 6.6
  • Hortonworks HDP 2.2 con la versión de Hadoop:2.6

En este entorno, la ubicación de los ejemplos es /usr/hdp/2.2.4.2-2/hadoop-mapreduce. A los efectos de este ejemplo, una variable de entorno llamada HADOOP_EXAMPLES se puede definir de la siguiente manera:

$ export HADOOP_EXAMPLES=/usr/hdp/2.2.4.2-2/hadoop-mapreduce

Una vez que defina la ruta de los ejemplos, puede ejecutar los ejemplos de Hadoop utilizando los comandos que se analizan en las siguientes secciones.

Lista de ejemplos disponibles

Se puede encontrar una lista de los ejemplos disponibles ejecutando el siguiente comando. En algunos casos, el número de versión puede ser parte del archivo jar (por ejemplo, en las fuentes de la versión 2.6 de Apache, el archivo se llama hadoop-mapreduce-examples-2.6.0.jar ).

$ yarn jar $HADOOP_EXAMPLES/hadoop-mapreduce-examples.jar

NOTA

En versiones anteriores de Hadoop, el comando hadoop jar . . . se utilizó para ejecutar programas MapReduce. Las versiones más nuevas proporcionan el hilo comando, que ofrece más capacidades. Ambos comandos funcionarán para estos ejemplos.

Los posibles ejemplos son los siguientes:

An example program must be given as the first argument.
Valid program names are:
  aggregatewordcount: An Aggregate based map/reduce program that counts
  the words in the input files.
  aggregatewordhist: An Aggregate based map/reduce program that computes
  the histogram of the words in the input files.
  bbp: A map/reduce program that uses Bailey-Borwein-Plouffe to compute
  exact digits of Pi.
  dbcount: An example job that count the pageview counts from a database.
  distbbp: A map/reduce program that uses a BBP-type formula to compute
  exact bits of Pi.
  grep: A map/reduce program that counts the matches of a regex in the
  input.
  join: A job that effects a join over sorted, equally partitioned
  datasets
  multifilewc: A job that counts words from several files.
  pentomino: A map/reduce tile laying program to find solutions to
  pentomino problems.
  pi: A map/reduce program that estimates Pi using a quasi-Monte
  Carlo method.
  randomtextwriter: A map/reduce program that writes 10GB of random
  textual data per node.
  randomwriter: A map/reduce program that writes 10GB of random data
  per node.
  secondarysort: An example defining a secondary sort to the reduce.
  sort: A map/reduce program that sorts the data written by the
  random writer.
  sudoku: A sudoku solver.
  teragen: Generate data for the terasort
  terasort: Run the terasort
  teravalidate: Checking results of terasort
  wordcount: A map/reduce program that counts the words in the
  input files.
  wordmean: A map/reduce program that counts the average length of
  the words in the input files.
  wordmedian: A map/reduce program that counts the median length of
  the words in the input files.
  wordstandarddeviation: A map/reduce program that counts the standard
  deviation of the length of the words in the input files.

Para ilustrar varias funciones de Hadoop y la GUI del servicio ResourceManager de YARN, el pi y terasort a continuación se presentan ejemplos. Para encontrar ayuda para ejecutar los otros ejemplos, ingrese el nombre del ejemplo sin argumentos. El Capítulo 6, "Programación de MapReduce", cubre uno de los otros ejemplos populares llamados wordcount .

Ejecutar el ejemplo de Pi

El pi ejemplo calcula los dígitos de π utilizando un método cuasi-Monte Carlo. Si no ha agregado usuarios a HDFS (consulte el Capítulo 10, "Procedimientos básicos de administración de Hadoop"), ejecute estas pruebas como usuario hdfs . Para ejecutar el pi ejemplo con 16 mapas y 1,000,000 de muestras por mapa, ingrese el siguiente comando:

$ yarn jar $HADOOP_EXAMPLES/hadoop-mapreduce-examples.jar pi 16 1000000

Si el programa se ejecuta correctamente, debería ver un resultado similar al siguiente. (Algunos de los mensajes de información de Hadoop se han eliminado para mayor claridad).

Number of Maps  = 16
Samples per Map = 1000000
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
Wrote input for Map #3
Wrote input for Map #4
Wrote input for Map #5
Wrote input for Map #6
Wrote input for Map #7
Wrote input for Map #8
Wrote input for Map #9
Wrote input for Map #10
Wrote input for Map #11
Wrote input for Map #12
Wrote input for Map #13
Wrote input for Map #14
Wrote input for Map #15
Starting Job
...
15/05/13 20:10:30 INFO mapreduce.Job:  map 0% reduce 0%
15/05/13 20:10:37 INFO mapreduce.Job:  map 19% reduce 0%
15/05/13 20:10:39 INFO mapreduce.Job:  map 50% reduce 0%
15/05/13 20:10:46 INFO mapreduce.Job:  map 56% reduce 0%
15/05/13 20:10:47 INFO mapreduce.Job:  map 94% reduce 0%
15/05/13 20:10:48 INFO mapreduce.Job:  map 100% reduce 100%
15/05/13 20:10:48 INFO mapreduce.Job: Job job_1429912013449_0047 completed
successfully
15/05/13 20:10:48 INFO mapreduce.Job: Counters: 49
        File System Counters
               FILE: Number of bytes read=358
               FILE: Number of bytes written=1949395
               FILE: Number of read operations=0
               FILE: Number of large read operations=0
               FILE: Number of write operations=0
               HDFS: Number of bytes read=4198
               HDFS: Number of bytes written=215
               HDFS: Number of read operations=67
               HDFS: Number of large read operations=0
               HDFS: Number of write operations=3
        Job Counters
               Launched map tasks=16
               Launched reduce tasks=1
               Data-local map tasks=16
               Total time spent by all maps in occupied slots (ms)=158378
               Total time spent by all reduces in occupied slots (ms)=8462
               Total time spent by all map tasks (ms)=158378
               Total time spent by all reduce tasks (ms)=8462
               Total vcore-seconds taken by all map tasks=158378
               Total vcore-seconds taken by all reduce tasks=8462
               Total megabyte-seconds taken by all map tasks=243268608
               Total megabyte-seconds taken by all reduce tasks=12997632
        Map-Reduce Framework
               Map input records=16
               Map output records=32
               Map output bytes=288
               Map output materialized bytes=448
               Input split bytes=2310
               Combine input records=0
               Combine output records=0
               Reduce input groups=2
               Reduce shuffle bytes=448
               Reduce input records=32
               Reduce output records=0
               Spilled Records=64
               Shuffled Maps=16
               Failed Shuffles=0
               Merged Map outputs=16
               GC time elapsed (ms)=1842
               CPU time spent (ms)=11420
               Physical memory (bytes) snapshot=13405769728
               Virtual memory (bytes) snapshot=33911930880
               Total committed heap usage (bytes)=17026777088
        Shuffle Errors
               BAD_ID=0
               CONNECTION=0
               IO_ERROR=0
               WRONG_LENGTH=0
               WRONG_MAP=0
               WRONG_REDUCE=0
        File Input Format Counters
               Bytes Read=1888
        File Output Format Counters
               Bytes Written=97
Job Finished in 23.718 seconds
Estimated value of Pi is 3.14159125000000000000

Observe que el progreso de MapReduce se muestra de la misma manera que la versión 1 de Hadoop, pero las estadísticas de la aplicación son diferentes. La mayoría de las estadísticas se explican por sí mismas. El único elemento importante a tener en cuenta es que el marco YARN MapReduce se utiliza para ejecutar el programa. (Consulte el Capítulo 1, "Antecedentes y conceptos", y el Capítulo 8, "Aplicaciones de Hadoop YARN", para obtener más información sobre los marcos de trabajo de YARN).

Uso de la GUI web para monitorear ejemplos

Esta sección proporciona una ilustración del uso de la GUI web de YARN ResourceManager para monitorear y encontrar información sobre los trabajos de YARN. La GUI web de YARN ResourceManager de Hadoop versión 2 difiere significativamente de la GUI web de MapReduce que se encuentra en la versión 1 de Hadoop. La Figura 4.1 muestra la interfaz web principal de YARN. Las métricas del clúster se muestran en la fila superior, mientras que las aplicaciones en ejecución se muestran en la tabla principal. Un menú a la izquierda proporciona navegación a la tabla de nodos, varias categorías de trabajo (por ejemplo, Nuevo, Aceptado, En ejecución, Finalizado, Fallido) y el Programador de capacidad (cubierto en el Capítulo 10, "Procedimientos básicos de administración de Hadoop"). Esta interfaz se puede abrir directamente desde el menú de enlaces rápidos del servicio Ambari YARN o ingresando directamente http://hostname:8088 en un navegador web local. Para este ejemplo, el pi se utiliza la aplicación. Tenga en cuenta que la aplicación puede ejecutarse rápidamente y puede finalizar antes de que haya explorado completamente la GUI. Una aplicación de larga duración, como terasort , puede ser útil al explorar todos los diversos enlaces en la GUI.

Figura 4.1 GUI web de Hadoop RUNNING Applications para el ejemplo de pi

Para aquellos lectores que han usado o leído sobre Hadoop versión 1, si observan la tabla de métricas de clúster, verán información nueva. Primero, notará que "Mapear/Reducir la capacidad de la tarea" ha sido reemplazada por la cantidad de contenedores en ejecución. Si YARN está ejecutando un trabajo de MapReduce, estos contenedores se pueden usar para tareas de mapeo y reducción. A diferencia de la versión 1 de Hadoop, la cantidad de mapeadores y reductores no es fija. También hay métricas de memoria y enlaces al estado de los nodos. Si hace clic en el enlace Nodos (menú izquierdo debajo de Acerca de), puede obtener un resumen de la actividad y el estado del nodo. Por ejemplo, la Figura 4.2 es una instantánea de la actividad del nodo mientras el pi la aplicación se está ejecutando. Observe la cantidad de contenedores, que utiliza el marco MapReduce como mapeadores o reductores.

Figura 4.2 Ventana de estado de nodos de Hadoop YARN ResourceManager

Volviendo a la ventana principal Aplicaciones/En ejecución (Figura 4.1), si hace clic en application_14299... enlace, aparecerá la ventana de estado de la aplicación en la Figura 4.3. Esta ventana proporciona una descripción general y métricas de la aplicación, incluido el nodo del clúster en el que se ejecuta el contenedor ApplicationMaster.

Figura 4.3 Estado de la aplicación Hadoop YARN para pi ejemplo

Al hacer clic en el enlace ApplicationMaster junto a "Rastreo de URL:" en la Figura 4.3, se abre la ventana que se muestra en la Figura 4.4. Tenga en cuenta que el enlace al ApplicationMaster de la aplicación también se encuentra en la última columna de la pantalla principal de Ejecución de aplicaciones que se muestra en la Figura 4.1.

Figura 4.4 Hadoop YARN ApplicationMaster para la aplicación MapReduce

En la ventana de la aplicación MapReduce, puede ver los detalles de la aplicación MapReduce y el progreso general de los mapeadores y reductores. En lugar de contenedores, la aplicación MapReduce ahora se refiere a mapas y reductores. Al hacer clic en job_14299... abre la ventana que se muestra en la Figura 4.5. Esta ventana muestra más detalles sobre la cantidad de mapeadores y reductores pendientes, en ejecución, completados y fallidos, incluido el tiempo transcurrido desde que comenzó el trabajo.

Figura 4.5 Progreso del trabajo Hadoop YARN MapReduce

El estado del trabajo en la Figura 4.5 se actualizará a medida que avanza el trabajo (la ventana debe actualizarse manualmente). El ApplicationMaster recopila e informa el progreso de cada tarea del mapeador y reductor. Cuando finaliza el trabajo, la ventana se actualiza a la que se muestra en la Figura 4.6. Informa el tiempo de ejecución general y proporciona un desglose del tiempo de las fases clave del trabajo de MapReduce (asignación, reproducción aleatoria, fusión, reducción).

Figura 4.6 Resumen del trabajo MapReduce completado de Hadoop YARN

Si hace clic en el nodo utilizado para ejecutar ApplicationMaster (n0:8042 en la Figura 4.6), se abre la ventana de la Figura 4.7 y proporciona un resumen del NodeManager en el nodo n0 . Nuevamente, NodeManager rastrea solo contenedores; las tareas reales que se ejecutan en los contenedores están determinadas por ApplicationMaster.

Figura 4.7 Resumen de trabajo de Hadoop YARN NodeManager para n0

Volviendo a la página de resumen del trabajo (Figura 4.6), también puede examinar los registros de ApplicationMaster haciendo clic en el enlace "registros". Para encontrar información sobre los mapeadores y reductores, haga clic en los números debajo de las columnas Fallido, Eliminado y Correcto. En este ejemplo, hubo 16 mapeadores exitosos y un reductor exitoso. Todos los números en estas columnas conducen a más información sobre el mapa individual o el proceso de reducción. Por ejemplo, al hacer clic en "16" debajo de "-Exitoso" en la Figura 4.6, se muestra la tabla de tareas del mapa en la Figura 4.8. Las métricas del contenedor Maestro de aplicaciones se muestran en forma de tabla. También hay un enlace al archivo de registro para cada proceso (en este caso, un proceso de mapa). Ver los registros requiere que yarn.log.aggregation-enable variable en el yarn-site.xml establecer el archivo. Para obtener más información sobre cómo cambiar la configuración de Hadoop, consulte el Capítulo 9, "Administración de Hadoop con Apache Ambari".

Figura 4.8 Registros de Hadoop YARN MapReduce disponibles para navegar

Si regresa a la ventana principal del clúster (Figura 4.1), elige Aplicaciones/Finalizado y luego selecciona nuestra aplicación, verá la página de resumen que se muestra en la Figura 4.9.

Figura 4.9 Página de resumen de la aplicación Hadoop YARN

Hay algunas cosas que notar en las ventanas anteriores. En primer lugar, dado que YARN administra aplicaciones, toda la información proporcionada por ResourceManager se refiere a los recursos proporcionados y al tipo de aplicación (en este caso, MAPREDUCE). ). En la Figura 4.1 y la Figura 4.4, el YARN ResourceManager se refiere al pi ejemplo por su ID de aplicación (application_1429912013449_0044 ). YARN no tiene datos sobre la aplicación real aparte del hecho de que es un trabajo de MapReduce. Los datos del trabajo real de MapReduce son proporcionados por el marco MapReduce y se hace referencia a ellos mediante una ID de trabajo (job_1429912013449_0044 ) en la figura 4.6. Por lo tanto, dos flujos de datos claramente diferentes se combinan en la GUI web:YARN aplicación s y marco MapReduce trabajos . Si el marco no proporciona información del trabajo, entonces ciertas partes de la GUI web no tendrán nada que mostrar.

Otro aspecto interesante de las ventanas anteriores es la naturaleza dinámica de las tareas de mapeador y reductor. Estas tareas se ejecutan como contenedores YARN y su número cambiará a medida que se ejecute la aplicación. Los usuarios pueden solicitar números específicos de mapeadores y reductores, pero ApplicationMaster los usa de manera dinámica. A medida que se completan los mapeadores, ApplicationMaster devolverá los contenedores al ResourceManager y solicitará una cantidad menor de contenedores de reducción. Esta característica proporciona una mejor utilización del clúster porque los mapeadores y reductores son recursos dinámicos, en lugar de fijos.


Etiqueta Java