Este tema describe cómo desarrollar un programa MapReduce en MaxCompute Studio. El proceso incluye escribir, depurar, empaquetar, cargar y ejecutar un programa MapReduce.
Requisitos previos
Debe cumplir con los siguientes requisitos previos:
-
Se ha conectado a un proyecto de MaxCompute.
Para obtener más información, consulte Manage project connections.
-
Ha creado un módulo Java.
Para obtener más información, consulte Create a MaxCompute Java module.
Escribir MapReduce
En el panel Project, haga clic derecho en el directorio de código fuente del módulo (es decir, ) y seleccione .
-
Introduzca un Name, seleccione Driver como tipo de clase y presione Enter.
Name: El nombre de la clase Java de MaxCompute. Si no ha creado un paquete, introduzca el nombre con el formato packagename.classname para crear un paquete automáticamente.
-
Seleccione el tipo de clase: Driver, Mapper o Reducer.
NotaSeleccione el tipo de clase adecuado:
Driver: La clase controladora del trabajo MapReduce. Configura y envía el trabajo. Puede especificar las clases Mapper y Reducer, así como otros detalles de configuración dentro del controlador. Es el punto de entrada del trabajo.
Mapper: La primera etapa del procesamiento de datos MapReduce. Procesa cada registro de entrada y genera un par clave-valor intermedio.
Reducer: Recibe los pares clave-valor intermedios del Mapper, los procesa y produce la salida final. Posteriormente, la salida se guarda en una tabla de MaxCompute.
-
Después de crear la clase, escriba su código Java en el editor.
MaxCompute Studio rellena automáticamente la plantilla Java con el código del framework. Solo necesita configurar ajustes como la tabla de entrada, la tabla de salida y las clases Mapper y Reducer.
package mymr.myudf; import ... public class HelloDriver { public static void main(String[] args) throws OdpsException { JobConf job = new JobConf(); // TODO: specify map output types job.setMapOutputKeySchema(SchemaUtils.fromString(?)); job.setMapOutputValueSchema(SchemaUtils.fromString(?)); // TODO: specify input and output tables InputUtils.addTable(TableInfo.builder().tableName(?).build(), job); OutputUtils.addTable(TableInfo.builder().tableName(?).build(), job); // TODO: specify a mapper job.setMapperClass(?); // TODO: specify a reducer job.setReducerClass(?); RunningJob rj = JobClient.runJob(job); rj.waitForCompletion(); } }
Depurar con una ejecución local
Utilice una ejecución local para probar su programa MapReduce y comprobar que la salida cumple con sus expectativas.
Haga clic derecho en el archivo Java completado y seleccione Run.
-
En el cuadro de diálogo Run/Debug Configurations, seleccione el proyecto de MaxCompute para esta ejecución.
En el cuadro de diálogo Run/Debug Configurations, seleccione WordCountTest bajo JUnit en el panel izquierdo. En el panel de configuración de la derecha, establezca Test kind en Class, introduzca
com.aliyun.odps.examples.mr.test.WordCountTesten el campo Class y establezca Use classpath of module en MyFristModule. -
Haga clic en OK para iniciar la ejecución.
NotaEl sistema lee los datos de la tabla especificada en warehouse como entrada durante la ejecución local. Puede consultar la salida de los registros en la consola.
Depurar con pruebas unitarias
Puede consultar el ejemplo de prueba unitaria WordCount en el directorio examples para escribir casos de prueba.
package com.aliyun.odps.examples.mr.test;
import ...
public class WordCountTest extends M...
// Define the schemas of the input and output tables
private final static String INPUT_...
private final static String OUTPUT_...
private JobConf job;
public WordCountTest() throws Excep...
TestUtil.initWarehouse();
// Configure the job
job = new JobConf();
job.setMapperClass(WordCount_Token...
job.setCombinerClass(WordCount_Sum...
job.setReducerClass(WordCount_SumR...
job.setMapOutputKeySchema(SchemaUti...
job.setMapOutputValueSchema(SchemaU...
InputUtils.addTable(TableInfo.build...
OutputUtils.addTable(TableInfo.buil...
}
@SuppressWarnings("deprecation")
@Test
public void testMap() throws IOExce...
MapUTContext mapContext = new MapUT...
mapContext.setInputSchema(INPUT_SC...
mapContext.setOutputSchema(OUTPUT_...
// Prepare the test data
Record record = mapContext.createIn...
record.set(new Text[] {new Text(...
Empaquetar y cargar
Después de depurar su programa, empáquelo en un archivo JAR y cárguelo en MaxCompute como recurso. Para obtener más información, consulte Package, upload, and register a Java program.
Ejecutar MapReduce
Ejecute el programa MapReduce en el cliente de MaxCompute.
En el panel de navegación izquierdo, haga clic en Project Explorer.
Haga clic derecho en el nombre del proyecto y seleccione Open in Console.
-
En el panel Console, ejecute el siguiente comando para ejecutar el trabajo MapReduce.
Para obtener más información sobre los comandos, consulte JAR commands.
jar -resources wordcount.jar -classpath D:\odps\clt\wordcount.jar com.aliyun.odps.examples.mr.WordCount wc_in wc_out;