O modo local permite depurar um job MapReduce na sua máquina antes de enviá-lo a um cluster distribuído. Em vez de reimplantar no cluster a cada alteração no código, execute o job localmente com a flag -local e inspecione os resultados imediatamente.
Como funciona
Adicione a flag -local ao comando jar para executar o job localmente. O cliente MaxCompute:
Baixa os metadados e os dados da tabela de entrada, os metadados da tabela de saída e os recursos necessários do MaxCompute para um diretório local chamado
warehouse.Executa múltiplas tarefas map e reduce em sequência (não em paralelo).
Grava os resultados em um arquivo no diretório
warehouse.
Nas execuções subsequentes, se a tabela de entrada e os recursos já estiverem em warehouse, o cliente os lê diretamente — sem novo download.
O download de dados do MaxCompute está disponível apenas para jobs MapReduce executados em modo local.
Modo local vs. modo distribuído
|
Dimensão |
Modo local |
Modo distribuído |
|
Linhas de entrada |
Máximo de 100 linhas |
Sem limite |
|
Tamanho do recurso |
Sem limite |
Limitado (consulte MapReduce limits) |
|
Segurança |
Sem restrições |
O sandbox Java se aplica ao MapReduce e às funções definidas pelo usuário (UDFs) |
Executar um job em modo local
O exemplo a seguir executa o programa WordCount na tabela wc_in e grava a saída em wc_out.
Etapa 1: Execute o comando jar
odps:my_project> jar -l com.aliyun.odps.mapred.example.WordCount wc_in wc_out
Para o código de exemplo completo do WordCount, consulte WordCount.
Etapa 2: Verifique a saída
Uma execução bem-sucedida exibe um resumo com contadores:
Summary:
counters: 10
map-reduce framework
combine_input_groups=2
combine_output_records=2
map_input_bytes=4
map_input_records=1
map_output_records=2
map_output_[wc_out]_bytes=0
map_output_[wc_out]_records=0
reduce_input_groups=2
reduce_output_[wc_out]_bytes=8
reduce_output_[wc_out]_records=2
OK
Etapa 3: Verifique os resultados no diretório warehouse
Na primeira execução, um diretório warehouse é criado no caminho atual com a seguinte estrutura:
<warehouse>
|____my_project (project directory)
|____ <__tables__>
| |__wc_in (table data directory)
| | |____ data (file)
| | |
| | |____ <__schema__> (file)
| |__wc_out (table data directory)
| |____ data (file)
| |
| |____ <__schema__> (file)
|
|____ <__resources__>
|
|___table_resource_name (table resource)
| |____<__ref__>
|
|___ file_resource_name (file resource)
Diretórios no mesmo nível que
my_projectrepresentam projetos.Diretórios no mesmo nível que
wc_inewc_outrepresentam tabelas de dados. Os dados lidos ou gravados pelo comandojarficam armazenados neste nível.
Verificar os dados de entrada wc_in
O arquivo <__schema__> armazena os metadados da tabela. Para wc_in:
my_project.wc_in,key:STRING,value:STRING
O arquivo data contém as linhas baixadas:
0,2
O cliente baixou os metadados e uma parte dos dados da tabela do MaxCompute e os salvou nesses arquivos. A próxima execução lê diretamente de wc_in — sem necessidade de novo download.
Verificar os dados de saída wc_out
O schema de wc_out:
my_project.wc_out,key:STRING,cnt:BIGINT
Após a conclusão do job, o arquivo data contém os resultados:
0,1
2,1
Formato do arquivo schema
O arquivo <__schema__> define a estrutura da tabela:
project=local_project_name
table=local_table_name
columns=col1_name:col1_type,col2_name:col2_type
partitions=p1:STRING,p2:BIGINT -- optional
Regras de formatação:
Separe o nome de uma coluna e seu tipo com dois-pontos (
:).Separe as colunas com vírgula (
,).Declare
project_name.table_nameno início do arquivo, separado das definições de colunas por vírgula. Exemplo:project_name.table_name,col1_name:col1_type,col2_name:col2_type
Observações de uso
Edite os arquivos
<__schema__>edatadiretamente para fornecer dados de teste personalizados sem precisar baixar do MaxCompute.Se o cliente detectar que o diretório de uma tabela já existe em
warehouse, o download dessa tabela é ignorado. Isso significa que um diretório de tabela local pode referenciar uma tabela inexistente no MaxCompute.
Próximas etapas
WordCount — código de exemplo completo do WordCount utilizado neste tópico
MapReduce limits — tamanho de recursos e outros limites aplicáveis no modo distribuído