Cuando se ejecuta Apache Spark, ¿cuánta RAM se necesita generalmente en el clúster por nodo Spark?

Todo depende de la aplicación que esté ejecutando y de cómo esté codificada.

Por ejemplo, una aplicación simple de WordCount no usa mucha RAM, ya que cada tarea lee el fragmento de HDFS (predeterminado: 128 MB) y lo procesa sobre la marcha.

Por otro lado, las aplicaciones de aprendizaje automático normalmente almacenan en caché los RDD en la memoria con estructuras complejas con muchos punteros, lo que significa que necesitará más RAM a menos que desee tener muchos derrames de la memoria al disco. También cuenta el tipo de estructuras que utiliza (por ejemplo, el uso de objetos pequeños o una matriz de Ints en lugar de una lista vinculada). Tenga en cuenta que Java devora su memoria cuando usa estructuras costosas de memoria, así que trate de mantenerlo simple.

Yo diría que la mejor manera es iniciar su aplicación y usar la interfaz de usuario de Spark para ver su progreso, y si obtiene errores de memoria o se derrama mucho en el disco, aumente la memoria. Si los dimensiona demasiado grande, obtendrá una recolección de basura más larga y consumirá sus recursos más rápidamente.

Aquí se explica cómo acceder a la interfaz de usuario de Spark.

Monitoreo e Instrumentación

Como de costumbre, depende, pero en el caso de Spark, que sabe cómo usar la memoria, le daría tanta memoria como sea razonable para una sola JVM. Mi estadio es de 10GB.

Más de lo que originalmente piensas. A veces mucho más.

Claramente depende mucho del sistema, pero en mi pequeña experiencia es bastante fácil salir de la excepción de memoria.