¿Cómo trata Apache Spark con los datos de registro que se ejecutan en TeraBytes con memoria limitada (por ejemplo, 8 GB)?

Gracias por el A2A, como Reynold Xin y otros declararon: No todos los datos deben estar en la memoria.

Hay 2 tipos de escenario cuando se trata con datos de registro:

  • Minería de registros: en ese caso, en realidad está tratando con spark-core y spark-sql directamente en sus datos. Los datos son estáticos. Spark se ocupará de los datos por fragmentos e incluso es posible que pueda conservar estos fragmentos en el disco para su uso posterior. O incluso empuje hacia abajo los predicados para filtrar lo que no se necesita.
  • Análisis de flujo de registro: en este caso, la transmisión por chispa se unirá a los componentes citados anteriormente, pero la diferencia aquí es que usted lee una gran cantidad de datos provenientes de productores como Kafka y los procesa en lotes. Los lotes son generalmente pequeños, usted podría realizar algunos análisis de RT y escribir sus resultados en una base de datos o sistema de archivos.

Nota : La descripción anterior es una abstracción de alto nivel sobre cómo puede ver que su sistema maneje la cantidad de datos mencionados en la pregunta. No es tan obvio como podría parecer. El ajuste, las configuraciones y los puntos de control son una necesidad para que esto funcione.

Espero que esto responda a tu pregunta.

En realidad, no necesita todos los datos para caber en la memoria para usar Spark. Este es un error común sobre Spark. En realidad, puede programar Spark de una manera que le pida que transmita a través de todos sus datos sin almacenarlos en la memoria caché.

Los usuarios de Spark ejecutan constantemente trabajos cuya entrada es mucho mayor que el tamaño de la memoria agregada en un clúster.

Los cómputos se pueden dividir entre muchos trabajadores con 8 GB de memoria, y pueden caber en la memoria de todos ellos. Spark puede persistir en el disco si no hay suficiente memoria disponible. Obviamente, eso tiene implicaciones de rendimiento.

No todos los datos tienen que caber en la memoria por una variedad de razones. Una de ellas es que la mayoría de los datos de entrada se filtran y / o agregan durante las primeras etapas de procesamiento. Por ejemplo, una consulta de suma (x), entidad solo tendrá que mantener una lista de entidades con un número en la memoria. El resto simplemente se tira después del procesamiento.

Spark divide los datos en muchas particiones y luego procesa particiones individuales (hay advertencias a las que no voy a entrar aquí). A continuación, puede tener los RDD intermedios almacenados en caché en memoria + disco para que no necesite volver a calcular una partición si se elimina de la memoria. Operaciones como unir se derramarán al disco si no hay suficiente memoria. Si tiene muchas máquinas, las particiones se distribuyen entre ellas, por lo que la memoria RAM que tiene disponible es la de todas sus máquinas agregadas.