Cómo instalar Apache Spark en Ubuntu 22.04

Apache Spark es un motor de procesamiento de datos gratuito, de código abierto y de uso general, utilizado por los científicos de datos para realizar consultas de datos extremadamente rápidas sobre una gran cantidad de datos. Utiliza un almacén de datos en memoria para almacenar las consultas y los datos directamente en la memoria principal de los nodos del clúster. Ofrece API de alto nivel en los lenguajes Java, Scala, Python y R. También es compatible con un rico conjunto de herramientas de nivel superior, como Spark SQL, MLlib, GraphX y Spark Streaming.

Este post te mostrará cómo instalar el motor de procesamiento de datos Apache Spark en Ubuntu 22.04.

Requisitos previos

  • Un servidor que ejecute Ubuntu 22.04.
  • Una contraseña de root configurada en el servidor.

Instalar Java

Apache Spark se basa en Java. Por tanto, Java debe estar instalado en tu servidor. Si no está instalado, puedes instalarlo ejecutando el siguiente comando:

apt-get install default-jdk curl -y

Una vez instalado Java, verifica la instalación de Java mediante el siguiente comando:

java -version

Obtendrás la siguiente salida:

openjdk version "11.0.15" 2022-04-19
OpenJDK Runtime Environment (build 11.0.15+10-Ubuntu-0ubuntu0.22.04.1)
OpenJDK 64-Bit Server VM (build 11.0.15+10-Ubuntu-0ubuntu0.22.04.1, mixed mode, sharing)

Instalar Apache Spark

En el momento de escribir este tutorial, la última versión de Apache Spark es Spark 3.2.1. Puedes descargarla utilizando el comando wget:

wget https://dlcdn.apache.org/spark/spark-3.2.1/spark-3.2.1-bin-hadoop3.2.tgz

Una vez finalizada la descarga, extrae el archivo descargado utilizando el siguiente comando:

tar xvf spark-3.2.1-bin-hadoop3.2.tgz

A continuación, extrae el fiel descargado al directorio /opt:

mv spark-3.2.1-bin-hadoop3.2/ /opt/spark

A continuación, edita el archivo .bashrc y define la ruta del Apache Spark:

nano ~/.bashrc

Añade las siguientes líneas al final del archivo:

export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

Guarda y cierra el archivo y, a continuación, activa la variable de entorno Spark mediante el siguiente comando:

source ~/.bashrc

A continuación, crea un usuario dedicado para ejecutar Apache Spark:

useradd spark

A continuación, cambia la propiedad de /opt/spark al usuario y grupo spark:

chown -R spark:spark /opt/spark

Crear un archivo de servicio Systemd para Apache Spark

A continuación, tendrás que crear un archivo de servicio para gestionar el servicio Apache Spark.

En primer lugar, crea un archivo de servicio para el maestro Spark utilizando el siguiente comando:

nano /etc/systemd/system/spark-master.service

Añade las siguientes líneas:

[Unit]
Description=Apache Spark Master
After=network.target

[Service]
Type=forking
User=spark
Group=spark
ExecStart=/opt/spark/sbin/start-master.sh
ExecStop=/opt/spark/sbin/stop-master.sh

[Install]
WantedBy=multi-user.target

Guarda y cierra el archivo y, a continuación, crea un archivo de servicio para Spark slave:

nano /etc/systemd/system/spark-slave.service

Añade las siguientes líneas:

[Unit]

Description=Apache Spark Slave

After=network.target

[Service]
Type=forking
User=spark
Group=spark
ExecStart=/opt/spark/sbin/start-slave.sh spark://your-server-ip:7077
ExecStop=/opt/spark/sbin/stop-slave.sh

[Install]
WantedBy=multi-user.target

Guarda y cierra el archivo y vuelve a cargar el demonio systemd para aplicar los cambios:

systemctl daemon-reload

A continuación, inicia y habilita el servicio maestro de Spark mediante el siguiente comando:

systemctl start spark-master
systemctl enable spark-master

Puedes comprobar el estado del Spark master utilizando el siguiente comando:

systemctl status spark-master

Obtendrás la siguiente salida:

? spark-master.service - Apache Spark Master
     Loaded: loaded (/etc/systemd/system/spark-master.service; disabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-05-05 11:48:15 UTC; 2s ago
    Process: 19924 ExecStart=/opt/spark/sbin/start-master.sh (code=exited, status=0/SUCCESS)
   Main PID: 19934 (java)
      Tasks: 32 (limit: 4630)
     Memory: 162.8M
        CPU: 6.264s
     CGroup: /system.slice/spark-master.service
             ??19934 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -cp "/opt/spark/conf/:/opt/spark/jars/*" -Xmx1g org.apache.spark.deploy.mast>

May 05 11:48:12 ubuntu2204 systemd[1]: Starting Apache Spark Master...
May 05 11:48:12 ubuntu2204 start-master.sh[19929]: starting org.apache.spark.deploy.master.Master, logging to /opt/spark/logs/spark-spark-org>
May 05 11:48:15 ubuntu2204 systemd[1]: Started Apache Spark Master.

Cuando hayas terminado, puedes pasar al siguiente paso.

Accede a Apache Spark

En este punto, Apache Spark está iniciado y escuchando en el puerto 8080. Puedes comprobarlo con el siguiente comando:

ss -antpl | grep java

Obtendrás la siguiente salida:

LISTEN 0      4096   [::ffff:69.28.88.159]:7077            *:*    users:(("java",pid=19934,fd=256))                                                 
LISTEN 0      1                          *:8080            *:*    users:(("java",pid=19934,fd=258))  

Ahora, abre tu navegador web y accede a la interfaz web de Spark utilizando la URL http://your-server-ip:8080. Deberías ver el panel de control de Apache Spark en la siguiente página:

Ahora, inicia el servicio esclavo Spark y habilítalo para que se inicie al reiniciar el sistema:

systemctl start spark-slave
systemctl enable spark-slave

Puedes comprobar el estado del servicio esclavo Spark utilizando el siguiente comando:

systemctl status spark-slave

Obtendrás la siguiente salida:

? spark-slave.service - Apache Spark Slave
     Loaded: loaded (/etc/systemd/system/spark-slave.service; disabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-05-05 11:49:32 UTC; 4s ago
    Process: 20006 ExecStart=/opt/spark/sbin/start-slave.sh spark://69.28.88.159:7077 (code=exited, status=0/SUCCESS)
   Main PID: 20017 (java)
      Tasks: 35 (limit: 4630)
     Memory: 185.9M
        CPU: 7.513s
     CGroup: /system.slice/spark-slave.service
             ??20017 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -cp "/opt/spark/conf/:/opt/spark/jars/*" -Xmx1g org.apache.spark.deploy.work>

May 05 11:49:29 ubuntu2204 systemd[1]: Starting Apache Spark Slave...
May 05 11:49:29 ubuntu2204 start-slave.sh[20006]: This script is deprecated, use start-worker.sh
May 05 11:49:29 ubuntu2204 start-slave.sh[20012]: starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark/logs/spark-spark-org.>
May 05 11:49:32 ubuntu2204 systemd[1]: Started Apache Spark Slave.

Ahora, vuelve a la interfaz web de Spark y actualiza la página web. Deberías ver el Trabajador añadido en la siguiente página:

Ahora, haz clic en el trabajador. Deberías ver la información del trabajador en la siguiente página:

Cómo acceder a Spark Shell

Apache Spark también proporciona una utilidad spark-shell para acceder a Spark a través de la línea de comandos. Puedes acceder a ella con el siguiente comando:

spark-shell

Obtendrás la siguiente salida:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.spark.unsafe.Platform (file:/opt/spark/jars/spark-unsafe_2.12-3.2.1.jar) to constructor java.nio.DirectByteBuffer(long,int)
WARNING: Please consider reporting this to the maintainers of org.apache.spark.unsafe.Platform
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
22/05/05 11:50:46 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Spark context Web UI available at http://ubuntu2204:4040
Spark context available as 'sc' (master = local[*], app id = local-1651751448361).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 3.2.1
      /_/
         
Using Scala version 2.12.15 (OpenJDK 64-Bit Server VM, Java 11.0.15)
Type in expressions to have them evaluated.
Type :help for more information.

scala> 

Para salir de la Spark shell, ejecuta el siguiente comando:

scala> :quit

Si eres desarrollador de Python, utiliza pyspark para acceder a Spark:

pyspark

Obtendrás la siguiente salida:

Python 3.10.4 (main, Apr  2 2022, 09:04:19) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.spark.unsafe.Platform (file:/opt/spark/jars/spark-unsafe_2.12-3.2.1.jar) to constructor java.nio.DirectByteBuffer(long,int)
WARNING: Please consider reporting this to the maintainers of org.apache.spark.unsafe.Platform
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
22/05/05 11:53:17 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /__ / .__/\_,_/_/ /_/\_\   version 3.2.1
      /_/

Using Python version 3.10.4 (main, Apr  2 2022 09:04:19)
Spark context Web UI available at http://ubuntu2204:4040
Spark context available as 'sc' (master = local[*], app id = local-1651751598729).
SparkSession available as 'spark'.
>>> 

Pulsa la tecla CTRL + D para salir del intérprete de comandos Spark.

Conclusión

Enhorabuena! has instalado correctamente Apache Spark en Ubuntu 22.04. Ahora puedes empezar a utilizar Apache Spark en el entorno Hadoop. Para más información, lee la página de documentación de Apache Spark.

También te podría gustar...