BigData Plataforms Flashcards
Quais são as principais características e capacidades de uma plataforma de Big Data?
Uma plataforma de Big Data é uma solução de computação integrada que combina vários sistemas de software, ferramentas e hardware para gerenciar big data.
Principais características:
- Capacidade de acomodar novas aplicações e ferramentas conforme a necessidade evolui.
- Suporte de vários formatos de dados.
- Capacidade de lidar com grandes volumes de dados, sejam streaming ou em repouso.
- Fornecimento de uma ampla gama de ferramentas para converter dados de/para diferentes formatos
- Suporte para escala (linear)
- Capacidade de implantação rápida.
- Fornecimento de ferramentas para análise de dados e criação de relatórios
Quais são as etapas principais na abordagem centrada em dados?
Desenvolvimento e Operações
- Ingestão de Dados e ETL (Extract, Transform, Load): Dados movidos das fontes de dados para a plataforma.
Armazenamento e Gestão de Dados
- Dados ingeridos são armazenados e geridos, utilizando diferentes tipos de armazenamentos e bases de dados.
Análise e Aprendizagem de Dados
- Dados processados, analisados e utilizados para criar modelos e obter insights.
- Duas ideias principais: dados em repouso vs. dados em movimento.
Relatórios e Visualização
- Padrões e insights dos dados são interpretados e apresentados para suporte à tomada de decisões.
Quais as pipelines de Big Data pelas infraestruturas distribuídas?
Data Source
Ingestion
Storage
Learning (Data Source, Ingestion, Store raw data, Data analysis, Store analytical data)
Visualization
Dá exemplos de sistemas e fontes de dados em Big Data?
Fontes de Dados:
- sensores
- ficheiros,
- base de dados
- queues, logs
Armazenamento/Banco de Dados/Data Lake:
- MongoDB
- Hadoop Distributed File System (HDFS)
- Apache Cassandra
- Amazon S3 (parte de um Data Lake)
——–
Sistemas de Processamento de Dados em Lote (Batch):
- Hadoop MapReduce
- Apache Spark Batch.
Sistemas de Processamento de Dados em Streaming:
- Apache Kafka Streams
- Apache Flink Streaming
- Spark Streaming
- Google Dataflow
Como difere a velocidade de processamento na pipeline?
Dependendo se o problema trabalha dados em tempo real ou não, as etapas de processamento variam:
Sem ser em tempo real:
(ex: transações de clientes movidas para centros de dados para fins de análise)
-> Data source, Ingestion, File Storage, Batch processing (Spark), Vidualization
Em tempo real:
(ex: Big Data como sensores rápidos e/ou dados de IoT em fluxos quase em tempo real, por exemplo, localizações de carros)
-> Data source, Message broker, Stream processing, Visualization
O que é prorgamming model?
É um programa que processa grandes volumes de uma variedade de dados, estruturados e não estruturados num ambiente paralelo e compartilhado por meio de duas tarefas sequenciais: mapear e reduzir. O Map filtra e classifica os dados enquanto reduz, divide o big data em pedaços menores. Em vez de lidar com as complexidades de sincronização e agendamento, precisamos apenas dar ao MapReduce duas funções, mapear e reduzir
MapReduce assume apenas um modelo limitado para expressar dados Hive e Pig: são dois modelos de programação adicionais no topo do MapReduce para aumentar a modelagem de dados do MapReduce com álgebra relacional e modelagem de fluxo de dados respectivamente
* Hive foi criado para emitir consultas semelhantes a SQL usando MapReduce em HDFS
* Pig foi criado para modelar programas baseados em fluxo de dados usando MapReduce
Quando utilizar MapReduce?
USAR QUANDO:
* Problemas que exigem acesso sequencial aos dados
* Arquivos muito grandes e raramente atualizados no local.
* Antecipar o crescimento dos dados
* Desejar disponibilidade de dados a longo prazo (substituição para armazenamento de longo prazo, como fitas)
* Ter muitas plataformas num único armazenamento de dados
* Alto volume de dados
* Alta variabilidade de dados
Estes problemas podem ser resolvidos com duas funções: Map e Reduce
NAO USAR QUANDO:
* Problemas em tempo real
* Problemas que exigem acesso aleatório aos dados
* Problemas onde os dados mudam frequentemente
* Pequenos conjuntos de dados
* Paralelismo a nível de tarefa
* Algoritmos avançados
* Substituição de infraestrutura
Como implementar Map Reduce?
1º Dividir os arquivos de entrada armazenados no HDFS em divisões (normalmente do tamanho de um chunk) e atribui cada divisão a um mapeador diferente Mapper
2º Executar a função map para transformar as divisões numa sequência de pares chave/valor
3º Baralhar e Ordenar:
* O mestre coleta e ordena todos os pares chave/valor por chave
* As chaves são divididas entre todas as tarefas de redução (cada redução obtém todos os valores de chave com a mesma chave)
4ºRedutor:
Executar a função redutora, uma chave por vez, e combinar todos os valores associados a essa chave de alguma forma. Ás vezes podem ser associativas e/ou comutativas. Exemplo: em vez de produzir vários pares (w, 1), (w, 1) pode-se somar e produzir apenas uma chave (w, m), ainda assim é preciso agrupar e agregar.
Quais as regras práticas a considerar ao usar MapReduce?
Determinar:
* M, o número de tarefas de mapa
* R, o número de tarefas de redução
- M deve ser maior que o número de nós
Uma tarefa de mapa para um pedaço - R é geralmente menor que M
A saída final é espalhada pelos R arquivos
Custo computacional:
Quando não considerar o tempocomputacional de MapReduce?
O tempo computacional está geralmente relacionado à movimentação de dados entre tarefas
Não deve ser considerado quando:
* O algoritmo executado por cada tarefa é muito simples, muitas vezes linear no tamanho de entrada
* A velocidade de interconexão é muito lenta quando comparada ao tempo computacional
* Mesmo que os dados estejam presentes no mesmo bloco, o tempo que leva para colocá-los na memória excede o tempo necessário para operar os dados uma vez na memória
O que é e como funciona Hadoop?
É um Open-source framework baseado no MapReduce
- É organizado numa estrutura de camadas
- Um componente, na estrutura de camadas, usa a funcionalidade ou capacidades dos componentes na camada abaixo dele
- Geralmente os componentes da mesma camada não se comunicam (e um componente nunca assume que uma ferramenta ou componente específico está acima)
Fala sobre a arquitetura de Hadoop
HDFS (Sistema de Arquivos Distribuídos do Hadoop): Unidade de armazenamento que distribui grandes conjuntos de dados em vários nós de um cluster. fornece armazenamento escalonável e confiável. (low-cost hardware). É responsável por distribuir, armazenar e recuperar informações em diferentes servidores para um processamento paralelo eficaz. Pode processar dados não estruturados e estruturados.
YARN - O Hadoop YARN fornece agendamento flexível e gerenciamento de recursos no armazenamento HDFS. Atua como gestor de cluster do Hadoop MapReduce, encarregado de implementar cargas de trabalho distribuídas. Planeia tarefas e distribui recursos de computação como memória e CPU para aplicativos. É portanto o processador e gestor de solicitações de trabalho e recursos de cluster.
MapReduce
Fala sobre o restante ecossistema de Hadoop
Giraph: construído para processar gráficos de grande escala de forma eficiente
HBase, MongoDB, Cassandra: utilizado quando dados ou tarefas de processamento não são representados de maneira fácil ou eficiente usando sistemas de arquivos clássicos. Exemplos disso incluem coleções de valores-chave ou grandes tabelas esparsas
Zookeeper: sistema de gestão centralizado para sincronização, configuração e para garantir alta disponibilidade de todas essas ferramentas.
O que é Hadoop’s HDFS?
É um modelo coerente simples
* Aplicações HDFS precisam de um modelo de acesso de gravação uma vez-leitura-muitos para arquivos
* Anexar o conteúdo ao final dos arquivos é suportado, mas não pode ser atualizado num ponto arbitrário Mover a computação é mais barato do que mover dados
* Uma computação solicitada por uma aplicação é muito mais eficiente se for executada perto dos dados em que opera
* Isso minimiza o congestionamento da rede e aumenta o rendimento geral do sistema
Portabilidade entre plataformas heterogêneas de hardware e software: O HDFS foi projetado para ser facilmente portátil de uma plataforma para outra.
Arquitetura de HDFS
O HDFS possui uma arquitetura mestre/escravo:
Expõe um namespace do sistema de arquivos e permite que os dados do usuário sejam armazenados em arquivos
- O HDFS possui um único NameNode para metadados. O NameNode é o nó mestre no HDFS que é responsável por gerenciar a estrutura do sistema de arquivos e os metadados associados:
- Mantém informações sobre os nomes dos arquivos, na
localização no diretório, e a relação entre os arquivos e
os blocos armazenados nos DataNodes (Geralmente um por cluster)
- O HDFS possui vários DataNodes para armazenamento dos dados em blocos que se comunicam com
o NameNode para receber instruções sobre como gerenciar esses
blocos. Há um DataNode por máquina no cluster.
HDFS - Partição dos dados
O particionamento de dados garante escalabilidade.
Cada arquivo é armazenado como uma sequência de blocos
* Os blocos são o menor local contínuo no disco rígido onde os dados são armazenados
* O tamanho padrão de cada bloco é 128 MB no Apache Hadoop 3
* Todos os blocos num arquivo, exceto o último bloco, são do mesmo tamanho. O último ocupa na mesma 128 MB mesmo que só se use p.e 2MB
HDFS - Replicação dos dados
A replicação garante
* Tolerância a falhas
* Localidade dos dados (mover a unidade de processamento para os dados em vez dos dados para a unidade de processamento) Uma aplicação pode especificar o número de réplicas de um arquivo
* O fator de replicação pode ser especificado no momento da criação do arquivo e pode ser alterado posteriormente
* NameNode toma todas as decisões relativas à replicação de blocos
- permite o processamento paralelo
- cada bloco 128MB fica guardado num servidor
O que é Apache Spark?
Tentativa de ultrapassar desvantagens encontradas no Hadoop MapReduce, nomeadamente no que diz respeito à velocidade computacional Principais características
* Os componentes distribuídos no cluster (executores e gerenciadores) são acessados através de uma instância SparkSession SparkSession criada que fornece um único ponto de entrada para todas as funcionalidades
* É um framework de computação em cluster distribuído de uso geral e de código aberto
* Foi concebido para grandes processamento de dados distribuído em grande escala, com foco em velocidade, flexibilidade de programação, modularidade, capacidade de processar dados quase em tempo real e análises disponíveis
* Fornece armazenamento na memória para cálculos intermediários, divididos no cluster, para que seja rápido.
- A desvantagem é o custo da grande quantidade de memória RAM necessária
Dtaa collection/API’s: Existem APIs de baixo e alto nível relacionadas a coleções (distribuídas) de dados
Conjunto de dados distribuídos resilientes (RDD)( APIs de baixo nível):
- DataFrame
- Dataset
Quais as componentes de Apache Spark?
Spark Core
Spark SQL
Spark Structured Streaming
Machine Learning MLlib
Graph Processing GraphX
Distribuição dos dados e partições
O particionamento de dados permite um paralelismo eficiente, uma vez que cada executor pode realizar trabalho em paralelo.
- Os dados físicos são divididos e distribuídos pelo armazenamento como pedaços chamados partições.
- Cada partição é tratada como um DataFrame na memória (abstração lógica de dados). Portanto, é uma coleção de linhas que fica em uma máquina física do cluster.
Se tivermos DataFrames no programa, não manipularemos (na maior parte) partições individualmente - simplesmente especificamos transformações de dados de alto nível nas partições físicas , e o Spark determina como isso acontecerá em todo o cluster.
Tanto quanto possível, a localidade dos dados deve ser buscada. Isso significa que um executor recebe preferencialmente uma tarefa que requer a leitura de uma partição mais próxima a ele na rede, a fim de minimizar a largura de banda da rede.
Transformações e ações
As operações que existem no Spark podem ser divididas em dois tipos: Transformações e ações
- Trabalho: computação paralela criada pelo driver, consistindo em múltiplas tarefas que são geradas em resposta a ações, por exemplo, salvar -Estágio: cada trabalho é dividido em conjuntos menores de tarefas chamados estágios, que dependem uns dos outros
- Tarefa: única unidade de trabalho ou execução a ser enviada a um executor Spark (uma tarefa por núcleo)
As estruturas de dados principais são imutáveis, ou seja, não podem ser alteradas após a criação. Mas podemos obter um novo DataFrame, mas com alterações
Transformações: são instruções para o Spark retornar um DataFrame novo, mas alterado. Eles transformam um DataFrame num novo sem alterar os dados originais
(Spark espera que digamos tudo o que temos que fazer para depois ordenar as operações, otimizando o código) - Lazy Evaluation
A tolerância a falhas, além da replicação de dados entre os nós do cluster, também é alcançada devido à linhagem no contexto da lazy evaluation(registros transformações) e imutabilidade de dados entre transformações O estado original pode ser reproduzido reproduzindo a linhagem registrada