Este tópico descreve como desenvolver um programa MapReduce no MaxCompute Studio. O processo inclui escrever, depurar, empacotar, fazer upload e executar um programa MapReduce.
Pré-requisitos
Você deve atender aos seguintes pré-requisitos:
-
Conexão estabelecida com um projeto do MaxCompute.
Para mais informações, consulte Gerencie conexões de projeto.
-
Módulo Java criado.
Para mais informações, consulte Crie um módulo Java do MaxCompute.
Escrever o MapReduce
No painel Project, clique com o botão direito no diretório de source code do módulo (ou seja, ) e selecione .
-
Insira um Name, selecione Driver como tipo de classe e pressione Enter.
Name: Nome da classe Java do MaxCompute. Caso ainda não tenha criado um pacote, insira o nome no formato packagename.classname para criar um pacote automaticamente.
-
Selecione o tipo de classe: Driver, Mapper ou Reducer.
NotaEscolha o tipo de classe apropriado:
Driver: Classe driver do job MapReduce. Ela configura e envia o job. É possível especificar as classes Mapper e Reducer, além de outros detalhes de configuração, dentro do driver. Trata-se do ponto de entrada do job.
Mapper: Primeira etapa do processamento de dados do MapReduce. Processa cada registro de entrada e gera um par chave-valor intermediário.
Reducer: Recebe os pares chave-valor intermediários do Mapper, processa-os e produz a saída final. A saída é então salva em uma tabela do MaxCompute.
-
Após criar a classe, escreva seu código Java no editor.
O MaxCompute Studio preenche automaticamente o modelo Java com o código do framework. Basta configurar definições como tabela de entrada, tabela de saída e as classes Mapper e 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 com execução local
Utilize uma execução local para testar seu programa MapReduce e verifique se a saída atende às suas expectativas.
Clique com o botão direito no arquivo Java concluído e selecione Run.
-
Na caixa de diálogo Run/Debug Configurations, selecione o projeto do MaxCompute para esta execução.
Na caixa de diálogo Run/Debug Configurations, selecione WordCountTest em JUnit no painel à esquerda. No painel de configuração à direita, defina Test kind como Class, insira
com.aliyun.odps.examples.mr.test.WordCountTestno campo Class e defina Use classpath of module como MyFristModule. -
Clique em OK para iniciar a execução.
NotaDurante a execução local, o sistema lê dados da tabela especificada em warehouse como entrada. É possível visualizar a saída de log no console.
Depurar com testes de unidade
Consulte o exemplo de teste de unidade WordCount no diretório examples para escrever seus casos de teste.
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(...
Empacotar e fazer upload
Após depurar seu programa, empacote-o em um arquivo JAR e faça o upload para o MaxCompute como um resource. Para mais informações, consulte Empacote, faça upload e registre um programa Java.
Executar o MapReduce
Execute o programa MapReduce no cliente do MaxCompute.
No painel de navegação à esquerda, clique em Project Explorer.
Clique com o botão direito no nome do projeto e selecione Open in Console.
-
No painel Console, execute o comando a seguir para rodar o job MapReduce.
Para mais informações sobre comandos, consulte Comandos JAR.
jar -resources wordcount.jar -classpath D:\odps\clt\wordcount.jar com.aliyun.odps.examples.mr.WordCount wc_in wc_out;