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á.
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
-