Bruno Arine
Bruno Arine
Cientista de dados | Físico
Apr 26, 2021 5 min read

Passo a passo: machine learning com Spark e AWS (Parte I)

thumbnail for this post

Parte I: Criando uma instância no Amazon EC2

Qualquer entusiasta de machine learning, mais cedo ou mais tarde, acaba se deparando com um dataset grande demais para caber na memória do laptop. Nesta hora, existem duas saídas: ou quebrar o dataset em pedaços (chunks) e computá-los na sua máquina usando uma ferramenta apropriada como o Vaex, ou distribuir todo o trabalho computacional para um cluster de máquinas.

Se você nunca fez isso antes, pode soar como uma coisa de outro mundo. Mas a verdade é que hoje em dia o registro e configuração de um cluster na nuvem é extremamente simples, rápido e acessível.

Esta é a primeira parte do tutorial onde mostrarei como executar um projeto de machine learning em Python utilizando a stack Spark + AWS.

Por que o Spark?

Quando se trata de big data, o processamento dos dados não acontece em uma máquina individualmente, mas sim de forma distribuída. Isso significa que tarefas grandes demais são repartidas em porções mais manejáveis e então delegadas para um cluster de máquinas, cada um com suas CPUs e memórias próprias. Para este tipo de tarefa, as grandes tecnologias do momento são Hadoop e Spark.

Enquanto o Hadoop armazena no disco dados intermediários durante o processamento dos dados, o Spark retém o máximo possível deles na memória. Isso é vantajoso quando se trabalha com um grande volume de dados, já que a memória RAM pode ser até 6 vezes mais rápida que o armazenamento SSD.1 Por essa e outras razões, Spark tem sido a tecnologia mais utilizada em clusters nos últimos anos.

Ranking de buscas no Google desde 2010

Ranking de buscas no Google desde 2010

Por que o AWS?

Instalar, configurar e padronizar o Spark manualmente em todas as máquinas de um cluster pode dar um pouco de trabalho. Em vista disso, a Amazon oferece um serviço chamado Elastic MapReduce (EMR), que fornece máquinas virtuais com produtos como Hadoop ou Spark instaladas e pré-configurados. Além disso, você pode aumentar ou diminiuir o tamanho ou capacidade do seu cluster de acordo com a necessidade do momento.

O custo de uma instância

Todo usuário que se cadastrar na AWS pode utilizar o serviço EC2 (onde nossa instância fica hospeada) gratuitamente por 12 meses desde que suas aplicações não ultrapassem os limites oferecidos, o que inclui até o momento que escrevi este post 750 horas por mês da instância t2.micro.

No entanto, o tipo de instância que criaremos neste tutorial (m5.xlarge) custa aproximadamente $0.75 (quatro centavos de dólar) para cada hora de processamento.

Configurando o AWS

  1. Acesse o site do Amazon EMR e crie uma conta, caso você ainda não tenha feito.

  2. Em “Serviços da AWS”, expanda a seção “Todos os serviços” e clique em EC2.

  1. No menu à esquerda, clique em “Pares de chaves”. Você precisará criar um par de chaves para usar mais adiante e poder logar na sua instância de forma segura.

  2. Clique no botão “Criar par de chaves” e na página seguinte digite um nome para identificar o seu cluster.

Em relação ao formato do arquivo, por hora basta saber que se você estiver usando Linux ou macOS, você provavelmente usuará a chave no formato pem para acessar o terminal remoto do cluster via SSH. Se você for utilizar o PuTTY no Windows, então selecione o formato ppk. Mas não se preocupe com os detalhes agora, apenas escolha o tipo de chave de acordo com o seu sistema operacional.

Se funcionar, o seu navegador fará o download da chave privada para a sua máquina. Guarde este arquivo em um local seguro, pois ele será a chave para logar na sua instância.

  1. Em seguida, expanda a seção “Serviços” no lado esquerdo da barra escura no alto da página e clique em EMR na seção “Análise de Dados”. Se não conseguir encontrar, clique no campo de busca no alto da região e digite “EMR” e clique no primeiro item da lista.
  1. Clique em “Criar cluster”.

  2. Dê um nome sugestivo para o seu cluster ou faça como eu e batize sua nova instância com o nome de algum aglomerado de estrelas, porque soa legal pra caramba :)

  3. Mantenha todas as opções que vêm de fábrica, especialmente a “Pasta do S3”.

  4. “Modo de execução” dependerá da finalidade da sua instância. A opção “Execução da etapa” encerra sua instância quando o job tiver finalizado, o que pode ser uma opção econômica se você souber o que está fazendo. Mas para a maioria dos casos, sobretudo no que diz respeito a testes e análises exploratórias, é recomendado deixar a opção “Cluster” selecionada.

  5. Selecione a versão mais atual da Configuração de software e como pacote de aplicativos selecione Spark.

  6. Em “Configuração do hardware”, mantenha o valor de fábrica (m5.xlarge). A família M de instâncias do AWS se refere ao tipo de instância multipropósito, ao passo que a família R é otimizada para trabalhos que requerem mais memória e a família C para mais CPU.

  7. No campo “Par de chaves EC2” da seção “Segurança e acesso”, selecione a o nome que você deu para o seu cluster. Isso é necessário para você poder acessar o cluster futuramente.

  8. Se você está pronto para subir arquivos para a nuvem e pretende executar alguma rotina no seu cluster, clique em “Criar cluster”. Caso contrário, é melhor deixar esta etapa para depois, pois a partir do momento em que se ativa um cluster, a Amazon começa a cobrar por hora utilizada.

Pronto! Você acaba de criar seu primeiro cluster na nuvem.

Próximo


  1. Pelo menos quando se trata de leitura sequencial. Já no modo de acesso aleatório, a memória RAM pode ser 100.000 vezes mais rápida. Veja mais em Jacob, A. (2014) The Pathologies of Big Data. ↩︎