avatarJosue Luzardo Gebrim

Summary

Este texto fornece uma visão geral do Apache Spark e sua integração com o Kubernetes, destacando as vantagens e as empresas que utilizam essa combinação.

Abstract

O Apache Spark é uma ferramenta poderosa, rápida, escalável, flexível e fácil de usar para processamento de dados em larga escala. O Kubernetes é uma plataforma de orquestração de contêineres de código aberto que permite gerenciar, escalar e automatizar a implantação de aplicativos em contêineres em um ambiente de nuvem. A combinação do Spark e Kubernetes tem sido amplamente adotada por empresas e organizações em todo o mundo para processar grandes volumes de dados em tempo real. O texto também discute a instalação e utilização do Spark no Kubernetes utilizando o Operator, que amplia as funcionalidades do Spark no Kubernetes.

Bullet points

  • O Apache Spark é uma ferramenta poderosa, rápida, escalável, flexível e fácil de usar para processamento de dados em larga escala.
  • O Kubernetes é uma plataforma de orquestração de contêineres de código aberto que permite gerenciar, escalar e automatizar a implantação de aplicativos em contêineres em um ambiente de nuvem.
  • A combinação do Spark e Kubernetes tem sido amplamente adotada por empresas e organizações em todo o mundo para processar grandes volumes de dados em tempo real.
  • O texto discute a instalação e utilização do Spark no Kubernetes utilizando o Operator, que amplia as funcionalidades do Spark no Kubernetes.
  • O Operator espera um arquivo de configuração, que pode ser criado a partir de um exemplo fornecido no texto.
  • O texto também discute a utilização do Argo para deploy dos Jobs Spark no Kubernetes.
  • O texto inclui referências para mais informações sobre o Apache Spark, o Kubernetes e a combinação das duas tecnologias.
Photo by Theo Eilertsen Photography on Unsplash

Spark no Kubernetes do Jeito Simples! :)

Execute seu Job PySpark no k8s!

Esse texto tem como objetivo resumir oque é, para que server e como utilizar com algumas dicas sobre o Spark no Kubernetes.

Apache Spark?

O Apache Spark é um motor de processamento distribuído que permite processar grandes conjuntos de dados em um cluster de computadores. Ele foi desenvolvido na Universidade da Califórnia, em Berkeley, em 2009, e posteriormente foi doado para a Apache Software Foundation, tornando-se um projeto de código aberto.

Algumas de suas principais características incluem:

  • Suporte a diferentes fontes de dados, como HDFS, HBase, Cassandra, S3, entre outros.
  • Capacidade de processar dados em tempo real e em lotes.
  • Suporte a diferentes linguagens de programação, como Java, Scala, Python e R.
  • Capacidade de processar dados em memória, o que pode acelerar consideravelmente o processamento de grandes volumes de dados.
  • API extensível, permitindo a adição de novos módulos e funcionalidades.

O Apache Spark faz tanto sucesso na área de dados por causa de suas várias vantagens em relação a outras ferramentas de processamento de dados em larga escala. Algumas das razões pelas quais o Spark é tão popular incluem:

  • Velocidade: O Spark foi projetado para ser rápido, especialmente para processamento de dados em larga escala. Ele usa técnicas como processamento em memória e execução distribuída para acelerar o processamento de grandes volumes de dados.
  • Escalabilidade: O Spark é altamente escalável e pode ser executado em um cluster de computadores, permitindo que ele processe grandes volumes de dados de forma eficiente.
  • Flexibilidade: O Spark é flexível e pode processar uma ampla variedade de dados, incluindo dados estruturados e não estruturados, além de suportar várias fontes de dados.
  • Facilidade de uso: O Spark é fácil de usar e oferece APIs em várias linguagens de programação, como Java, Scala, Python e R. Além disso, ele tem uma ampla variedade de bibliotecas e ferramentas que simplificam o processamento de dados.
  • Ecossistema: O Spark tem um amplo ecossistema de ferramentas e bibliotecas, o que facilita o processamento de dados em diferentes cenários.
  • Suporte à análise de dados em tempo real: O Spark tem suporte nativo à análise de dados em tempo real, permitindo que ele processe e analise dados em tempo real em um cluster distribuído.
  • Custo-benefício: O Spark é uma ferramenta de código aberto, o que significa que é gratuito para uso e oferece uma alternativa de baixo custo para outras ferramentas de processamento de dados em larga escala.
  • Compatibilidade: O Spark é compatível com vários sistemas de armazenamento de dados, incluindo Hadoop Distributed File System (HDFS), Cassandra e Amazon S3, o que facilita a integração com outras ferramentas de análise de dados.

O Spark é popular porque é uma ferramenta poderosa, rápida, escalável, flexível e fácil de usar para processamento de dados em larga escala. Ele tem um ecossistema vasto de ferramentas e bibliotecas e é uma alternativa acessível a outras ferramentas de processamento de dados em larga escala.

Kubernetes?

Kubernetes é uma plataforma de orquestração de contêineres de código aberto que foi desenvolvida pela Google e doada para a Cloud Native Computing Foundation (CNCF) em 2015. O Kubernetes permite gerenciar, escalar e automatizar a implantação de aplicativos em contêineres em um ambiente de nuvem.

Entre as principais características do Kubernetes, podemos destacar:

  • Capacidade de gerenciar a infraestrutura em contêineres de forma distribuída.
  • Escalabilidade horizontal e vertical dos aplicativos em contêineres.
  • Capacidade de automatizar a implantação, atualização e monitoramento de aplicativos em contêineres.
  • Flexibilidade para executar aplicativos em contêineres em diferentes ambientes de nuvem, como AWS, GCP e Azure, entre outros.

O Kubernetes tem sido amplamente utilizado por empresas e organizações que desejam automatizar a implantação e o gerenciamento de aplicativos em contêineres. Isso porque o Kubernetes oferece uma maneira eficiente e escalável de implantar e gerenciar aplicativos em contêineres em ambientes de nuvem.

Como o Spark recebeu suporte para ser utilizado no kubernetes?

A história do suporte do Apache Spark para o Kubernetes remonta a 2015, quando o Google doou o projeto Kubernetes para a Cloud Native Computing Foundation (CNCF). O Kubernetes é um projeto de código aberto que fornece um ambiente para o gerenciamento de contêineres em escala de produção. Como o Spark é uma das principais ferramentas para o processamento de dados em larga escala, houve interesse em executar o Spark em um ambiente de contêiner.

Em 2016, o Google e a empresa de tecnologia chinesa Huawei anunciaram um projeto conjunto para executar o Spark no Kubernetes. O projeto visava tornar mais fácil para os usuários executar o Spark em um ambiente de contêiner e para tornar o Kubernetes uma plataforma mais robusta para o processamento de dados em larga escala.

Desde então, houve muitos desenvolvimentos no suporte do Spark para o Kubernetes. Em 2018, a empresa de tecnologia americana Databricks anunciou o suporte do Spark para o Kubernetes em sua plataforma de análise de dados na nuvem. Em 2019, o suporte do Spark para o Kubernetes foi incluído no Apache Spark 2.4, tornando-se oficialmente um recurso do Spark.

Atualmente, o Spark no Kubernetes é amplamente utilizado por empresas e organizações que desejam executar aplicativos Spark em contêineres em ambientes de nuvem. O Spark no Kubernetes oferece várias vantagens, incluindo escalabilidade, elasticidade, flexibilidade, isolamento de aplicativos e baixo custo.

Por quer utilizar o Spark no Kubernetes?

Existe várias razões para utilizar o Apache Spark no Kubernetes. Algumas delas são:

  • Escalabilidade: O Kubernetes fornece recursos de dimensionamento automático para os Jobs Spark(fluxo de dados), permitindo que eles cresçam ou encolham de acordo com a demanda.
  • Elasticidade: O Kubernetes pode provisionar e desprovisionar recursos automaticamente de acordo com a necessidade do cluster Spark.
  • Flexibilidade: O Kubernetes permite que o Spark seja executado em qualquer infraestrutura, incluindo nuvens públicas, privadas e híbridas.
  • Eficiência: O Spark pode ser executado como um serviço no Kubernetes, economizando tempo e recursos na implantação e gerenciamento.
  • Isolamento: O Kubernetes fornece um ambiente isolado para o Spark, garantindo que ele não afete outros aplicativos em execução no cluster.
  • Facilidade de gerenciamento: O Kubernetes facilita o gerenciamento do ciclo de vida do Spark, incluindo o provisionamento, a atualização e a desativação.
  • Compatibilidade: O Kubernetes é compatível com as principais distribuições do Spark, como Apache Spark, Databricks e Cloudera.
  • Integração: O Kubernetes pode ser integrado com outras ferramentas do ecossistema do Spark, como o Hadoop Distributed File System (HDFS), o Apache Kafka e o Apache Hive.
  • Baixo custo: O Kubernetes pode ajudar a reduzir os custos de infraestrutura, permitindo que os aplicativos Spark sejam executados em uma nuvem pública mais barata como na AWS utilizando instâncias Spot no EKS.
  • Agilidade: O Kubernetes permite que o Spark seja implantado e gerenciado rapidamente, permitindo que as equipes de desenvolvimento e análise de dados sejam mais ágeis e produtivas.

Empresa que utilizam o Spark no Kubernetes

Para saber mais:

Como utilizar o Spark no Kubernetes?

Agora que entendemos oque é o Spark e o Kubernetes, como o Spark recebeu suporte e quais empresas estão utilizando, vamos a pratica e para isso temos duas formas:

  • Cluster Spark

Criar um cluster Spark a partir de imagens Docker disponibilizadas pela Apache e utilizando de operações de “SUBMIT” executar nossos fluxos de dados.

Essa é uma possibilidade extremamente problemática, aonde se perde a possibilidade de utilizar os recursos de elasticidade do kubernetes e torna o Spark sujeito a muitos cenários de falhas e reprocessamento de dados.

  • Spark Operator

Utilizar um controlador específico para aplicações Saprk que amplia as funcionalidades do Spark no Kubernetes, ou seja, fazer uso de um “Operator” que a partir de um arquivo( YAML) de configuração conseguir provisionar o cluster spark para executar nosso fluxo de dados a partir de uma imagem Docker customizada.

Essa é forma mais eficiente em uso dos recursos do kubernetes pelo Spark como a possibilidade de escalar de forma horizontal o processamento de dados e criar pontos de “checkpoint” em casos de falha.

Existem muitos Operators, nesse exemplo, vamos utilizar o que foi criado pelo Google e tem sido mantido por uma grande comunidade de contribuidores e muitas empresas de diferentes setores:

Instalação:

Com o Helm instalado, execute os seguintes comando abaixo no seu terminal:

helm repo add spark-operator https://googlecloudplatform.github.io/spark-on-k8s-operator

helm install my-release spark-operator/spark-operator --namespace spark-operator --create-namespace

Para saber mais:

Utilização:

O Operator espera um arquivo de configuração, esse é um exemplo para um JOB PySpark que fara o calculo do PI:

apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:
  name: pyspark-pi
  namespace: default
spec:
  type: Python
  pythonVersion: "3"
  mode: cluster
  image: "gcr.io/spark-operator/spark-py:v3.1.1"
  imagePullPolicy: Always
  mainApplicationFile: local:///opt/spark/examples/src/main/python/pi.py
  sparkVersion: "3.1.1"
  restartPolicy:
    type: OnFailure
    onFailureRetries: 3
    onFailureRetryInterval: 10
    onSubmissionFailureRetries: 5
    onSubmissionFailureRetryInterval: 20
  driver:
    cores: 1
    coreLimit: "1200m"
    memory: "512m"
    labels:
      version: 3.1.1
    serviceAccount: spark
  executor:
    cores: 1
    instances: 1
    memory: "512m"
    labels:
      version: 3.1.1

Para fazer o Operator executar essas configurações utilize o comando abaixo:

kubectl apply -f file.yaml

Caso você não queira calcular o PI e sim executar sua pipeline, basta criar uma imagem a partir da imagem do Google e alterar o arquivo YAML de configurações para utilizar sua imagem Docker:

Exemplo de Dockerfile:

FROM gcr.io/spark-operator/spark-py:v3.1.1

# caso vc utilize alguma lib  python além do spark
RUN pip install -r requirements.txt

# Copie seu job para dentro da imagem docker
COPY project_python_folder FOLDER/project_python_folder

# Sem esse linha vc vai tomra error de permissão na hr de executar
USER 1001

OBS: não esqueça de mudar o arquivo YAML para executar o sua imagem Docker customizada.

Além disso, existem outras imagens básicas que contem versões anteriores do Spark e suporte para outras linguagens como Java, R e Scala:

Se ainda não ficou claro, abaixo temos uma live em português com tutorial de como implementar o Spark no kubernetes:

Utilizando o Argo para deploy dos Jobs Spark

O Argo CD é uma ferramenta de implantação contínua que permite implantar aplicativos em um cluster Kubernetes. O Argo CD pode ser usado para implantar aplicativos Spark no Kubernetes, gerenciando o fluxo de trabalho de implantação e garantindo que as implantações sejam consistentes e confiáveis.

Para usar o Argo CD com o Spark no Kubernetes, você precisará seguir os seguintes passos:

  1. Instalar e configurar o Argo CD: o primeiro passo é instalar o Argo CD em seu cluster Kubernetes. O Argo CD pode ser instalado usando o Helm ou o kubectl. Depois de instalado, você precisará configurar o Argo CD, criando um repositório Git onde seus arquivos YAML de configuração serão armazenados.
  2. Configurar os arquivos YAML do Spark: em seguida, você precisará criar os arquivos YAML do Spark que descrevem como seus aplicativos Spark serão implantados. Esses arquivos incluem informações sobre os contêineres Spark, as configurações de ambiente, as configurações de rede e outros detalhes de configuração.
  3. Enviar os arquivos YAML para o repositório Git: depois de criar os arquivos YAML do Spark, você precisará enviá-los para o repositório Git configurado no Argo CD. Isso permite que o Argo CD gerencie os arquivos YAML e os aplique automaticamente ao seu cluster Kubernetes.
  4. Configurar o fluxo de trabalho de implantação: em seguida, você precisará configurar o fluxo de trabalho de implantação do Argo CD para seus aplicativos Spark. Isso envolve a criação de um pipeline de implantação que descreve como o Argo CD deve implantar seus aplicativos Spark.
  5. Implantar seus aplicativos Spark: finalmente, você poderá implantar seus aplicativos Spark no cluster Kubernetes usando o Argo CD. O Argo CD garantirá que as implantações sejam consistentes e confiáveis, executando verificações de integridade e rolando as implantações em caso de falha.

O uso do Argo CD com o Spark no Kubernetes pode ajudar a simplificar e automatizar o processo de implantação de aplicativos Spark em um cluster Kubernetes, garantindo implantações consistentes e confiáveis.

O Spark no Kubernetes é uma combinação poderosa para o processamento de grandes volumes de dados em batch e em tempo real em ambientes de nuvem. O Kubernetes fornece um ambiente altamente escalável e elástico para a execução de aplicativos Spark em contêineres, permitindo que eles sejam dimensionados automaticamente de acordo com a demanda.

Além disso, com o Spark no Kubernetes temos várias vantagens, incluindo flexibilidade, facilidade de uso, eficiência, escalabilidade e compatibilidade com vários sistemas de armazenamento de dados. Isso torna o Spark no Kubernetes uma plataforma altamente flexível e poderosa para a análise de dados em tempo real em um ambiente de nuvem.

A combinação do Spark e Kubernetes tem sido amplamente adotada por empresas e organizações em todo o mundo para processar grandes volumes de dados em tempo real. Com sua escalabilidade, elasticidade e capacidade de processar dados em memória, o Spark no Kubernetes é uma solução ideal para as necessidades de processamento de dados em larga escala das empresas.

Portanto, podemos esperar que essa combinação de tecnologias continue a desempenhar um papel importante no processamento de dados em larga escala em ambientes de nuvem.

Referências:

# Obrigado por sua leitura, compartilhe esse post, por favore! :)

Apache Spark
Kubernetes
Dataops
K8s
Etl
Recommended from ReadMedium