Instalação e configuração do conector Spark

São com suporte várias versões do conector; no entanto, a Snowflake recomenda fortemente o uso da versão mais recente do conector. Para as informações de lançamento da última versão, consulte as Notas sobre o lançamento do conector Spark (link na barra lateral).

As instruções neste tópico podem ser usadas para instalar e configurar todas as versões com suporte do conector.

Neste tópico:

Versões com suporte

O Snowflake suporta múltiplas versões do conector:

Versões do conector:

2.x

Versões Spark com suporte:

Spark 3.4, 3.3, 3.2

Versões Scala com suporte:

Scala 2.13, 2.12

Nome da fonte de dados:

net.snowflake.spark.snowflake — v2.4.14 (ou superior) do conector permite snowflake como o nome da fonte de dados

Nome do pacote (para classes importadas):

net.snowflake.spark.snowflake

Distribuição de pacotes:

Página do conector Snowflake para Spark no repositório central Maven

Código fonte:

spark-snowflake (GitHub): . master (para última versão), . previous_spark_version (para versões anteriores)

As notas do desenvolvedor para as diferentes versões são hospedadas com o código fonte.

Nota

O conector do Snowflake para Spark geralmente suporta as três versões mais recentes do Spark. Baixe uma versão do conector que seja específica para sua versão do Spark.

Por exemplo, para usar a versão 2.12.0 do conector com versão Spark 3.4, baixe a versão 2.12.0-spark_3.4 do conector.

Requisitos

Para instalar e usar o Snowflake com o Spark, você precisa do seguinte:

  • Um sistema operacional com suporte. Para uma lista dos sistemas operacionais com suporte, consulte Suporte ao sistema operacional.

  • Conector do Snowflake para Spark

  • Driver Snowflake JDBC (a versão compatível com a versão do conector).

  • Ambiente Apache Spark, seja auto-hospedado ou hospedado em qualquer um de:

  • Além disso, é possível usar um bucket Amazon S3 dedicado ou um contêiner de armazenamento de blobs do Azure como zona de preparação entre os dois sistemas; entretanto, isto não é necessário com a versão 2.2.0 (e superior) do conector, que usa um estágio interno temporário do Snowflake (por padrão) para toda a troca de dados.

  • A função usada na conexão precisa de privilégios USAGE e CREATE STAGE no esquema que contém a tabela que você lerá ou gravará.

Nota

Se você estiver usando o Databricks ou Qubole para hospedar o Spark, não será necessário baixar ou instalar o conector do Snowflake para Spark (ou qualquer um dos outros requisitos). Tanto o Databricks como o Qubole integraram o conector para fornecer conectividade nativa.

Para obter mais detalhes, consulte:

Verificação da versão do driver ou conector OCSP

O Snowflake usa OCSP para avaliar a cadeia de certificados ao fazer uma conexão com o Snowflake. A versão do driver ou conector e sua configuração determinam o comportamento OCSP. Para obter mais informações sobre a versão do driver ou conector, sua configuração e comportamento OCSP, consulte Configuração do OCSP.

Download e instalação do conector

As instruções nesta seção pertencem à versão 2.x e superior do Conector do Snowflake para Spark.

Importante

O Snowflake lança periodicamente novas versões do conector. As seguintes tarefas de instalação devem ser realizadas cada vez que você instala uma nova versão. Isto também se aplica ao driver Snowflake JDBC, que é um pré-requisito para o conector Spark.

Etapa 1: Baixar a versão mais recente do Conector do Snowflake para Spark

O Snowflake fornece múltiplas versões do conector. Baixe a versão apropriada, com base no seguinte:

  • A versão do Conector do Snowflake para Spark que você deseja usar.

  • A versão do Spark que você está usando.

  • A versão do Scala que você está usando.

Você pode baixar o Conector do Snowflake para Spark do Maven. Se você quiser criar o driver, pode acessar o código-fonte a partir do Github.

Repositório central Maven

O Snowflake fornece artefatos em pacotes separados para cada versão do Scala com suporte (2.12 e 2.13). Para cada uma destas versões do Scala, o Snowflake fornece diferentes versões do conector Spark, bem como artefatos separados que suportam diferentes versões do Spark.

Para baixar o conector do Spark:

  1. Procure no repositório Maven a versão do Scala que você está usando:

    A seguinte captura de tela fornece um exemplo da página de resultados da pesquisa:

    Snowflake Connector for Spark download page in Maven

    A coluna Latest Version lista a última versão disponível do driver.

    Os pacotes individuais utilizam a seguinte convenção de nomenclatura:

    N.N.N-spark_P.P
    
    Copy

    onde:

    • N.N.N é a versão do Snowflake (por exemplo, 2.12.0).

    • P.P é a versão do Spark (por exemplo, 3.4).

    Por exemplo:

    2.12.0-spark_3.4
    
    Copy
  2. Se você não vê o artefato para a versão com suporte do Spark que está usando, clique no link all sob a coluna Latest Version.

  3. Baixe o arquivo JAR clicando no link jar na coluna Download.

  4. Se você planeja verificar a assinatura do pacote, precisa baixar o arquivo de assinatura também.

    1. Clique no link N.N.N-spark_P.P na coluna Version para exibir a página da versão.

    2. Clique no link net.snowflake : spark-snowflake_x.xx : N.N.N-spark_P.P para carregar a página que lista os artefatos daquela versão (onde x.xx é a versão do Scala que você planeja usar – por exemplo, 2.12).

    3. Clique no link spark-snowflake_2.1x-N.N.N-spark_P.P.jar.asc para baixar o arquivo de assinatura.

GitHub

O código-fonte do Conector do Snowflake para Spark está disponível no GitHub. Entretanto, os pacotes compilados não estão disponíveis no GitHub. Você pode baixar os pacotes compilados do Maven.

Etapa 2: Baixar a versão compatível do driver Snowflake JDBC

Em seguida, você precisa baixar a versão do driver Snowflake JDBC que é compatível com a versão do Conector do Snowflake para Spark que você está usando.

O driver Snowflake JDBC é fornecido como um pacote Java padrão através da página do driver JDBC no repositório central Maven. Você pode baixar o pacote como um arquivo .jar ou pode fazer referência direta ao pacote. Estas instruções consideram que você está fazendo referência ao pacote.

Para encontrar a versão com suporte do driver Snowflake JDBC para a versão do Conector do Snowflake para Spark que você está usando, consulte Notas de lançamento de Snowflake Connector for Spark.

Para obter mais detalhes sobre como baixar e instalar o driver Snowflake JDBC, consulte Download/integração do driver JDBC.

Etapa 3 (opcional): Verificar a assinatura do pacote do Conector do Snowflake para Spark

Para verificar a assinatura do pacote do Conector do Snowflake para Spark:

  1. A partir do servidor de chaves públicas, baixe e importe a chave pública do Snowflake GPG para a versão do Conector do Snowflake para Spark que você está usando:

    • Para a versão 2.11.1 e superior:

      $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 630D9F3CAB551AF3
    • Para a versão 2.8.2 a 2.11.0:

      $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 37C7086698CB005C
    • Para a versão 2.4.13 até 2.8.1:

      $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys EC218558EABB25A1
    • Para a versão 2.4.12 e inferior:

      $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 93DB296A69BE019A

    Nota

    Se esse comando falhar com o seguinte erro:

    gpg: keyserver receive failed: Server indicated a failure
    
    Copy

    depois especifique que você deseja usar a porta 80 para o servidor de chaves:

    gpg --keyserver hkp://keyserver.ubuntu.com:80  ...
    
    Copy
  2. Execute o comando gpg --verify para verificar a assinatura do pacote.

    Para o sinalizador de linha de comando --verify, especifique o arquivo .asc que você baixou anteriormente como o arquivo de assinatura e o arquivo JAR como o arquivo contendo os dados assinados.

    $ gpg --verify spark-snowflake_x.xx-N.N.N-spark_P.P.jar.asc spark-snowflake_x.xx-N.N.N-spark_P.P.jar
    gpg: Signature made Wed 22 Feb 2017 04:31:58 PM UTC using RSA key ID <gpg_key_id>
    gpg: Good signature from "Snowflake Computing <snowflake_gpg\ @snowflake.net>"
    
    Copy

    onde:

    • x.xx é a versão do Scala (por exemplo, 2.12).

    • N.N.N é a versão do conector do Snowflake para Spark (por exemplo, 2.12.0).

    • P.P é a versão do Spark (por exemplo, 3.4).

    Nota

    A verificação da assinatura produz um aviso semelhante ao seguinte:

    gpg: Signature made Mon 24 Sep 2018 03:03:45 AM UTC using RSA key ID <gpg_key_id>
    gpg: Good signature from "Snowflake Computing <snowflake_gpg@snowflake.net>" unknown
    gpg: WARNING: This key is not certified with a trusted signature!
    gpg: There is no indication that the signature belongs to the owner.
    
    Copy

    Para evitar o aviso, você pode conceder confiança implícita à chave pública GPG do Snowflake.

  3. Seu ambiente local pode conter múltiplas chaves GPG. Entretanto, por razões de segurança, o Snowflake alterna periodicamente a chave pública GPG. Nossa prática recomendada é excluir a chave pública existente depois de confirmar que a última chave funciona com o último pacote assinado. Por exemplo:

    $ gpg --delete-key "Snowflake Computing"
    
    Copy

Etapa 4: Configurar o cluster Spark local ou ambiente Spark hospedado no Amazon EMR

Se você tiver uma instalação do Spark local, ou uma instalação do Spark no Amazon EMR, precisa configurar o programa spark-shell para incluir tanto o driver Snowflake JDBC quanto o Conector Spark:

  • Para incluir o driver Snowflake JDBC, use a opção --package para fazer referência ao pacote JDBC da página do driver JDBC no Repositório central Maven, fornecendo a versão exata do driver que deseja usar (por exemplo, net.snowflake:snowflake-jdbc:3.13.30).

  • Para incluir o Conector Spark, use a opção --package para fazer referência ao pacote apropriado (Scala 2.12 ou `Scala 2.13`__) hospedado no Repositório central Maven, fornecendo a versão exata do driver que você deseja usar (por exemplo, net.snowflake:spark-snowflake_2.12:2.12.0-spark_3.4).

Por exemplo:

spark-shell --packages net.snowflake:snowflake-jdbc:3.13.22,net.snowflake:spark-snowflake_2.12:2.12.0-spark_3.4
Copy

Instalação de pacotes adicionais (se necessário)

Dependendo de sua instalação do Spark, alguns pacotes requeridos pelo conector podem estar faltando. Você pode adicionar pacotes ausentes à sua instalação usando o sinalizador apropriado para spark-shell:

  • --packages

  • --jars (se os pacotes foram baixados como arquivos .jar)

Os pacotes necessários estão listados abaixo, com a sintaxe (incluindo o número da versão) para usar o sinalizador --packages para fazer referência aos pacotes:

  • org.apache.hadoop:hadoop-aws:2.7.1

  • org.apache.httpcomponents:httpclient:4.3.6

  • org.apache.httpcomponents:httpcore:4.3.3

  • com.amazonaws:aws-java-sdk-core:1.10.27

  • com.amazonaws:aws-java-sdk-s3:1.10.27

  • com.amazonaws:aws-java-sdk-sts:1.10.27

Por exemplo, se os pacotes Apache estiverem faltando, para adicionar os pacotes por referência:

spark-shell --packages org.apache.hadoop:hadoop-aws:2.7.1,org.apache.httpcomponents:httpclient:4.3.6,org.apache.httpcomponents:httpcore:4.3.3
Copy

Preparação de um local externo para arquivos

Talvez seja necessário preparar um local externo para os arquivos que você deseja transferir entre o Snowflake e o Spark.

Esta tarefa é necessária se uma das seguintes situações for verdadeira:

  • Você executará trabalhos que levam mais de 36 horas, que é a duração máxima do token utilizado pelo conector para acessar o estágio interno para troca de dados.

  • A versão do Conector do Snowflake para Spark é 2.1.x ou anterior (mesmo se seus trabalhos exigirem menos de 36 horas).

    Nota

    Se você não estiver usando a versão v2.2.0 (ou superior) do conector, a Snowflake recomenda fortemente a atualização para a versão mais recente.

Preparação de um bucket AWS S3 externo

Prepare um bucket S3 externo que o conector possa usar para trocar dados entre o Snowflake e o Spark. Você então fornece ao conector as informações de localização, juntamente com as credenciais necessárias da AWS para a localização. Para obter mais detalhes, consulte Autenticação do S3 para troca de dados no próximo tópico.

Importante

Se você usar um bucket S3 externo, o conector não remove automaticamente nenhum dado intermediário/temporário deste local. Como resultado, é melhor usar um bucket ou caminho específico (prefixo) e definir uma política de ciclo de vida para o bucket/caminho para limpar automaticamente os arquivos mais antigos. Para obter mais detalhes sobre a configuração de uma política de ciclo de vida, consulte a documentação do Amazon S3.

Preparação de um contêiner de armazenamento de blobs do Azure

Prepare um contêiner de armazenamento de blobs do Azure externo que o conector possa usar para trocar dados entre o Snowflake e o Spark. Você então fornece ao conector as informações de localização, juntamente com as credenciais do Azure necessárias para a localização. Para obter mais detalhes, consulte Autenticação do Azure para troca de dados no próximo tópico.