O modo local permite depurar um job MapReduce na sua máquina antes de enviá-lo a um cluster distribuído. Em vez de implantar novamente no cluster a cada alteração de 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:
Baixe os metadados e os dados da tabela de entrada, os metadados da tabela de saída e quaisquer recursos necessários do MaxCompute para um diretório local chamado
warehouse.Executa múltiplas tarefas de map e reduce em sequência (não em paralelo).
Grava os resultados em um arquivo no diretório
warehouse.
Nas execuções seguintes, 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 ocorre 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 Limites do MapReduce) |
|
Segurança |
Sem restrições |
Sandbox Java aplicável a MapReduce e funções definidas pelo usuário (UDFs) |
Execute 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 ver o código completo do exemplo WordCount, consulte WordCount.
Etapa 2: Verifique a saída
Uma execução bem-sucedida imprime 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: Valide os resultados no diretório warehouse
A primeira execução cria um diretório warehouse 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 de
my_projectrepresentam projetos.Diretórios no mesmo nível de
wc_inewc_outrepresentam tabelas de dados. Os dados lidos ou gravados pelo comandojarficam armazenados nesse nível.
Valide 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 parte dos dados da tabela do MaxCompute e os salvou nesses arquivos. A próxima execução lerá diretamente de wc_in, sem necessidade de download.
Valide os dados de saída wc_out
O esquema 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 de esquema
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 da 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 um diretório de tabela já existe em
warehouse, ele ignora o download dessa tabela. Isso significa que um diretório de tabela local pode referenciar uma tabela inexistente no MaxCompute.
Próximos passos
WordCount — código completo do exemplo WordCount utilizado neste tópico
Limites do MapReduce — tamanho de recurso e outros limites aplicáveis ao modo distribuído