Passo a passo de como fazer a instalação do Apache Spark em uma máquina Windows, para desenvolvimento local. Lembrando que a performance não é lá essas coisas, pois estaremos trabalhando com um singlenode, mas serve para o propósito de testes, e pequenos desenvolvimentos.

Pré Requisitos

  1. 7zip ou outro descompactador de arquivos

  2. OpenJDK 8 do Java: Amazon Corretto

  3. Interpretador Python configurado e funcional, com as bibliotecas do Jupyter Notebook instaladas.

    3.1 OBS: Certifique-se de que o seu ambiente python esteja funcionando corretamente. É possível que havendo mais de uma versão de python instalada, o comando jupyter notebook não seja reconhecido e não funcione corretamente. Você pode tentar executar o Jupyter Notebook com o comando python -m notebook, nesse caso.

Passo a passo:

  1. Crie uma pasta no C:\spark

  2. Baixe o arquivo compactado com a última versão do Apache Spark em spark.apache.org. Exemplo: spark-3.5.1-bin-hadoop3.tgz.

    2.1 Descompacte o arquivo em uma pasta, e descompacte o novo arquivo que foi criado.

    2.2 Renomeie a pasta descompactada para spark-3.5.1 e mova para que fique na estrutura c:\spark\spark-3.5.1.

  3. Baixar Winutils
  4. Colocar os arquivos baixados na etapa 3 na pasta c:\spark\hadoop\bin.

  5. Configuração das Variáveis de Ambiente

    5.1 SPARK_HOME: C:\spark\spark-3.5.1

    5.2 HADOOP_HOME: C:\spark\hadoop

    5.3 JAVA_HOME: C:\Program Files\Amazon Corretto\jdk1.8.0_412

    5.4 Editar a variável Path e adicionar as seguintes linhas:

    • %SPARK_HOME%\bin
    • %HADOOP_HOME%\bin
    • %JAVA_HOME%\bin
  6. Instalar libs python para delta e spark

    • pip install delta-spark
    • pip install findspark

Com isso, já temos um ambiente spark pronto para ser utilizado. Pode ser testado abrindo um novo notebook, e rodando o código abaixo:

from delta import configure_spark_with_delta_pip
import findspark
findspark.init()
import pyspark

spark = configure_spark_with_delta_pip(pyspark.sql.SparkSession.builder.appName("APP_NAME")).getOrCreate()

dept = [("Finance",10),("Marketing",20),("Sales",30),("IT",40)]

deptColumns = ["dept_name","dept_id"]
deptDF = spark.createDataFrame(data=dept, schema = deptColumns)
deptDF.printSchema()
deptDF.show(truncate=False)

Configuração para acesso aos arquivos no OBS Huwaei

Para configurar o acesso ao OBS no spark, devemos baixar esses dois arquivos JAR, que devem ser adicionados na pasta C:\spark\spark-3.5.1\jars.

Após esse download, devemos ajustar o arquivo de configuração, na pasta C:\spark\spark-3.5.1\conf:

  1. Copie o arquivo spark-defaults.conf.template para manter um backup, e renomeie para spark-defaults.conf.

  2. Adicione as configurações do acesso ao object storage no arquivo recém criado:

spark.sql.extensions               io.delta.sql.DeltaSparkSessionExtension
spark.sql.catalog.spark_catalog    org.apache.spark.sql.delta.catalog.DeltaCatalog
spark.hadoop.fs.obs.access.key     XXXXXXXXXXXXXXXXXXX
spark.hadoop.fs.obs.secret.key     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
spark.hadoop.fs.obs.endpoint       obs.la-south-2.myhuaweicloud.com

Com essas configurações, feche qualquer prompt de comando, e qualquer notebook que possa estar aberto, e abra uma instância nova, para recarregar essas configurações. E podemos testar o acesso com o seguinte código:

from delta import configure_spark_with_delta_pip
import findspark
findspark.init()
import pyspark

spark = configure_spark_with_delta_pip(pyspark.sql.SparkSession.builder.appName("APP_NAME")).getOrCreate()

endpoint = "obs://nome-do-meu-bucket-trusted/"
tabela = spark.read.format('parquet').load(f'{endpoint}pasta/subpasta/tabela')
tabela.printSchema()
tabela.show()

# Exemplos de criação de temp view, com spark.sql

tabela.createOrReplaceTempView('tabela')
df = spark.sql('select * from tabela')

# Exemplo de escrita e carregamento dos dados em disco
df.write.mode('overwrite').format('delta').save('file:///C:/spark/tabela')
tabela = spark.read.format('delta').load('file:///C:/spark/tabela')

Referências: