MapReduce
Uma estrutura de programação para programas de computação distribuída é a estrutura central para os usuários desenvolverem "aplicativos de análise de dados baseados em Hadoop".
Funções básicas do MapReduce
Com o código de lógica de negócios escrito pelo usuário e vem com componentes padrão para integrar um programa de computação distribuída completo (código de integração, torna-se adequado para execução em um programa distribuído) e executado em um cluster Hadoop.
Vantagens do MapReduce :
- MapReduce é fácil de programar: ele simplesmente implementa algumas interfaces para completar um programa distribuído, que pode ser distribuído para rodar um grande número de máquinas PC baratas. Em outras palavras, escrever um programa distribuído é exatamente o mesmo que escrever um programa serial simples .
- O MapReduce tem boa escalabilidade: depois que os recursos de computação não são satisfeitos, ele pode expandir seu poder de computação simplesmente adicionando máquinas e melhorar a confiabilidade por meio do mecanismo de cópia.
- Alta tolerância a falhas: Por exemplo, se uma das máquinas estiver desligada, a tarefa computacional acima pode ser transferida para outro nó, para que a tarefa não falhe, e este processo é automático .
- Adequado para processamento massivo de dados off-line acima do nível de PB: para alcançar operações simultâneas de milhares de clusters.
Desvantagens do MapReduce :
- MapReduce não pode retornar resultados em milissegundos ou segundos como o mysql.
- Não é bom em computação de streaming, a entrada do conjunto de dados por MapReduce é estática .
- Não é bom em cálculo DAG
As principais ideias de programação do MapReduce:
A tarefa de mapa ——> é dividir o arquivo , dividir cada linha de entrada e saída, hello word, dividir na forma de valor-chave e entregá-lo ao processo ruduce para processamento posterior.
Reduzir tarefa ——> é contar os resultados do mapa.
A entrada do mapa também está na forma de chave1 e valor1, chave1 é o deslocamento e valor1 é o conteúdo de cada linha.
Desvio:
hello word
hello nihao
0 1 2 3 4 5 6 7
map(0,“hello word”)
map(12,“hello nihao”)
//空格算一个,换行不计
A saída value2 do mapa é um elemento e value3 é um iterador de coleção, que é uma coleção de value2
reduce(hello,(1,1,1,1)) //map的输出作为reduce的输入,将相同key放在一起作为一个集合
Razões para usar tipos de dados no Hadoop:
student{
string name;
string age;
string set;
} java封装后通过网络传输——————————>100kb
hadoop类型已经实现了序列化传输——————————>10kb
Serialização
É converter objetos na memória em sequências de bytes (ou outros protocolos de transferência de dados) para armazenamento em disco (persistência) e transmissão de rede e desserialização e vice-versa.
Recursos de serialização hsdoop:
- Uso compacto e eficiente do espaço de armazenamento. No exemplo acima, apenas (nome, idade, sexo) é transmitido
- Desenvolvimento rápido, com pouco desenvolvimento adicional para leitura e gravação de dados.
- Escalável, atualize com a atualização do protocolo de comunicação
- Suporta interação multilíngue, r, scala, c ++
Fluxo de trabalho detalhado do MapReduce:
Mecanismo Shuffer:
Após o método de mapa, o processamento de dados antes do método de redução é chamado de embaralhamento
Buffer de anel: não há cabeça ou cauda, estouro em 80%
O processo de embaralhamento ocorre apenas da etapa 7 à etapa 16.
- maptask coleta a saída de pares kv por nosso método map () e os coloca no buffer de memória.
- O arquivo do disco local está continuamente transbordando do buffer de memória e vários arquivos podem transbordar.
- Vários arquivos de estouro serão mesclados em um grande arquivo de estouro
- Durante o processo de estouro e o processo de mesclagem, o particionador deve ser chamado para particionar e classificar as chaves.
- De acordo com seu próprio número de partição, o reducetask vai para cada máquina maptask para buscar os dados de partição de resultado correspondentes.
- reducetask irá buscar os arquivos de resultado de maptasks diferentes na mesma partição. O reducetask mesclará esses arquivos (mesclar e classificar).
- Após a fusão em um arquivo grande, o processo de embaralhamento termina e, em seguida, o processo de operação lógica de reducetask é inserido (retire um grupo de pares de valores-chave do arquivo e chame o método de redução definido pelo usuário.
Resumo da ordem aleatória:
O tamanho do buffer afetará a eficiência de execução do mapreduce: em princípio, quanto maior o buffer, menor será o número de IOs do disco e mais rápida será a velocidade de execução.