Entrada Divide em MapReduce do Hadoop

A maneira HDFS foi criado, ele quebra arquivos muito grandes em grandes blocos (por exemplo, medindo 128 MB), e armazena três cópias desses blocos em diferentes nós do cluster. HDFS não tem conhecimento do conteúdo desses arquivos.

Em fio, quando um trabalho de MapReduce é iniciado, o Gerenciador de recursos (a gestão de recursos de cluster e facilidade de agendamento de tarefas) cria um daemon Mestre Aplicação para cuidar do ciclo de vida do trabalho. (Em Hadoop 1, o JobTracker monitorado trabalhos individuais, bem como manipulação de agendamento de trabalho e gestão de recursos de cluster.)

Uma das primeiras coisas que o Mestre aplicativo faz é determinar quais os blocos de arquivo são necessários para o processamento. O mestre aplicação pede detalhes do NameNode de onde as réplicas dos blocos de dados necessários são armazenados. Usando os dados de localização para os blocos de arquivo, o Mestre aplicativo faz solicitações para o Gerenciador de recursos para ter tarefas mapa processar blocos específicos sobre os nós escravos onde eles estão armazenados.

A chave para o processamento eficiente MapReduce é que, sempre que possível, os dados são processados localmente - no nó slave, onde ele é armazenado.

Antes de olhar para a forma como os blocos de dados são processados, você precisa olhar mais de perto como Hadoop armazena dados. Em Hadoop, os arquivos são compostos de registros individuais, que são, em última análise processados ​​um por um por tarefas Mapper.

Por exemplo, o conjunto de dados de exemplo contém informações sobre voos concluídas dentro dos Estados Unidos entre 1987 e 2008.

Para baixar o conjunto de dados de exemplo, abra o navegador Firefox dentro da VM, e ir para o A página dataexpo.

Você tem um arquivo grande para cada ano, e dentro de cada arquivo, cada linha individual representa um único vôo. Em outras palavras, uma linha representa um registro. Agora, lembre-se que o tamanho do bloco para o cluster Hadoop é 64MB, o que significa que os arquivos de dados de luz são quebradas em pedaços de exatamente 64MB.

Você vê o problema? Se cada tarefa mapa processa todos os registros em um bloco de dados específico, o que acontece com os registros que ultrapassam os limites de bloco? blocos de arquivos são exatamente 64MB (ou o que você definir o tamanho do bloco para ser), e porque HDFS não tem nenhuma concepção do que está dentro dos blocos de arquivos, não pode avaliar quando um registro pode transbordar para outro bloco.

Para resolver este problema, o Hadoop utiliza uma representação lógica dos dados armazenados nos blocos de arquivo, conhecidos como splits de entrada. Quando um cliente trabalho MapReduce calcula os splits de entrada, ele descobre que o primeiro álbum inteiro em um bloco começa e onde o último registro no bloco termina.

Nos casos em que o último registro em um bloco é incompleta, a divisão de entrada inclui informações de localização para o próximo bloco e o deslocamento dos dados necessários para completar o registro de bytes.

A figura mostra essa relação entre blocos de dados e divisões de entrada.

image0.jpg

Você pode configurar o daemon aplicação Mestre (ou JobTracker, se você estiver em Hadoop 1) para calcular a entrada se divide em vez do cliente emprego, o que seria mais rápido para trabalhos de processamento de um grande número de blocos de dados.

processamento de dados MapReduce é impulsionado por este conceito de splits de entrada. O número de divisões de entrada que são calculados para uma aplicação específica determina o número de tarefas Mapper. Cada uma destas tarefas mapeador é atribuído, sempre que possível, para um nó escravo, onde a separação de entrada é armazenada. O Gerenciador de recursos (ou JobTracker, se você estiver em Hadoop 1) faz o seu melhor para garantir que a entrada splits são processadas localmente.

menu