¿Cuáles son los principales componentes de Apache Spark según el párrafo?
Apache Spark requiere un gestor de clústeres y un sistema de almacenamiento distribuido. Para la gestión de clústeres, Spark es compatible con Standalone (clúster Spark nativo, en el que puedes lanzar un clúster manualmente o utilizar los scripts de lanzamiento proporcionados por el paquete de instalación. También es posible ejecutar estos demonios en una sola máquina para pruebas), Hadoop YARN, Apache Mesos o Kubernetes.  Para el almacenamiento distribuido, Spark puede interactuar con una amplia variedad, como Alluxio, Hadoop Distributed File System (HDFS), MapR File System (MapR-FS), Cassandra, OpenStack Swift, Amazon S3, Kudu, sistema de archivos Lustre, o se puede implementar una solución personalizada. Spark también admite un modo local pseudodistribuido, que normalmente se utiliza sólo para fines de desarrollo o pruebas, donde no se requiere almacenamiento distribuido y se puede utilizar en su lugar el sistema de archivos local; en tal escenario, Spark se ejecuta en una sola máquina con un ejecutor por núcleo de CPU.
Según el párrafo, un gestor de clústeres y un almacenamiento distribuido son dos componentes principales de Apache Spark. Para el gestor de clústeres, Spark admite un clúster independiente, o Hadoop YARN, Apache Mesos o Kubernetes. En cuanto al almacenamiento, Spark admite sistemas de archivos locales para desarrollo y pruebas, así como Hadoop File System, Cassandra y almacenamientos en la nube.