MapReduce es un marco con la que podemos escribir aplicaciones para procesar grandes cantidades de datos, paralelamente, en grandes grupos de componentes de hardware de manera confiable.
MapReduce es una técnica de procesamiento y un programa modelo de computación distribuida basada en java. El algoritmo MapReduce contiene dos tareas importantes, a saber Mapa y reducir. Mapa toma un conjunto de datos y se convierte en otro conjunto de datos, en el que los elementos se dividen en tuplas (pares clave/valor). En segundo lugar, reducir tarea, que toma la salida de un mapa como entrada y combina los datos tuplas en un conjunto más pequeño de tuplas. Como la secuencia de MapReduce el nombre implica, la reducción se realiza siempre después de que el mapa.
La principal ventaja de MapReduce es que es fácil de escalar procesamiento de datos en múltiples nodos. En el modelo MapReduce, el procesamiento de datos primitivos son llamados mapas y reductores. Descomposición de una aplicación de procesamiento de datos en mapas y reductores a veces es no trivial. Pero, una vez que escribir una aplicación en el MapReduce forma, la escala de la aplicación que se ejecuta en cientos, miles o incluso decenas de miles de máquinas en un clúster es simplemente un cambio de configuración. Esta escalabilidad sencilla es lo que ha atraído a muchos programadores a usar el modelo MapReduce.
Paradigma MapReduce por lo general se basa en enviar el ordenador a donde residen los datos.
MapReduce programa se ejecuta en tres etapas, a saber: mapa etapa, shuffle, y reducir.
Mapa etapa : El mapa o mapa de trabajo es la de procesar los datos de entrada. Por lo general, los datos de entrada se encuentra en la forma de archivo o directorio y se almacena en el sistema de archivos Hadoop (HDFS). El archivo de entrada se pasa a la función mapa línea por línea. El mapper procesa los datos y crea varios pequeños fragmentos de datos.
Reducir etapa: Esta etapa es la combinación de la reproducción aleatoria y la etapa Reducir. La pieza de trabajo es la de procesar los datos que llegan desde el mapa. Después de un proceso de elaboración, se genera un nuevo conjunto de la producción, que se almacena en el HDFS.
Durante el trabajo, Hadoop MapReduce envía el mapa y reducir las tareas a los servidores correspondientes en el clúster.
El marco de trabajo administra todos los detalles de los datos de tareas tales como la emisión, verificar la realización de las tareas, y copia de los datos en todo el clúster entre los nodos.
La mayoría de los informáticos se lleva a cabo en los nodos de datos en los discos locales que reduce el tráfico de la red.
Tras la finalización de las tareas asignadas, el grupo recopila y disminución de los datos que forman un resultado adecuado y lo envía de vuelta al servidor Hadoop.
El MapReduce marco funciona en <key, value> pares, es decir, el marco considera que la entrada en el trabajo como un conjunto de <key, value> pares y produce un conjunto de etiquetas <key, value> de la salida del trabajo, posiblemente de distintos tipos.
La clave y el valor de las clases deben ser serializados por el marco y por lo tanto, necesidad de aplicar la Escritura interfaz. Además, las clases clave tienen que aplicar la interfaz para facilitar Writable-Comparable ordenar por el marco. Tipos de entrada y salida de MapReduce trabajo: (Entrada)<k1, v1> -> map -> <k2, v2>-> reduce -> <k3, v3>(salida).
Entrada | Salida | |
---|---|---|
Mapa | <k1, v1> | lista (<k2, v2>) |
Reducir | <k2, lista(v2)> | lista (<k3, v3>) |
Carga útil - Aplicaciones aplicar el mapa y reduzca las funciones y forman el núcleo del trabajo.
Mapa - Mapa mapas la entrada pares clave/valor a un conjunto de insumos par clave/valor.
NamedNode - nodo que gestiona el Hadoop Distributed File System (HDFS).
DataNode - Nodo en el que se presentan los datos antes de cualquier transformación.
MasterNode JobTracker - Nodo donde se ejecuta y que acepta las peticiones de trabajo de los clientes.
SlaveNode - Nodo en Mapa y Reducir programa se ejecuta.
JobTracker - Los trabajos y las vías el asignar trabajos a Tarea tracker.
Tarea Tracker - Realiza un seguimiento de la tarea y el estado de los informes de JobTracker.
Trabajo: un programa es una ejecución de un mapa y reductor en un conjunto de datos.
Tarea: La ejecución de un mapa o un reductor en un corte de datos.
Tarea intento - un caso particular de un intento de ejecutar una tarea en un SlaveNode.
A continuación se muestra los datos relativos al consumo eléctrico de una organización. Contiene el consumo eléctrico mensual y el promedio anual de diferentes años.
Jan | Feb | Mar | Apr | Mayo | Jun | Jul | Ago | Sep | Oct | Nov | Dec | Avg | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1979 | 23 | 23 | 2 | 43 | 24 | 25 | 26 | 26 | 26 | 26 | 25 | 26 | 25 |
1980 | 26 | 27 | 28 | 28 | 28 | 30 | 31 | 31 | 31 | 30 | 30 | 30 | 29 |
1981 | 31 | 32 | 32 | 32 | 33 | 34 | 35 | 36 | 36 | 34 | 34 | 34 | 34 |
1984 | 39 | 38 | 39 | 39 | 39 | 41 | 42 | 43 | 40 | 39 | 38 | 38 | 40 |
1985 | 38 | 39 | 39 | 39 | 39 | 41 | 41 | 41 | 00 | 40 | 39 | 39 | 45 |
Si los datos anteriores no se da como entrada, tenemos que escribir aplicaciones para procesar y producir resultados tales como encontrar el año de uso máximo, año de uso mínimo, y así sucesivamente. Este es un paseo para los programadores con número finito de registros. Simplemente se escriben la lógica para producir los resultados requeridos, y pasar los datos a la aplicación escrita.
Sin embargo, creo que de los datos que representa el consumo eléctrico de todos los grandes sectores de un estado en particular, desde su formación.
Al escribir aplicaciones para procesar esos datos por lotes,
Para resolver estos problemas, tenemos el MapReduce framework.
Los datos anteriores se guardan como ejemplo.txtand dada como entrada. El archivo de entrada se ve como se muestra a continuación.
1979 23 23 2 43 24 25 26 26 26 26 25 26 25 1980 26 27 28 28 28 30 31 31 31 30 30 30 29 1981 31 32 32 32 33 34 35 36 36 34 34 34 34 1984 39 38 39 39 39 41 42 43 40 39 38 38 40 1985 38 39 39 39 39 41 41 41 00 40 39 39 45
A continuación se muestra el programa de la muestra los datos usando MapReduce framework.
package hadoop; import java.util.*; import java.io.IOException; import java.io.IOException; import org.apache.hadoop.fs.Path; import org.apache.hadoop.conf.*; import org.apache.hadoop.io.*; import org.apache.hadoop.mapred.*; import org.apache.hadoop.util.*; public class ProcessUnits { //Mapper class public static class E_EMapper extends MapReduceBase implements Mapper<LongWritable ,/*Input key Type */ Text, /*Input value Type*/ Text, /*Output key Type*/ IntWritable> /*Output value Type*/ { //Map function public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = value.toString(); String lasttoken = null; StringTokenizer s = new StringTokenizer(line,"\t"); String year = s.nextToken(); while(s.hasMoreTokens()) { lasttoken=s.nextToken(); } int avgprice = Integer.parseInt(lasttoken); output.collect(new Text(year), new IntWritable(avgprice)); } } //Reducer class public static class E_EReduce extends MapReduceBase implements Reducer< Text, IntWritable, Text, IntWritable > { //Reduce function public void reduce( Text key, Iterator <IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { int maxavg=30; int val=Integer.MIN_VALUE; while (values.hasNext()) { if((val=values.next().get())>maxavg) { output.collect(key, new IntWritable(val)); } } } } //Main function public static void main(String args[])throws Exception { JobConf conf = new JobConf(Eleunits.class); conf.setJobName("max_eletricityunits"); conf.setOutputKeyClass(Text.class); conf.setOutputValueClass(IntWritable.class); conf.setMapperClass(E_EMapper.class); conf.setCombinerClass(E_EReduce.class); conf.setReducerClass(E_EReduce.class); conf.setInputFormat(TextInputFormat.class); conf.setOutputFormat(TextOutputFormat.class); FileInputFormat.setInputPaths(conf, new Path(args[0])); FileOutputFormat.setOutputPath(conf, new Path(args[1])); JobClient.runJob(conf); } }
Guardar el programa comoProcessUnits.java.La compilación y la ejecución del programa se explica a continuación.
Supongamos que estamos en el directorio principal de un usuario Hadoop (e.g. /home/hadoop).
Siga los pasos que se indican a continuación para compilar y ejecutar el programa anterior.
El comando siguiente es crear un directorio para almacenar el compilado las clases de java.
$ mkdir units
DescargarHadoop-core-1.2.1.jar,que se utiliza para compilar y ejecutar el programa MapReduce. Visita el siguiente enlace http://mvnrepository.com/artifact/org.apache.hadoop/hadoop-core/1.2.1 para descargar el jar. Supongamos que el archivo .exe descargado es/home/hadoop/.
Los siguientes comandos se utilizan para la elaboración de lasProcessUnits.javaprograma java y crear una jarra para el programa.
$ javac -classpath hadoop-core-1.2.1.jar -d units ProcessUnits.java $ jar -cvf units.jar -C units/ .
El siguiente comando se utiliza para crear una entrada de directorio HDFS.
$HADOOP_HOME/bin/hadoop fs -mkdir input_dir
El siguiente comando se utiliza para copiar el archivo de entrada llamadosample.txtel directorio de entrada de HDFS.
$HADOOP_HOME/bin/hadoop fs -put /home/hadoop/sample.txt input_dir
El siguiente comando se utiliza para verificar los archivos en el directorio de entrada.
$HADOOP_HOME/bin/hadoop fs -ls input_dir/
El siguiente comando se utiliza para ejecutar la aplicación Eleunit_max teniendo en los archivos de entrada en el directorio de entrada.
$HADOOP_HOME/bin/hadoop jar units.jar hadoop.ProcessUnits input_dir output_dir
Espere un momento hasta que el archivo es ejecutado. Después de la ejecución, como se muestra a continuación, la salida contendrá el número de divisiones, el número de tareas mapa, el número de pieza tareas, etc.
INFO mapreduce.Job: Job job_1414748220717_0002 completed successfully 14/10/31 06:02:52 INFO mapreduce.Job: Counters: 49 File System Counters FILE: Number of bytes read=61 FILE: Number of bytes written=279400 FILE: Number of read operations=0 FILE: Number of large read operations=0 FILE: Number of write operations=0 HDFS: Number of bytes read=546 HDFS: Number of bytes written=40 HDFS: Number of read operations=9 HDFS: Number of large read operations=0 HDFS: Number of write operations=2 Job Counters Launched map tasks=2 Launched reduce tasks=1 Data-local map tasks=2 Total time spent by all maps in occupied slots (ms)=146137 Total time spent by all reduces in occupied slots (ms)=441 Total time spent by all map tasks (ms)=14613 Total time spent by all reduce tasks (ms)=44120 Total vcore-seconds taken by all map tasks=146137 Total vcore-seconds taken by all reduce tasks=44120 Total megabyte-seconds taken by all map tasks=149644288 Total megabyte-seconds taken by all reduce tasks=45178880 Map-Reduce Framework Map input records=5 Map output records=5 Map output bytes=45 Map output materialized bytes=67 Input split bytes=208 Combine input records=5 Combine output records=5 Reduce input groups=5 Reduce shuffle bytes=6 Reduce input records=5 Reduce output records=5 Spilled Records=10 Shuffled Maps =2 Failed Shuffles=0 Merged Map outputs=2 GC time elapsed (ms)=948 CPU time spent (ms)=5160 Physical memory (bytes) snapshot=47749120 Virtual memory (bytes) snapshot=2899349504 Total committed heap usage (bytes)=277684224 File Output Format Counters Bytes Written=40
El siguiente comando se utiliza para verificar los archivos resultantes de la carpeta de salida.
$HADOOP_HOME/bin/hadoop fs -ls output_dir/
El siguiente comando se utiliza para ver el resultado en la Part-00000 archivo. Este archivo se genera por HDFS.
$HADOOP_HOME/bin/hadoop fs -cat output_dir/part-00000
A continuación se muestra la salida generada por el MapReduce programa.
1981 34 1984 40 1985 45
El siguiente comando se utiliza para copiar la carpeta de salida de los HDFS en el sistema de archivos local para analizar.
$HADOOP_HOME/bin/hadoop fs -cat output_dir/part-00000/bin/hadoop dfs get output_dir /home/hadoop
Hadoop Todos los comandos son invocados por el$HADOOP_HOME/bin/hadoop. Ejecuta el script Hadoop sin argumentos imprime la descripción de todos los comandos.
Usage : hadoop [--config confdir] COMANDO
La siguiente tabla detalla las opciones disponibles y su descripción.
Opciones | Descripción |
---|---|
Namenode -formato | La DFS Formatos archivos. |
Secondarynamenode | Ejecuta el DFS namenode secundario. |
Namenode | Ejecuta el DFS namenode. |
Datanode | Ejecuta un DFS datanode. |
Dfsadmin | Ejecuta un DFS cliente admin. |
Mradmin | Ejecuta un Map-Reduce cliente admin. |
Fsck | Ejecuta una utilidad de comprobación de archivos. |
Fs | Archivos genéricos se ejecuta un cliente usuario. |
Equilibradora | Ejecuta un balanceo del cluster utilidad. |
oiv | Se aplica el visor sin conexión fsimage a un fsimage. |
Fetchdt | Obtiene un token de la delegación NameNode. |
Jobtracker | Ejecuta el trabajo MapReduce Tracker nodo. |
Tubos | Tubos se ejecuta un trabajo. |
Tasktracker | Ejecuta una tarea MapReduce Tracker nodo. |
Historyserver | Historial de trabajo se ejecuta servidores como un demonio independiente. |
Trabajo | Manipula los trabajos MapReduce. |
Cola | Obtiene información sobre JobQueues. |
Versión | Imprime el número de versión. |
jar <jar> | Se ejecuta un archivo jar. |
distcp <srcurl> <desturl> | Copia el archivo o directorios recursivamente. |
distcp2 <srcurl> <desturl> | DistCp versión 2. |
Archive -archiveName NOMBRE -p | Hadoop crea un archivo. |
<parent path> <src>* <dest> | |
Classpath. | Imprime la ruta de la clase necesaria para obtener el Hadoop jar y las bibliotecas necesarias. |
Daemonlog | Obtener/Establecer el nivel de registro para cada demonio |
Uso: hadoop job [GENERIC_OPTIONS]
Las siguientes son las opciones genéricas disponibles en Hadoop trabajo.
GENERIC_OPTIONS | Descripción |
---|---|
-submit <job-file> | Envía el trabajo. |
Estado <job-id> | Imprime el mapa y reducir porcentaje de finalización y contadores de trabajos. |
Contador <id de trabajo> <group-name> <countername> | Imprime el valor del contador. |
-Matar <id de trabajo> | Mata el trabajo. |
-Eventos <id de trabajo> <fromevent- #> < # -de eventos> | Imprime las citas recibidas por los detalles jobtracker para el rango dado. |
-Historia [todos] <jobOutputDir> - historia < jobOutputDir> | Imprime los detalles del trabajo, error y mató detalles punta. Más detalles sobre el trabajo, como tareas y éxito los intentos realizados para cada tarea se pueden ver mediante la especificación de la opción [todos]. |
-List [todos] | Muestra todos los trabajos. -List muestra sólo los trabajos que todavía no se han completado. |
-Matar tarea <tarea-id> | Mata a la tarea. Muertas las tareas no se imputarán a intentos fallidos. |
-No-tarea <tarea-id> | Falla la tarea. Las tareas no se imputarán a |
Intentos fallidos. | |
De prioridad <id de trabajo> <prioridad> | Cambia la prioridad del trabajo. Los valores de prioridad son permitidos VERY_HIGH, ALTA, NORMAL, BAJA, VERY_LOW |
$ $HADOOP_HOME/bin/hadoop job -status <JOB-ID> e.g. $ $HADOOP_HOME/bin/hadoop job -status job_201310191043_0004
$ $HADOOP_HOME/bin/hadoop job -history <DIR-NAME> e.g. $ $HADOOP_HOME/bin/hadoop job -history /user/expert/output
$ $HADOOP_HOME/bin/hadoop job -kill <JOB-ID> e.g. $ $HADOOP_HOME/bin/hadoop job -kill job_201310191043_0004