Com os dados tratados, é possível disponibilizar a informação através de ferramentas de visualização do tipo Self Service BI (Tableau, Qlik, PowerBI, apache superset, KIBANA entre outras), mas aí é assunto para outro post.
domingo, 21 de agosto de 2022
Datalake (Uma versão BIG DATA do DW clássico)
Com os dados tratados, é possível disponibilizar a informação através de ferramentas de visualização do tipo Self Service BI (Tableau, Qlik, PowerBI, apache superset, KIBANA entre outras), mas aí é assunto para outro post.
sexta-feira, 5 de agosto de 2022
Processamento de dados em larga escala Spark
Introdução
Chegamos a um ponto que os tradicionais bancos relacionais já não está atendendo as demandas de análise de dados. Por que digo isso? Com a popularização da Internet, advento da IOT (Internet das coisas), o volume de dados produzidos, seja de forma estruturada, não estruturada ou semi estruturada cresceu exponencialmente. Com isso foram surgindo tecnologias para suprir essas necessidades do mercado, capazes de processar grandes volumes de dados de forma paralelizada, descentralizada e distribuída e o Spark é uma alternativa criada pela a indústria para realizar esse tipo de processamento.
A solução mais conhecida e amada pelos profissionais de engenharia de dados era o Hadoop, contudo as operações realizadas através dessa solução dependem muito de operações de IO, representando um dos grandes gargalos do desempenho dos bancos de dados. O Spark resolve isso evitando essas operações, mantendo os conjuntos de dados em memória principal.
O que é?
O SPARK é um framework de código aberto para computação distribuída. Trata-se de um mecanismo que possibilita o processamento (análise) de grande volume de dados. Podemos entender a computação distribuída como um sistema que interliga vários computadores, conseguindo-se assim um grande poder de processamento. Esse conjunto de computadores é conhecido como CLUSTER e cada computador que faz parte desse conjunto é chamado de NÓ. Esse poder de processamento se torna mais eficiente se cada nó faz parte do trabalho. No Spark utiliza-se a estratégia DIVIDIR PARA CONQUISTAR.
Exemplificando, vamos supor que você tenha a tarefa de contar o número de M & M contidas em um pote. Você poderia contar sozinho (que daria muito trabalho) ou pedir ajuda de uns amigos para ajudar na contagem facilitando o trabalho. A atividade seria dividir os M & M's contidos no pote entre os amigos. Cada amigo contaria os M & M's que estão com eles e no final, você somaria as quantidades contabilizadas por você e pelos seus amigos para chegar ao resultado final. Essa é a estratégia adotada pelo Spark.
O Spark faz a divisão do conjuntos de dados, distribuindo os mesmos em estruturas conhecidas como RDD's(Resilient, Distributed, Dataset).que ficam em memória principal e são imutáveis. A cada novo processamento, novos RDD's são criados de modo a refinar o processamento para no final, o resultado pro processamento ser gravado em disco.
Spark Core é o mecanismo de execução geral da plataforma Spark sobre o qual todas as outras funcionalidades são construídas. O Spark suporta desenvolvimento em várias linguagens como Java, Scala, Python, R e SQL. Além disso existem vários módulos dedicados a diferentes tipos de aplicação, como por exemplo SparkSQL que dá suporte escrever em linguagem SQL em vez de usar a api do Spark. Tem uma módulo chamado Spark Streaming que dá suporte a processamento de dados em tempo real. Tem a biblioteca de machine learning chamada SparkML com diversos modelos para serem utilizados, além de uma mecanismo para computação Gráfica chamada GraphX. Todo esse ecossistema contribuiu para o seu crescimento acelerado e ajudou o Spark a ser um dos sistemas de processamento massivo paralelo mais usados na área de Big Data.
No caso do Python, para interagir com o Spark é utilizada uma biblioteca chamada PySpark.
Glossário do Spark
RDD (Resilient Distributed Datasets)- É a principal estrutura de dados do Spark. Um RDD é uma coleção de elementos particionada e imutável , o que significa que contém valores, e esses elementos são particionados para serem utilizados em sistemas distribuídos e não podem ser alterados. Não possuem uma estrutura de colunas e sim de linhas e exibidos como se fossem uma lista.
Spark Dataframe - Tem todas as características do RDD porém os dados estão organizados em colunas como uma tabela em um banco de dados. Foi estruturado para tornar mais fácil o processamento de grandes quantidade de dados. Apesar de estruturalmente serem diferentes, para quem conhece a estrutura de um dataframe da biblioteca de Pandas, a manipulação se torna mais fácil e por este motivo é a melhor escolha para começar a usar o PySpark. Existem algumas mudanças sutis entre o Spark dataframe e o Spark dataset que falaremos a seguir, mas o importante a saber quando estiver usando o Dataframe , estará aproveitando o formato interno otimizado pelo Spark e este formato aplica ganho de eficiência em todas as linguagens usadas pelas API's.
Spark Dataset - Eles são semelhantes aos DataFrames, mas são fortemente tipados, o que significa que o tipo é especificado na criação do DataSet e não é inferido o tipo de registros armazenados nele. Os Datasets estão disponíveis apenas para o Java Virtual Machine baseado nas linguagens Java e Scala e nele você define o tipo de dados que serão inseridos no Dataset.
Transformações- são as operações que podemos fazer em um DataFrame no Spark. É importante observar que as transformações criam novos RDDs porque, lembre-se, os RDDs são imutáveis, portanto, não podem ser alterados de depois de criados. Então as Transformações pegam um RDD como uma entrada e executam alguma operação e gera um ou mais RDDs.
Como o Spark trabalha com Lazy evaluation , conforme um compilador verifica cada transformação, ele não cria nenhum RDDs novo, mas sim uma cadeia de RDDs e os resultados dessas transformações que são armazenados no DAG ,que só serão avaliadas uma vez quando uma uma Ação é chamado. Essa cadeia de RDDs ou “filhos”, todos conectados logicamente ao RDD “pai” , é chamado de gráfico de linhagem
Ações - uma ação é qualquer operação RDD que não produz um RDD como saída. Alguns exemplos de ações comuns são fazer uma contagem dos dados, máximo ou mínimo, retornar o primeiro elemento de um RDD, etc. Como foi mencionado antes, uma ação é a mensagem para o compilador avaliar o gráfico de linhagem e retorna o valor especificado pela ação.
Gráfico de linhagem - Um gráfico de linhagem descreve o que é chamado de “plano de execução lógico”. O que isso significa é que o compilador começa com os primeiros RDDs que não dependem de nenhum outro RDD e segue uma cadeia lógica de transformações até terminar com o RDD em que uma ação é chamada. Esse recurso é principalmente o que impulsiona a tolerância a falhas do Spark. Se um nó falhar por algum motivo, todas as informações sobre o que esse nó deveria estar fazendo são armazenadas no gráfico de linhagem, que pode ser replicado em outro lugar.
Como o Spark executa uma tarefa
Você que é engenheiro de dados acabou de codificar um programa para ser executado no Spark.
Ao colocar seu programa para executar, ele será executado como conjunto independente de processos em um cluster, coordenados por um programa principal (chamado de driver ).
Especificamente, para ser executado em um cluster, o driver pode se conectar a vários tipos de gerenciadores de cluster (seja o gerenciador de cluster do Spark, Mesos ou YARN), que alocam recursos para o seu programa.
Uma vez conectado, o Spark adquire executores em nós no cluster, que na verdade são processos ficam aguardando receberem uma ordem do driver para executar cálculos e armazenam dados para seu programa. Em seguida, o Spark envia o código do seu programa para os executores. Finalmente, o driver envia tarefas para os executores executarem.
Cada programa obtém seus próprios processos executores, que permanecem ativos durante todo o programa e executam tarefas em vários threads.
O driver deve escutar e aceitar conexões de entrada de seus executores ao longo de sua vida útil e como o driver agenda tarefas no cluster, ele deve ser executado próximo aos nós de trabalho, de preferência na mesma rede local.
É importante frisar que o Spark é um dos engines de big data mantidos pela a Apache Foundation Existem outros! Hadoop, Flink, Storm, Samza.
Gostou do post? Falaremos de outras soluções de processo aqui no blog.
domingo, 24 de julho de 2022
Processo de construção de um DW
Fiz uma série de posts falando sobre BI, onde falei de conceitos e ferramentas relacionadas ao assunto. Contudo, senti falta de falar sobre o processo de construção de DW e sobre as atividades envolvidas nesse processo.
Entendo que o primeiro passo é entender o que o cliente quer, definindo quais métricas e quais descritores ele quer analisar.
Definido o objeto de estudo, é importante buscar nos sistemas transacionais, os insumos para compor o DW e verificar a forma que estes dados serão extraídos.
Com os dados em mãos, partimos para higienização dos mesmos. Neste caso, importa-se esses dados para uma área que chamados de stage, aonde realizamos transformações e enriquecimentos. Nesta hora, o auxílio de uma ferramenta de ETL ajuda bastante.
Após o tratamento dos dados, partimos para a modelagem dimensional, onde criamos as dimensões e os fatos que comporão o DW.
Feito isso, é preciso montar uma estratégia para realizar a carga das tabelas criadas. Mais uma vez uma ferramenta de ETL ou até mesmo, scripts nos ajudarão nesta tarefa.
segunda-feira, 27 de junho de 2022
Programação orientada a objetos na prática
A Programação estruturada (PE) foi o paradigma dominante na escrita de software até a chegada da programação orientada a objetos (POO). Enquanto a PE fia-se em estruturas de controle e repetição, a POO se baseia no conceito de objetos que possuem atributos (dados) e métodos (procedimentos).
Geralmente as pessoas que começaram a programar estruturado tem dificuldade de entender como programar orientado a objetos. Vejamos se eu consigo desmistificar isso através de comparações de código.
Vamos ao código estruturado
Uma versão orientada a objetos seria
Repare que toda a lógica de programação passou a ficar na classe e não no código fonte do programa principal.
A vantagem disso é impedir ao programador a cometer erros, facilitar a manutenção, visto que o código fica mais inteligível.
Com a criação de classes é possível fazer o reuso de código.
Mas se você pensa que parou por aí, não sabe de nada inocente. Conhecer os conceitos de encapsulamento, herança, polimorfismo e ainda conhecer designer paterns é essencial para programar orientado a objetos. Caso queira dar uma olhadinha nesses conceitos sugiro a você ler um post que escrevi a milênios antes de cristo.
sábado, 25 de junho de 2022
O VBScript
VBScript é uma linguagem de criação de Scripts, a qual é derivada do Visual Basic (VB) e do VBA (Visual Basic for Applications). A ideia deste Post é ensinar o VBScript para rodar scripts no lado servidor utilizando a tecnologia ASP 3.0.
Abaixo é apresentado um resumo da linguagem, materializado através de uma página ASP. Em outros post vamos falar sobre os objetos da ASP.DLL
ACTIVE SERVER PAGES (ASP)
Definição.
O ASP (de Active Server Pages), também conhecido como ASP Clássico hoje em dia, é uma estrutura de bibliotecas básicas (e não uma linguagem) para processamento de linguagens de script no lado servidor para geração de conteúdo dinâmico na Web. Exemplos de linguagens aceitas são: VBScript, JScript, PerlScript, Tcl ou Python sendo que apenas as duas primeiras são suportadas por padrão.[1], Sendo o VBScript, a linguagem de script mais utilizada pelos programadores que utilizavam essa tecnologia.
Apesar do ASP ter sido substituído pelo ASP.NET, até hoje é suportada por versões atuais do IIS e a meu ver, a Microsoft não a substituição por conta dela não ter dado certo. Ainda hoje, existem sistemas que utilizam essa tecnologia no ar.
Ele roda nativamente em Windows, através do serviço chamado de IIS (Internet Information Service) - o servidor web da Microsoft. Além disso ele pode rodar em outras plataformas, como Linux no servidor Apache quando usando um módulo de um programa como o Tomcat.
O processo
