3.1 Histórico do surgimento do termo BigData

O termo Big Data surgiu há relativamente pouco tempo. O Google Trends mostra o início de um crescimento ativo no uso da frase desde 2011:

Ao mesmo tempo, apenas o preguiçoso não usa o termo agora. Com frequência, o termo é usado de forma inadequada pelos profissionais de marketing. Então, o que é realmente Big Data? Como decidi expor e destacar sistematicamente a questão, é necessário definir o conceito.

Na minha prática, encontrei diferentes definições:

  • Big Data é quando há mais de 100 GB de dados (500 GB, 1 TB, o que você quiser).
  • Big Data são dados que não podem ser processados ​​no Excel.
  • Big Data são dados que não podem ser processados ​​em um único computador.

E ainda estes:

  • Big Data é geralmente qualquer dado.
  • Big Data não existe, foi inventado por profissionais de marketing.

Vou me ater à definição da wikipedia:

Big data é uma série de abordagens, ferramentas e métodos para processar dados estruturados e não estruturados de grandes volumes e diversidade significativa, a fim de obter resultados perceptíveis ao homem que sejam eficazes em condições de crescimento contínuo, distribuição em vários nós de uma rede de computadores, formados no final dos anos 2000, alternativa aos sistemas tradicionais de gerenciamento de banco de dados e soluções de classe de inteligência de negócios.

Assim, por Big Data vou entender não uma quantidade específica de dados e nem mesmo os dados em si, mas métodos de processamento dos mesmos, que permitem o processamento distribuído de informações. Esses métodos podem ser aplicados a grandes conjuntos de dados (como o conteúdo de todas as páginas da Internet), bem como a pequenos conjuntos de dados (como o conteúdo desta aula).

Aqui estão alguns exemplos do que pode ser uma fonte de dados que requer técnicas de big data:

  • Logs de comportamento do usuário na Internet
  • Sinais de GPS de carros para uma empresa de transporte
  • Dados obtidos de sensores no Grande Colisor de Hádrons
  • Livros digitalizados na Biblioteca Estatal Russa
  • Informações sobre transações de todos os clientes bancários
  • Informações sobre todas as compras em uma grande rede varejista, etc.

O número de fontes de dados está crescendo rapidamente, o que significa que as tecnologias de processamento de dados estão se tornando cada vez mais procuradas.

3.2 Princípios de big data

Com base na definição de Big Data, podemos formular os princípios básicos para trabalhar com esses dados:

1. Escalabilidade horizontal. Como pode haver uma quantidade arbitrariamente grande de dados, qualquer sistema que envolva o processamento de grandes dados deve ser extensível. O volume de dados aumentou 2 vezes - a quantidade de ferro no cluster aumentou 2 vezes e tudo continuou funcionando.

2. Tolerância a falhas. O princípio da escalabilidade horizontal implica que pode haver muitas máquinas em um cluster. Por exemplo, o cluster Hadoop do Yahoo tem mais de 42.000 máquinas (você pode ver os tamanhos dos clusters nas organizações neste link). Isso significa que algumas dessas máquinas certamente falharão. As práticas de big data precisam estar cientes dessas interrupções e sobreviver a elas sem consequências significativas.

3. Localidade dos dados. Em grandes sistemas distribuídos, os dados são distribuídos por um grande número de máquinas. Se os dados estiverem fisicamente localizados em um servidor e processados ​​em outro, os custos de transferência de dados podem exceder os custos do próprio processamento. Portanto, um dos princípios mais importantes para projetar soluções de BigData é o princípio da localidade de dados - se possível, processamos os dados na mesma máquina em que os armazenamos.

Todas as ferramentas modernas de big data seguem esses três princípios de uma forma ou de outra. Para acompanhá-los, é necessário apresentar alguns métodos, métodos e paradigmas para o desenvolvimento de ferramentas de desenvolvimento de dados. Um dos métodos mais clássicos que analisarei na palestra de hoje.

3.3 MapReduce

MapReduce é um modelo de processamento de dados distribuído proposto pelo Google para processar grandes quantidades de dados em clusters de computadores. MapReduce é bem ilustrado pela figura a seguir:

MapReduce assume que os dados estão organizados em alguns registros. O processamento de dados ocorre em 3 etapas:

1. Etapa do mapa . Nesta etapa, os dados são pré-processados ​​por meio da função map(), que é definida pelo usuário. O trabalho desta etapa é pré-processar e filtrar os dados. A operação é muito semelhante à operação do mapa em linguagens de programação funcionais - uma função personalizada é aplicada a cada registro de entrada.

A função map() aplicada a um único registro de entrada produz muitos pares chave-valor. Set - ou seja, pode retornar apenas um registro, pode não retornar nada ou pode retornar vários pares chave-valor. O que vai ficar na chave e no valor fica a critério do usuário, mas a chave é uma coisa muito importante, pois os dados com uma chave no futuro cairão em uma instância da função de redução.

2. Aleatório de palco. Passa despercebido pelo usuário. Neste estágio, a saída da função map é "combinada" - cada bin corresponde a uma chave de saída do estágio map. Futuramente, essas cestas servirão de insumo para redução.

3. Reduza o estágio. Cada "cesta" com valores gerados no estágio shuffle chega à entrada da função reduce().

A função de redução é fornecida pelo usuário e calcula o resultado final para uma única "cesta" . O conjunto de todos os valores retornados pela função reduce() é o resultado final da tarefa MapReduce.

Alguns fatos adicionais sobre o MapReduce:

  1. Todas as execuções da função map funcionam de forma independente e podem ser executadas em paralelo, inclusive em diferentes máquinas de cluster.
  2. Todas as execuções da função de redução funcionam de forma independente e podem ser executadas em paralelo, inclusive em diferentes máquinas de cluster.
  3. Shuffle representa internamente uma classificação paralela, portanto, também pode funcionar em diferentes máquinas de cluster. Os pontos 1-3 permitem que você implemente o princípio da escalabilidade horizontal .
  4. A função de mapa é geralmente usada na mesma máquina onde os dados são armazenados - isso reduz a transmissão de dados pela rede (princípio da localidade de dados).
  5. MapReduce é sempre uma varredura de dados completa, não há índices. Isso significa que o MapReduce é pouco aplicável quando uma resposta é necessária muito rapidamente.

3.4 Exemplos de tarefas efetivamente resolvidas com MapReduce

Contagem de palavras

Vamos começar com a tarefa clássica - Contagem de palavras. A tarefa é formulada da seguinte forma: existe um grande corpus de documentos. A tarefa consiste em calcular o número total de vezes que ocorre no corpus para cada palavra que ocorre pelo menos uma vez no corpus.

Solução:

Como temos um grande corpus de documentos, deixe um documento ser um registro de entrada para a tarefa MapRreduce. No MapReduce, podemos apenas definir funções definidas pelo usuário, o que faremos (usaremos pseudocódigo semelhante ao python):

def map(doc): 
for word in doc: 
yield word, 1 
def reduce(word, values): 
yield word, sum(values) 

A função map transforma o documento de entrada em um conjunto de pares (palavra, 1), shuffle transparentemente para nós o transforma em pares (palavra, [1,1,1,1,1,1]), reduz a soma destes, retornando a resposta final para a palavra.

Processando logs do sistema de publicidade

O segundo exemplo é retirado da prática real da Data-Centric Alliance.

Tarefa: existe um csv-log do sistema de publicidade no formato:

<user_id>,<country>,<city>,<campaign_id>,<creative_id>,<payment></p> 
 
11111,RU,Moscow,2,4,0.3 
22222,RU,Voronezh,2,3,0.2 
13413,UA,Kyiv,4,11,0.7 
… 

É necessário calcular o custo médio de exibição de publicidade nas cidades da Rússia.

Solução:

def map(record): 
user_id, country, city, campaign_id, creative_id, payment = record.split(",") 
payment=float(payment) 
if country == "RU": 
yield city, payment 
def reduce(city, payments): 
yield city, sum(payments)/len(payments) 

A função mapa verifica se precisamos dessa entrada - e se precisar, deixa apenas as informações necessárias (cidade e valor do pagamento). A função de redução calcula a resposta final para uma cidade dada uma lista de todos os pagamentos naquela cidade.