Cette rubrique explique comment développer un programme MapReduce dans MaxCompute Studio. Le processus comprend l'écriture, le débogage, l'empaquetage, le chargement et l'exécution d'un programme MapReduce.
Prérequis
Assurez-vous de remplir les conditions préalables suivantes :
-
Vous êtes connecté à un projet MaxCompute.
Pour plus d'informations, reportez-vous à la rubrique Gérer les connexions de projet.
-
Vous avez créé un module Java.
Pour plus d'informations, reportez-vous à la rubrique Créer un module Java MaxCompute.
Écrire un programme MapReduce
Dans le volet Project, cliquez avec le bouton droit sur le répertoire du code source du module (c'est-à-dire ), puis sélectionnez .
-
Saisissez un Name, sélectionnez Driver comme type de classe, puis appuyez sur Entrée.
Name : nom de la classe Java MaxCompute. Si vous n'avez pas encore créé de package, saisissez le nom au format packagename.classname pour créer automatiquement un package.
-
Sélectionnez le type de classe : Driver, Mapper ou Reducer.
RemarqueSélectionnez le type de classe approprié :
Driver : classe pilote de la tâche MapReduce. Elle configure et soumet la tâche. Vous pouvez spécifier les classes Mapper et Reducer ainsi que d'autres détails de configuration au sein du pilote. Il s'agit du point d'entrée de la tâche.
Mapper : première étape du traitement des données MapReduce. Il traite chaque enregistrement d'entrée et génère une paire clé-valeur intermédiaire.
Reducer : reçoit les paires clé-valeur intermédiaires du Mapper, les traite et produit la sortie finale. La sortie est ensuite enregistrée dans une table MaxCompute.
-
Après avoir créé la classe, rédigez votre code Java dans l'éditeur.
MaxCompute Studio remplit automatiquement le modèle Java avec le code framework. Il vous suffit de configurer les paramètres tels que la table d'entrée, la table de sortie et les classes Mapper et 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(); } }
Déboguer avec une exécution locale
Utilisez une exécution locale pour tester votre programme MapReduce et vérifier que la sortie correspond à vos attentes.
Cliquez avec le bouton droit sur le fichier Java terminé et sélectionnez Run.
-
Dans la boîte de dialogue Run/Debug Configurations, sélectionnez le projet MaxCompute pour cette exécution.
Dans la boîte de dialogue Run/Debug Configurations, sélectionnez WordCountTest sous JUnit dans le volet de gauche. Dans le volet de configuration à droite, définissez Test kind sur Class, saisissez
com.aliyun.odps.examples.mr.test.WordCountTestdans le champ Class et définissez Use classpath of module sur MyFristModule. -
Cliquez sur OK pour lancer l'exécution.
RemarqueLe système lit les données de la table spécifiée dans warehouse en tant qu'entrée lors de l'exécution locale. Vous pouvez consulter la sortie des journaux dans la console.
Déboguer avec des tests unitaires
Inspirez-vous de l'exemple de test unitaire WordCount situé dans le répertoire examples pour rédiger vos cas de test.
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(...
Empaqueter et charger
Après avoir débogué votre programme, empaquetez-le dans un fichier JAR et chargez-le sur MaxCompute en tant que ressource. Pour plus d'informations, reportez-vous à la rubrique Empaqueter, charger et enregistrer un programme Java.
Exécuter MapReduce
Exécutez le programme MapReduce sur le client MaxCompute.
Dans le volet de navigation de gauche, cliquez sur Project Explorer.
Cliquez avec le bouton droit sur le nom du projet et sélectionnez Open in Console.
-
Dans le volet Console, exécutez la commande suivante pour lancer la tâche MapReduce.
Pour plus d'informations sur les commandes, reportez-vous à la rubrique Commandes JAR.
jar -resources wordcount.jar -classpath D:\odps\clt\wordcount.jar com.aliyun.odps.examples.mr.WordCount wc_in wc_out;