Spark Tolerante a falhas
Spark Tolerante a Falhas
Mesmo operando em um ambiente distribuído, com cada nó trabalhando de forma independente, o Spark é reconhecido pela sua capacidade de ser tolerante a falhas. Como mencionado em seções anteriores, o RDD é um dos pilares dessa resiliência. Aqui, vamos nos aprofundar em outros mecanismos que proporcionam essa robustez ao Spark:
1. Resilient Distributed Datasets (RDDs): O RDD, a pedra angular do Spark, consiste em conjuntos de dados imutáveis que são particionados e distribuídos. Cada partição é replicada, pelo menos, em duas máquinas diferentes no cluster. Assim, caso haja uma falha em um dos nós, as partições podem ser recriadas a partir das cópias presentes em outros nós.
2. Transformações Determinísticas: As ações executadas sobre os RDDs no Spark são determinísticas. Ou seja, dado um conjunto de dados e uma sequência específica de transformações, o resultado final será sempre o mesmo. Isso é crucial para a resiliência, pois, em caso de falhas em uma task, ela pode ser realocada e reexecutada em outro nó, assegurando a integridade do resultado.
3. Informações de Linhagem (Lineage): O Spark mantém um registro das transformações aplicadas a um RDD, formando sua "linhagem". Se uma partição for perdida ou corrompida, o Spark pode reconstruí-la através das operações originais realizadas nos dados primários.
4. Recuperação de Falhas: Se um nó apresentar falhas durante o processamento, o Spark pode recuperar as partições perdidas através da linhagem e redistribuir as tarefas para outros nós disponíveis.
5. Dados em Memória e Disco: O Spark pode guardar dados tanto na memória quanto no disco. Se os dados estiverem na memória e houver uma falha, o Spark pode regenerá-los a partir dos RDDs originais. Já se estiverem armazenados no disco, as partições perdidas são reprocessadas com base nas transformações anteriores.
6. Replicação de Dados: Além da replicação padrão das partições de RDDs, o Spark também permite a replicação de dados em caches ou diretamente na memória. Isso acentua a disponibilidade de dados mesmo em cenários adversos.