Trabalhando com grandes quantidades de dados Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica e Informática – CEEI Departamento de Sistemas e Computação – DSC Disciplina: TECC – Analise de Dados 2 Período: Professores: Andrey Brito, Leandro Balby
Nas última aulas Exploração dos dados e estatística descritiva Coleta Pré-processamento Sumarização Análise Interpretação Est. Descritiva: Como resumir conjuntos de números? Box plots, scatter plots Médias/medianas/moda, dispersão (variância, faixa), distribuição (histograma) Amostragem
Nas última aulas O primeiro problema: Exercitar a exploração (usando R como ferramenta) Antes disso, uma breve introdução sobre computação na nuvem
Problema 2: introdução a Big Data Ferramentas de big data 1.Usando a Cloud: criar uma imagem com Hadoop local, ao ser instanciada, essa imagem monta um volume (que poderia ter alguns dados), lista o conteúdo do volume e faz um upload da listagem para o Swift 1.Resultado: uma imagem/snapshot, um apontador para o Swift com os resultados e um relatório com o que foi feito 2.Usando Hadoop localmente: uma análise usando MapReduce 1.Resultado: relatório com os dados de entrada, código MapReduce e os dados de saída 3.Submetendo uma tarefa MapReduce no Sahara 1.Relatório: Escalabilidade? Comparação com R?
O que é Cloud Computing (aka. Computação na nuvem)? Uma forma de oferecer recursos de TI que permite que usuários comprem recursos... Sob demanda; De forma automática; Com uma granularidade adequada às suas necessidades; Cuja utilização será medida de forma acurada; (Exemplos de recursos: espaço de armazenamento, capacidade de executar tarefas, capacidade de comunicação)
O que é Cloud Computing (aka. Computação na nuvem)? Uma forma de oferecer recursos de TI que permite que usuários comprem recursos... Sob demanda; Só são adquiridos quando necessário De forma automática; Não envolve negociações entre humanos (De certa forma) Rapidamente adquiridos Com uma granularidade adequada às suas necessidades; Você compra um recurso na quantidade adequada Não compra um servidor inteiro, não compra um disco inteiro Cuja utilização será medida de forma acurada; É possível medir armazenamento, transferências “em bytes” É possível medir processamento em tempo de CPU (mais sobre isso depois...)
Por que cloud computing? Se fala muito nisso, é uma moda? Vai passar? O que alguém poderia ganhar com isso? Você não se preocupa em montar a infraestrutura Você não se preocupa em manter a infraestrutura Você não se preocupa em dimensionar a infraestrutura
Por que cloud computing? Se fala muito nisso, é uma moda? Vai passar? Por que é útil! Reduz custo! Cobrança mais justa; maior confiabilidade; Você tem um gerador elétrico próprio? O que alguém poderia ganhar com isso? Você não se preocupa em montar a infraestrutura Comprar equipamentos, esperar chegarem, instalá-los Você não se preocupa em manter a infraestrutura Quando alguma coisa quebra, quando o técnico vem? Quanto tempo dura? Quanto custa? Você não se preocupa em dimensionar a infraestrutura Superdimensionado? Subdimensionado? Não seria justo falar de infraestrutura como um item só!
Modelos de implantação Participantes: consumidores, provedores e clientes Consumidores: compram recursos computacionais Provedores: vendem recursos Clientes: usam serviços dos consumidores (podem ser eles mesmos os consumidores finais) Implantação física no provedor Nuvem privada Nuvem comunitária Nuvem pública Nuvem híbrida
Modelos de implantação Participantes: consumidores, provedores e clientes Implantação física no provedor Nuvem privada Todos os consumidores estão vinculados à mesma organização Uma empresa grande pode lucrar com a provisão de um serviço de nuvem Nuvem comunitária Um conjunto de organizações compartilham a nuvem Nuvem pública Consumidores não tem vínculos com os provedores Qualquer um pode se tornar um usuário Nuvem híbrida Combina caraterísticas da nuvem pública com características da nuvem privada
Modelos de implantação Fonte:
Modelos de implantação (2) Características comuns Dependem do bom funcionamento da rede Usuários têm pouco controle da localização exata do recurso As cargas são balanceadas de forma transparente Todos os usuários estão sujeitos ao problemas de compartilhamento de máquinas Perigo de erros de segurança no servidor Segurança: controle e visibilidade Quem pode acessar o quê? Recursos são remotos, proteção precisa usar tecnologias de rede Redes virtuais privadas (Virtual Private Network – VPN) Firewall
Problemas com a nuvem (2013) Dropbox 10/01 – 16 h: usa a Amazon mas a culpa não teria sido dela 30/05 – 1,5 h: sem explicação Facebook 28/01 – 3 h: Aparentemente um problema de DNS 18/05 – 1 h: sem justificativa Bing, 02/02 – 2 h: manutenção programada teria dado errado Microsoft Azure Storage, 22/02 – +12 horas: certificado expirado Google drive 18/03 – 17 h: problemas no software controle de rede (balanceamento) 10/07 – 1 h: (vários serviços) sem explicação AWS 25/08 – 1h: problema em um dispositivo de rede 13/09 – 2h: problemas de rede
Modelos de serviço Até agora consideramos que a cloud oferece “recursos” O que podem ser estes recursos? Infraestrutura: máquinas, discos e ligações com a Internet (virtuais) Processamento, armazenamento, comunicação Infraestrutura como um serviço: IaaS (Infrastructure as a Service) Plataformas: ambientes que rodam aplicações Java, Go, MapReduce (ou até Matlab, R) Plataforma como um serviço: PaaS (Platform as a Service) Software: um sistema pronto para usar (primeiro modelo!) Google Docs, Webmail Sofware como um Serviço: SaaS (Software as a Service)
Responsabilidades Fonte:
IaaS – Infraestructure as a Service O consumidor acessa máquinas virtuais (VM) é disponibilizadas No caso de VMs Linux: programas podem ser instalados via linha de comando remota (SSH) No caso de Windows: pode ser usada uma conexão de desktop remoto (RDP) Componentes (no provedor) Gerenciador de nuvem (portal para o consumidor) Gerenciador de cluster (lida com pedidos de alocação) Supervisor (gerencia as VMs em um servidor físico)
Exemplo – Repassando o risco/custo Fonte: M. Armbrust, A. Fox, R. Griffith et. al. Above the Clouds: A Berkeley View of Cloud Computing. Relatório técnico. Fevereiro, Eixo vertical: recursos Eixo horizontal: tempo
IaaS (Infrastucture as a Service) Infraestrutura como um serviço Máquinas (virtuais) alugadas na hora (ou até no minuto) Seu sistema operacional, acesso remoto total, configure como queira Principais provedores Amazon Web Services (AWS) Microsoft Azure RackSpace Exemplo de custo AWS: 8 CPUs, 32 GB de RAM, disco sob-demanda US$ (US$ no mercado “oportunista” e US$ 0,277 se for hora fechada) Azure: 8 CPUs, 14 GB, 240 GB de disco US$ 0,376 (US$ 1 se for com 56 GB de RAM)
PaaS O usuário cria aplicações online ou faz o upload da sua aplicação Não se preocupa com detalhes da plataforma Não se preocupa com detalhes de execução (VMs, escalabilidade) Componentes Consumidor recebe um ambiente para o desenvolvimento e gerência da aplicação e um ambiente de execução As vezes, tudo funciona via Web (nada a ser instalado pelo desenvolvedor ou pelo cliente) Mas um problema é que isso pode significar dificuldade de migração (sem portabilidade) Administração centralizada pelo consumidor
PaaS – Plataforma as a Service Plataforma como um serviço Ambientes de execução já configurados Não é preciso lidar com a instalação e configuração das máquinas Exemplos para processamento de dados ElasticMapReduce e Kinesis (AWS) HDInsight (Microsoft) Managed Cloud BigData (RackSpace) Custos semelhantes ao da infraestrutura utilizada, porém menos controle IDC estima que até 2020, 40% da processamento de Big Data será em nuvens públicas
Usando o potencial da nuvem
Rodando aplicações na nuvem Você tem uma aplicação rodando no seu laptop... O que você precisa para usar a nuvem?
Rodando aplicações na nuvem Você tem uma aplicação rodando em seu laptop O que você precisa? Identificar uma imagem (de SO) que seja compatível com sua aplicação (ou cria-la) Alugar uma VM que caiba toda a aplicação, passando a imagem que você escoheu Transferir sua aplicação e dos dados
Vantagens Se sua máquina ficar pequena para a aplicação, só precisa de um reboot Em períodos que você não precisa da aplicação, você pode pausá-la e depois continua-la Fazer backup é tão simples quanto fazer um snapshot de sua máquina virtual Snapshot = cópia do disco, armazenada separadamente na nuvem (normalmente replicado), que pode ser usado para disparar outras máquinas
O que pode ser feito de diferente, melhor?
Antes de continuar... Componentes básicos da cloud... Instâncias: VMs com armazenamento local, não persistente Armazenamento de bloco: discos persistentes que podem ser “montados” por uma VM, podem ser depois desmontados e montados em outra Armazenamento de objeto: armazenamento de blocos de dados que não são modificados (inseridos, removidos, sobrescritos) Redes: controlam quem fala com quem, incluindo redes privadas, VPNs, load-balancers
O que pode ser feito de diferente? Modelo tradicional Aplicações têm alta disponibilidade (talvez 99.9%, 8h46 min/ano) Hardware precisa ter altíssima disponibilidade ($$$$, RAID, fontes redundantes, switches e placas redundantes,...) Máquinas menores ou maiores (scale up), bem configuradas Modelo “cloud/gado/rebanho” Infraestrutura barata (“shit happens”) Aplicações com alta disponibilidade Muitas máquinas (scale out) Tanto faz usar 1 máquina por 10h ou 10 máquinas por 1h
Outro exemplo interessante: oportunismo Uma VM muito grande, com 36 processadores e 244 GB de RAM, custa R$ 25/hora O mercado de leilão (spot): a maior parte do tempo, desde que sem garantias, você consegue ela por R$ 2,50/hora Mas você pode perder a qualquer momento A aplicação de processamento tem que gerenciar as perdas Mais barato que a energia que você gastaria se tivesse uma máquina física de graça
O que vem a seguir? Computação na nuvem na prática OpenStack – middleware para nuvens privadas Criando e acessando VMs Criaremos contas para vocês Passamos tutoriais de como usar os serviços Depois, vocês exercitam Como criar e configurar uma VM (Linux) Como usar o armazenamento de bloco Como usar o armazenamento de objeto Como fazer uma análise estilo big data, mas com poucos dados
Processando Big Data
Como dividir o processamento de dados? 3 formas básicas… Dividir os itens a serem processados Dividir o trabalho de processamento de um item Também pode usar um estilo “linha de produção” (algo intermediário)
Decomposição do domínio (dos dados) Baseado em: Intel Software College Introduction to Parallel Programming with Java
Decomposição da tarefa Baseado em: Intel Software College Introduction to Parallel Programming with Java
Linha de produção (pipeline) Baseado em: Intel Software College Introduction to Parallel Programming with Java
Hadoop É uma ferramenta de processamento de lote Você escreve um programa qualquer no modelo de programação Entrega o programa e os dados E ela executa o programa para você O modelo de programação é o MapReduce Restringe a organização dos seus programas Qualquer algoritmo pode ser implementado nele Mas alguns seriam muito ineficientes, ou seja... Na prática, restringe o tipo de algoritmo Mas graças a isso consegue cuidar dos bastidores por você Se encaixa bem com o modelo de decomposição dos dados e de linha de produção
MapReduce (MR) O que o usuário faz? Especifica seleção/filtragem/transformação Especifica a agregação O que a ferramenta faz? Cria trabalhadores e instanciá-los remotamente Particiona e distribui a entrada Comunica dados intermediários, busca resultados Monitora máquinas e lida com falhas
Modelo de programação Map(chave, valor) (chave’, valor’) Recebe uma chave de entrada e um valor Produz um ou mais pares Bom para: desagregar, filtrar, transformar, converter Reduce(chave, lista de valores) (chave, valor’) Recebe uma chave de entrada e uma lista de valores Produz um (ou nenhum) par Chave é frequentemente a mesma e o valor é uma agregação de todos os valores da lista Bom para: agregar resultados parciais
Exemplo Contar palavras em um grande conjunto de dados Por que? Porque é simples Porque é a base para muitas outras operações Correção ortográfica usa palavras e termos frequentes Otimização para queries frequentes, tradução Identificação de padrões, predição Escalabilidade e eficiência aparente podem ter uma relação estranha…
Contando palavras – Pseudocódigo map(chave k, valor v) { // v’ é um “tokenizer”, por exemplo, criado a partir de v foreach p in v’: emit(p, 1); } reduce(chave k, valor [] lista) { int sum; foreach v in lista: sum += v; emit(k, sum); }
Exemplo de execução Vamos considerar 3 trabalhadores (workers) Cada trabalhador recebe um arquivo de entrada Arquivo 1: isto é um teste Arquivo 2: testando o hadoop Arquivo 3: testando com um teste
Exemplo de execução Vamos considerar 3 trabalhadores (workers) Cada trabalhador recebe um arquivo de entrada Arquivo 1: isto é um teste Arquivo 2: testando o hadoop Arquivo 3: testando com um teste
Saída do Map Worker 1: (isto 1), (é 1), (um 1), (teste 1). Worker 2: (testando 1), (hadoop 1). Worker 3: (testando 1), (com 1), (um 1), (teste 1).
Entrada do Reduce Reduce 1: (isto,[1]) Reduce 2: (é, [1]) Reduce 3: (testando, [1,1]) Reduce 4: (um, [1, 1]) Reduce 5: (Hadoop, [1]) Reduce 6: (com, [1]) Reduce 7: (teste, [1,1])
Saída do Reduce Reduce 1: – (isto 1) Reduce 2: – (é 1) Reduce 3: – (testando 2) Reduce 4: – (um 2) Reduce 5: – (Hadoop 1) Reduce 6: – (com 1) Reduce 7: – (teste 2)
Escalabilidade e eficência do código podem ter uma relação estranha: contar palavras assim parece ineficiente, mas escala.
Depois... Hadoop HDFS MapReduce Lembra daquele slide sobre paralelização? Outros... (Pig, Hive, Spark) Sahara Spark