spark – Arruda – Data Consulting https://modelo6.augustomello.com.br Tue, 10 Sep 2024 08:02:08 +0000 pt-BR hourly 1 https://wordpress.org/?v=6.8.3 https://modelo6.augustomello.com.br/wp-content/uploads/2025/08/cropped-Logo-Arruda-Consulting-2025-Picto-1b-32x32.png spark – Arruda – Data Consulting https://modelo6.augustomello.com.br 32 32 Como acessar os dados do seu Lakehouse? https://modelo6.augustomello.com.br/como-acessar-os-dados-do-seu-lakehouse/ https://modelo6.augustomello.com.br/como-acessar-os-dados-do-seu-lakehouse/#respond Tue, 10 Sep 2024 08:02:08 +0000 https://arrudaconsulting.com.br/?p=5715 Bom, na semana passada tivemos mais uma Live dos Sparkanos, e dessa vez com um Hand-ons de 2 horas de Apache Spark.

E uma das dúvidas que surgiram, foi entender como o cliente acessa esses dados, uma vez que processamos os dados com o Spark.

Para facilitar o entendimento vou deixar um tutorial abaixo desde a ingestão dos dados na camada bronze utilizando o Jupyter Notebook e como acessar os dados via Trino.

Então neste exemplo iremos acessar os dados de duas maneiras:

  • Jupyter utilizando Pyspark.
  • Trino utilizando Querys SQL.


Na nossa Arquitetura acima, temos as nossas camadas bronze, silver e gold armezando todos os nossos dados em formato Delta, aproveitando toda a integração entre Spark & Delta, como por exemplo:

  • Time Travel.
  • ACID.
  • CDF.

Bom vamos lá…

Ao criar um novo Notebook iremos começar pelas configurações do Spark e também do Minio que é aonde armazenamos os nossos dados neste projeto dos Sparkanos.

import pyspark
from pyspark.sql import SparkSession
import logging
spark = SparkSession.builder \
.appName("ELT Full Postgres to Landing AdventureWorks") \
.config("spark.hadoop.fs.s3a.endpoint", "http://minio:9000") \
.config("spark.hadoop.fs.s3a.access.key", "chapolin") \
.config("spark.hadoop.fs.s3a.secret.key", "mudar@123") \
.config("spark.hadoop.fs.s3a.path.style.access", True) \
.config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") \
.config("spark.hadoop.fs.s3a.aws.credentials.provider", "org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider") \
.config("hive.metastore.uris", "thrift://metastore:9083") \
.config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
.config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") \
.getOrCreate()

Agora iremos ler os dados do Minio


E aqui começamos a ler os dados no Jupyter.


Agora iremos gravar os dados desta tabela na camada bronze


Ingestão dos dados feita com sucesso na camada bronze


Agora iremos acessar esses dados via SQL utilizando o Trino, no Dbeaver.

E para acessarmos esses dados precisamos criar os metadados e depois mapear a nossa tabela com o diretório que se encontra os nossos dados:

Comandos SQL no Trino

— Criando os metadados no Hive

CREATE SCHEMA hive.bronze WITH (location=‘s3a://bronze/’)

CREATE SCHEMA hive.silver WITH (location=‘s3a://silver/’)

CREATE SCHEMA hive.gold WITH (location=‘s3a://gold/’)

— Criando a Tabela no Trino

call delta.system.register_table (

schema_name => ‘bronze’,

table_name => ‘person_address’,

table_location => ‘s3a://bronze/person_address/delta_table’

);

— Consultando a tabela person_addres.

select * from delta.bronze.person_address

E agora já conseguimos analisar os dados via SQL


E aqui poderíamos fazer joins com outras tabelas, filtrar dados, agrupar dados basicamente utilizando SQL.

Então nessa arquitetura utilizamos o Spark para processamento dos dados, porém para analisar os dados podemos utilizar basicamente SQL.

E uma vez que os dados chegam no Trino, podemos conectar diversas Ferramentas de Dataviz como: Power BI, Tableau, Qlik e claro as versões Open Sources como Superset e Metabase.

Espero que este artigo tenha te ajudado a entender melhor a sequência e como integramos Spark, Minio e Trino para implementar um Pipeline de dados Robusto e altamente escalável.

Caso queira aprender mais sobre Apache Spark, recentemente fizemos uma Aula de 2 horas de Hand-ons.

Link Aula

Muito Obrigado e até o próximo Artigo.

Rafael Arruda

]]>
https://modelo6.augustomello.com.br/como-acessar-os-dados-do-seu-lakehouse/feed/ 0
O que é o Apache Spark? https://modelo6.augustomello.com.br/o-que-e-o-apache-spark/ https://modelo6.augustomello.com.br/o-que-e-o-apache-spark/#respond Sun, 02 Jun 2024 13:49:50 +0000 https://arrudaconsulting.com.br/?p=5581 logo Spark

Apache Spark é um framework open source para computação distribuída, capaz de processar grandes conjuntos de dados.

E o que é computação distribuída?

A computação distribuída é a forma encontrada de conectar diversos computadores e dividir o processamento entre as máquinas, ou seja, é possível dividir uma grande tarefa em pequenas etapas no seu conjunto de máquinas, no final ele junta todos os pedaços e entrega o processamento completo.

Onde ele pode ser encontrado?

Ele pode ser utilizado em plataformas de dados como o Databricks, Microsoft Fabric, Google Colab, localmente ou como serviço gerenciado nas principais clouds.

Quais empresas utilizam o Spark? 

O cenário ideal para trabalhar com o Spark é o cenário de Big Data, ou seja, organizações que possuem grandes volumes de dados, tais como: Pic Pay, Bradesco, Ifood, dentre outras.

Fonte: https://www.databricks.com/br/customers

O Spark oferece suporte a várias linguagens de programação, incluindo Scala, Java, Python, SQL e R, tornando-o a uma das ferramentas mais utilizadas para processamento de dados. Podemos ver a seguir exemplos de scripts com a finalidade de fazer apenas um “hello world”:

Pyspark – Versão Python para Spark

Linguagem Scala – Linguagem nativa do Spark

Apesar de ser suportado em várias linguagens com a possibilidade de transitar entre elas no mesmo mesmo script, as linguagens mais utilizadas no Spark são Python e SQL. No início a adoção dessas linguagens eram baixas por conta da perfomance que era superior em sua linguagem nativa (Scala), mas hoje não há diferença significativa na maioria dos casos e a perfomance é basicamente a mesma em todas as linguagens.

O Spark foi amplamente adotado no cenário de Big Data por conta das suas principais características, tais como:

  1. Computação em Memória: O Spark permite que os dados sejam armazenados em memória, o que agiliza o acesso e o processamento dos dados. Isso é especialmente útil para operações iterativas e análises interativas que requerem acesso rápido aos dados.
  2. Suporte a Diversos Workloads: O Spark é projetado para suportar uma ampla variedade de workloads, incluindo processamento em batch, streaming, machine learning, processamento de grafos e consultas interativas. Isso o torna uma ferramenta versátil para diferentes tipos de aplicativos de big data.
  3. Escalabilidade: O Spark é altamente escalável e pode ser facilmente dimensionado horizontalmente para lidar com grandes volumes de dados. Ele distribui automaticamente o processamento e os dados em um cluster de computadores, permitindo que ele cresça conforme a demanda.

Essas características fazem do Apache Spark uma escolha popular para empresas e organizações que lidam com grandes volumes de dados e buscam uma solução eficiente e escalável para processamento e análise de big data.

Casos de uso

Os scripts podem ser utilizados basicamente em dois formatos, tais como:

1 – Modo submit

2 – Modo de notebook

Obrigado e até o próximo artigo!

Wallace Camargo.

]]>
https://modelo6.augustomello.com.br/o-que-e-o-apache-spark/feed/ 0
O que é o formato Delta e quais as vantagens de usar com o Spark https://modelo6.augustomello.com.br/o-que-e-o-formato-delta-e-quais-as-vantagens-de-usar-com-o-spark/ https://modelo6.augustomello.com.br/o-que-e-o-formato-delta-e-quais-as-vantagens-de-usar-com-o-spark/#respond Wed, 24 Apr 2024 15:51:11 +0000 https://arrudaconsulting.com.br/?p=5603

Imagem retirada do site: https://delta.io/

O formato Delta foi desenvolvido para possibilitar na construção de um Lakehouse através do Spark.

Um Lakehouse também pode ser construído em outros formatos e abaixo podemos ver os principais:

  1. Delta Lake: Delta Lake é uma camada de armazenamento de dados open-source construída sobre o Apache Spark e permite que os usuários construam data lakes escaláveis e confiáveis. Ele fornece transações ACID (Atomicidade, Consistência, Isolamento e Durabilidade) para operações de leitura e gravação, além de oferecer funcionalidades como versionamento de dados, operações de merge, e otimização de consultas para análise em tempo real e batch.
  2. Apache Hudi: Apache Hudi (Hadoop Upserts Deletes & Incrementals) é outra opção open-source para gerenciar dados em data lakes. Ele fornece uma camada de abstração sobre o armazenamento de dados distribuído, permitindo operações de ingestão e atualização de dados em grande escala, suportando tanto dados batch quanto em tempo real. Hudi também oferece funcionalidades de gerenciamento de esquemas, indexação e otimização de consultas.
  3. Apache Iceberg: Apache Iceberg é um formato de tabela para armazenamento de dados em data lakes que foi projetado para oferecer escalabilidade e consistência. Ele fornece recursos como versionamento de dados, suporte a transações ACID, particionamento eficiente e otimizações de leitura para consultas analíticas de alto desempenho.

Para entender mais sobre um Lakehouse, recomendamos o artigo:

 

O tipo de armazenamento escolhido por quem utiliza Spark é geralmente o Delta já que aparentemente é uma combinação quase perfeita como “Queijo e Goiabada”. As tabelas Delta tem diversos benefícios, conforme podemos observar na imagem e uma das favoritas pela comunidade é a possibilidade de fazer “time travel”, isto é , voltar no tempo caso seja necessário com a versão da tabela. Em um banco de dados relacional, operações de update sem where pode ter uma alta complexidade na recuperação destes dados, mas com o Delta é realmente bem simples com esta feature.

Abaixo vamos observar algumas das principais features encontradas no formato Delta:

 

Acid transaction

Todas as propriedades de um banco de dados ACID, tais como:

Atomicidade, Consistência, Integridade e Durabilidade.

Time Travel

Possibilidade de voltar uma tabela no tempo, por data ou por versão de forma bem simplificada, caso seja necessário.

Open Source

Tipo de armazenamento que você pode aplicar em qualquer data lake sem custo de licenciamento.

Batch/Streaming unificado

Possibilidade de escrever batch e streaming na mesma tabela

Schema Evolution

Possibilidade de evoluir o schema de uma tabela de forma automatizada.

Auditoria

Possibilidade de rastrear todas as operações na tabela (insert, update e delete).

 

Muito Obrigado.

Até o Próximo Artigo!

 

 

]]>
https://modelo6.augustomello.com.br/o-que-e-o-formato-delta-e-quais-as-vantagens-de-usar-com-o-spark/feed/ 0
O que é um Delta Lake / Lakehouse https://modelo6.augustomello.com.br/o-que-e-um-delta-lake-lakehouse/ https://modelo6.augustomello.com.br/o-que-e-um-delta-lake-lakehouse/#respond Sat, 13 Apr 2024 07:20:40 +0000 https://arrudaconsulting.com.br/?p=5599 A história do armazenamento

Imagem oficial da Databricks

 

Na história do armazenamento, houveram algumas mudanças até chegarmos no que hoje chamamos de Lakehouse que une o melhor do mundo do Data Warehouse com o Data Lake.

O Data Warehouse é um sistema de armezamento aplamente conhecido no mundo do Business Intelligence que tem o propósito de armazenar de forma estruturada dados geralmente de banco de dados relacionais, porém com o a necessidade de armazenar dados de outras fontes e formatos, foi necessário a adoção de um novo paradigma como o data Lake. O grande problema do Data Lake foi justamente a falta de um controle maior nos dados e com essa finalidade nasceu o Lakehouse que tem propriedades de um Data Warehouse e ao mesmo tempo flexibilidade de um Data Lake.

  • Data Warehouse: Um data warehouse é um sistema de armazenamento centralizado que é projetado para armazenar e analisar grandes volumes de dados históricos de várias fontes. Ele é otimizado para consultas e análises complexas e é geralmente organizado em um modelo dimensional ou modelo em estrela, o que facilita a análise de negócios. Os dados em um data warehouse são geralmente estruturados e são extraídos, transformados e carregados (ETL) de várias fontes de dados para fornecer insights para tomada de decisões em uma organização.

 

  • Data Lake: Um data lake é um repositório de armazenamento centralizado que permite armazenar todos os tipos de dados brutos e não processados em sua forma original. Isso inclui dados estruturados, semiestruturados e não estruturados, como logs de servidores, arquivos de texto, vídeos, imagens, etc. Os dados em um data lake são armazenados em seu formato original e são acessíveis para análise posterior. Um data lake é geralmente usado para explorar dados, descobrir padrões e insights, e é muitas vezes associado com análises avançadas, como análise de big data e machine learning.

 

  • Lakehouse: Lakehouse é um conceito que combina as vantagens de um data lake e de um data warehouse. Ele propõe uma abordagem unificada para armazenar, gerenciar e analisar dados, onde os dados brutos são armazenados em um data lake em seu formato original, mas também são tratados e organizados como tabelas para consultas SQL e análises analíticas. Isso significa que, em um lakehouse, os dados brutos podem ser consultados usando SQL, similar a um data warehouse, mas também são mantidos em seu formato original, permitindo flexibilidade e escalabilidade. Esta abordagem visa superar as limitações tradicionais dos data warehouses, como custos de armazenamento e rigidez no esquema, ao mesmo tempo em que preserva as capacidades analíticas e de governança.

 

Em resumo, um data warehouse é projetado para armazenar dados estruturados e otimizar consultas analíticas, um data lake é um repositório para armazenar todos os tipos de dados brutos em sua forma original, enquanto um lakehouse combina aspectos de ambos, fornecendo um ambiente unificado para armazenar e analisar dados brutos e estruturados.

Muito Obrigado e até o próximo artigo!!

]]>
https://modelo6.augustomello.com.br/o-que-e-um-delta-lake-lakehouse/feed/ 0