

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Etapa 2: Configurar o Apache Cassandra Spark Connector
<a name="spark-tutorial-step2"></a>

O Apache Spark é uma plataforma de computação de uso geral que você pode configurar de diferentes maneiras. Para configurar o Spark e o Spark Cassandra Connector para integração com o Amazon Keyspaces, recomendamos que você comece com as configurações mínimas descritas na seção a seguir e depois aumente-as posteriormente, conforme apropriado para sua workload.
+ **Crie tamanhos de partição do Spark menores que 8 MBs.**

  No Spark, as *partições* representam um bloco atômico de dados que pode ser executado paralelamente. Quando você está gravando dados no Amazon Keyspaces com o Spark Cassandra Connector, quanto menor a partição do Spark, menor a quantidade de registros que a tarefa gravará. Se uma tarefa do Spark encontrar vários erros, ela falhará depois que o número designado de novas tentativas for esgotado. Para evitar a repetição de tarefas grandes e o reprocessamento de muitos dados, mantenha o tamanho da partição do Spark pequeno. 
+ **Use um número baixo de gravações simultâneas por executor com um grande número de novas tentativas.**

  O Amazon Keyspaces retorna erros de capacidade insuficiente aos drivers do Cassandra como tempos limite de operação. Você não pode resolver os tempos limite causados pela capacidade insuficiente alterando a duração do tempo limite configurado porque o Spark Cassandra Connector tenta repetir as solicitações de forma transparente usando a `MultipleRetryPolicy`. Para garantir que as novas tentativas não sobrecarreguem o pool de conexões do driver, use um número baixo de gravações simultâneas por executor com um grande número de novas tentativas. O código snippet a seguir é um exemplo disso.

  ```
  spark.cassandra.query.retry.count = 500
  spark.cassandra.output.concurrent.writes = 3
  ```
+ **Divida o throughput total e distribua-o em várias sessões do Cassandra.**
  + O Cassandra Spark Connector cria uma sessão para cada executor do Spark. Pense nessa sessão como a unidade de escala para determinar o throughput necessário e o número de conexões necessárias.
  + Ao definir o número de núcleos por executor e o número de núcleos por tarefa, comece baixo e aumente conforme necessário.
  + Defina as falhas de tarefas do Spark para permitir o processamento em caso de erros transitórios. Depois de se familiarizar com as características e os requisitos de tráfego do seu aplicativo, recomendamos definir um valor limitado para `spark.task.maxFailures`.
  + Por exemplo, a configuração a seguir pode lidar com duas tarefas simultâneas por executor, por sessão:

    ```
    spark.executor.instances = configurable -> number of executors for the session.
    spark.executor.cores = 2 -> Number of cores per executor.
    spark.task.cpus = 1 -> Number of cores per task.
    spark.task.maxFailures = -1
    ```
+ **Desative o processamento em lotes.**
  +  Recomendamos que você desative o processamento em lotes para melhorar os padrões de acesso aleatório. O código snippet a seguir é um exemplo disso.

    ```
    spark.cassandra.output.batch.size.rows = 1 (Default = None)
    spark.cassandra.output.batch.grouping.key = none (Default = Partition)
    spark.cassandra.output.batch.grouping.buffer.size = 100 (Default = 1000)
    ```
+ **Defina `SPARK_LOCAL_DIRS` como um disco local rápido com espaço suficiente.**
  + Por padrão, o Spark salva os arquivos de saída do mapa e os conjuntos de dados distribuídos resilientes (RDDs) em uma pasta. `/tmp ` Dependendo da configuração do seu host Spark, isso pode resultar em erros do estilo *falta de espaço no dispositivo*. 
  + Para definir a variável de ambiente `SPARK_LOCAL_DIRS` para um diretório chamado `/example/spark-dir`, você pode usar o comando a seguir. 

    ```
    export SPARK_LOCAL_DIRS=/example/spark-dir
    ```