GNU/Linux >> Tutoriels Linux >  >> Linux

Comment installer Spark sur RHEL 8

Apache Spark est un système informatique distribué. Il se compose d'un maître et d'un ou plusieurs esclaves, où le maître distribue le travail entre les esclaves, donnant ainsi la possibilité d'utiliser nos nombreux ordinateurs pour travailler sur une tâche. On pourrait deviner qu'il s'agit en effet d'un outil puissant dans lequel les tâches nécessitent de gros calculs, mais peuvent être divisées en plus petits blocs d'étapes qui peuvent être poussées vers les esclaves pour y travailler. Une fois que notre cluster est opérationnel, nous pouvons écrire des programmes à exécuter dessus en Python, Java et Scala.

Dans ce didacticiel, nous travaillerons sur une seule machine exécutant Red Hat Enterprise Linux 8 et installerons le maître et l'esclave Spark sur la même machine, mais gardez à l'esprit que les étapes décrivant la configuration de l'esclave peuvent être appliquées à n'importe quel nombre d'ordinateurs, créant ainsi un véritable cluster capable de traiter de lourdes charges de travail. Nous ajouterons également les fichiers d'unité nécessaires à la gestion et exécuterons un exemple simple sur le cluster fourni avec le package distribué pour nous assurer que notre système est opérationnel.

Dans ce didacticiel, vous apprendrez :

  • Comment installer Spark maître et esclave
  • Comment ajouter des fichiers unitaires systemd
  • Comment vérifier la réussite de la connexion maître-esclave
  • Comment exécuter un exemple de tâche simple sur le cluster

Coquille d'étincelle avec pyspark.

Configuration logicielle requise et conventions utilisées

Configuration logicielle requise et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version du logiciel utilisée
Système Red Hat Enterprise Linux 8
Logiciel Apache Spark 2.4.0
Autre Accès privilégié à votre système Linux en tant que root ou via le sudo commande.
Conventions # - nécessite que les commandes linux données soient exécutées avec les privilèges root soit directement en tant qu'utilisateur root, soit en utilisant sudo commande
$ – nécessite que les commandes linux données soient exécutées en tant qu'utilisateur normal non privilégié

Comment installer Spark sur Redhat 8 instructions étape par étape

Apache Spark s'exécute sur JVM (Java Virtual Machine), donc une installation Java 8 fonctionnelle est nécessaire pour que les applications s'exécutent. En dehors de cela, plusieurs shells sont livrés dans le colis, l'un d'eux est pyspark , un shell basé sur Python. Pour travailler avec cela, vous aurez également besoin de python 2 installé et configuré.

  1. Pour obtenir l'URL du dernier package de Spark, nous devons visiter le site de téléchargement de Spark. Nous devons choisir le miroir le plus proche de notre emplacement et copier l'URL fournie par le site de téléchargement. Cela signifie également que votre URL peut être différente de l'exemple ci-dessous. Nous allons installer le package sous /opt/ , nous entrons donc dans le répertoire en tant que root :
    # cd /opt

    Et envoyez l'URL acquise à wget pour obtenir le colis :

    # wget https://www-eu.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz
  2. Nous allons décompresser l'archive :
    # tar -xvf spark-2.4.0-bin-hadoop2.7.tgz
  3. Et créez un lien symbolique pour faciliter la mémorisation de nos chemins dans les étapes suivantes :
    # ln -s /opt/spark-2.4.0-bin-hadoop2.7 /opt/spark
  4. Nous créons un utilisateur non privilégié qui exécutera les deux applications, maître et esclave :
    # useradd spark

    Et définissez-le comme propriétaire de l'ensemble /opt/spark répertoire, récursivement :

    # chown -R spark:spark /opt/spark*
  5. Nous créons un systemd fichier unité /etc/systemd/system/spark-master.service pour le service maître avec le contenu suivant :
    [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

    Et aussi un pour le service esclave qui sera /etc/systemd/system/spark-slave.service.service avec le contenu ci-dessous :

    [Unit]
    Description=Apache Spark Slave
    After=network.target
    
    [Service]
    Type=forking
    User=spark
    Group=spark
    ExecStart=/opt/spark/sbin/start-slave.sh spark://rhel8lab.linuxconfig.org:7077
    ExecStop=/opt/spark/sbin/stop-slave.sh
    
    [Install]
    WantedBy=multi-user.target

    Notez l'URL spark en surbrillance. Ceci est construit avec spark://<hostname-or-ip-address-of-the-master>:7077 , dans ce cas, la machine de laboratoire qui exécutera le maître a le nom d'hôte rhel8lab.linuxconfig.org . Le nom de votre maître sera différent. Tous les esclaves doivent être capables de résoudre ce nom d'hôte et d'atteindre le maître sur le port spécifié, qui est le port 7077 par défaut.

  6. Avec les fichiers de service en place, nous devons demander à systemd pour les relire :
    # systemctl daemon-reload
  7. Nous pouvons démarrer notre maître Spark avec systemd :
    # systemctl start spark-master.service
  8. Pour vérifier que notre maître est en cours d'exécution et fonctionnel, nous pouvons utiliser systemd status :
    # systemctl status spark-master.service
      spark-master.service - Apache Spark Master
       Loaded: loaded (/etc/systemd/system/spark-master.service; disabled; vendor preset: disabled)
       Active: active (running) since Fri 2019-01-11 16:30:03 CET; 53min ago
      Process: 3308 ExecStop=/opt/spark/sbin/stop-master.sh (code=exited, status=0/SUCCESS)
      Process: 3339 ExecStart=/opt/spark/sbin/start-master.sh (code=exited, status=0/SUCCESS)
     Main PID: 3359 (java)
        Tasks: 27 (limit: 12544)
       Memory: 219.3M
       CGroup: /system.slice/spark-master.service
                 3359 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181.b13-9.el8.x86_64/jre/bin/java -cp /opt/spark/conf/:/opt/spark/jars/* -Xmx1g org.apache.spark.deploy.master.Master --host [...]
    
    Jan 11 16:30:00 rhel8lab.linuxconfig.org systemd[1]: Starting Apache Spark Master...
    Jan 11 16:30:00 rhel8lab.linuxconfig.org start-master.sh[3339]: starting org.apache.spark.deploy.master.Master, logging to /opt/spark/logs/spark-spark-org.apache.spark.deploy.master.Master-1[...]

    La dernière ligne indique également le fichier journal principal du maître, qui se trouve dans les logs sous le répertoire de base de Spark, /opt/spark dans notre cas. En regardant dans ce fichier, nous devrions voir une ligne à la fin similaire à l'exemple ci-dessous :

    2019-01-11 14:45:28 INFO  Master:54 - I have been elected leader! New state: ALIVE

    Nous devrions également trouver une ligne qui nous indique où l'interface Master écoute :

    2019-01-11 16:30:03 INFO  Utils:54 - Successfully started service 'MasterUI' on port 8080

    Si nous pointons un navigateur vers le port 8080 de la machine hôte , nous devrions voir la page d'état du maître, sans aucun nœud de calcul attaché pour le moment.

    Page d'état principale Spark sans nœud de calcul attaché.

    Notez la ligne d'URL sur la page d'état du maître Spark. C'est la même URL que nous devons utiliser pour chaque fichier d'unité d'esclave que nous avons créé à l'step 5 .
    Si nous recevons un message d'erreur "connexion refusée" dans le navigateur, nous devons probablement ouvrir le port sur le pare-feu :

    # firewall-cmd --zone=public --add-port=8080/tcp --permanent
    success
    # firewall-cmd --reload
    success
  9. Notre maître est en marche, nous allons lui attacher un esclave. Nous démarrons le service esclave :
    # systemctl start spark-slave.service
  10. Nous pouvons vérifier que notre esclave fonctionne avec systemd :
    # systemctl status spark-slave.service
      spark-slave.service - Apache Spark Slave
       Loaded: loaded (/etc/systemd/system/spark-slave.service; disabled; vendor preset: disabled)
       Active: active (running) since Fri 2019-01-11 16:31:41 CET; 1h 3min ago
      Process: 3515 ExecStop=/opt/spark/sbin/stop-slave.sh (code=exited, status=0/SUCCESS)
      Process: 3537 ExecStart=/opt/spark/sbin/start-slave.sh spark://rhel8lab.linuxconfig.org:7077 (code=exited, status=0/SUCCESS)
     Main PID: 3554 (java)
        Tasks: 26 (limit: 12544)
       Memory: 176.1M
       CGroup: /system.slice/spark-slave.service
                 3554 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181.b13-9.el8.x86_64/jre/bin/java -cp /opt/spark/conf/:/opt/spark/jars/* -Xmx1g org.apache.spark.deploy.worker.Worker [...]
    
    Jan 11 16:31:39 rhel8lab.linuxconfig.org systemd[1]: Starting Apache Spark Slave...
    Jan 11 16:31:39 rhel8lab.linuxconfig.org start-slave.sh[3537]: starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark/logs/spark-spar[...]

    Cette sortie fournit également le chemin d'accès au fichier journal de l'esclave (ou travailleur), qui sera dans le même répertoire, avec "travailleur" dans son nom. En vérifiant ce fichier, nous devrions voir quelque chose de similaire à la sortie ci-dessous :

    2019-01-11 14:52:23 INFO  Worker:54 - Connecting to master rhel8lab.linuxconfig.org:7077...
    2019-01-11 14:52:23 INFO  ContextHandler:781 - Started o.s.j.s.ServletContextHandler@62059f4a{/metrics/json,null,AVAILABLE,@Spark}
    2019-01-11 14:52:23 INFO  TransportClientFactory:267 - Successfully created connection to rhel8lab.linuxconfig.org/10.0.2.15:7077 after 58 ms (0 ms spent in bootstraps)
    2019-01-11 14:52:24 INFO  Worker:54 - Successfully registered with master spark://rhel8lab.linuxconfig.org:7077

    Cela indique que le travailleur est correctement connecté au maître. Dans ce même fichier journal, nous trouverons une ligne qui nous indique l'URL sur laquelle le travailleur écoute :

    2019-01-11 14:52:23 INFO  WorkerWebUI:54 - Bound WorkerWebUI to 0.0.0.0, and started at http://rhel8lab.linuxconfig.org:8081

    Nous pouvons pointer notre navigateur vers la page de statut du travailleur, où son maître est répertorié.

    Page d'état du travailleur Spark, connectée au maître.

    Dans le fichier journal du maître, une ligne de vérification doit apparaître :

    2019-01-11 14:52:24 INFO  Master:54 - Registering worker 10.0.2.15:40815 with 2 cores, 1024.0 MB RAM

    Si nous rechargeons la page de statut du maître maintenant, le travailleur devrait également y apparaître, avec un lien vers sa page de statut.

    Page d'état principale Spark avec un travailleur attaché.

    Ces sources vérifient que notre cluster est connecté et prêt à fonctionner.

  11. Pour exécuter une tâche simple sur le cluster, nous exécutons l'un des exemples fournis avec le package que nous avons téléchargé. Considérez le fichier texte simple suivant /opt/spark/test.file :
    line1 word1 word2 word3
    line2 word1
    line3 word1 word2 word3 word4

    Nous allons exécuter le wordcount.py exemple qui comptera l'occurrence de chaque mot dans le fichier. Nous pouvons utiliser le spark utilisateur, pas de root privilèges nécessaires.

    $ /opt/spark/bin/spark-submit /opt/spark/examples/src/main/python/wordcount.py /opt/spark/test.file
    2019-01-11 15:56:57 INFO  SparkContext:54 - Submitted application: PythonWordCount
    2019-01-11 15:56:57 INFO  SecurityManager:54 - Changing view acls to: spark
    2019-01-11 15:56:57 INFO  SecurityManager:54 - Changing modify acls to: spark
    [...]

    Lorsque la tâche s'exécute, une longue sortie est fournie. Vers la fin de la sortie, le résultat s'affiche, le cluster calcule les informations nécessaires :

    2019-01-11 15:57:05 INFO  DAGScheduler:54 - Job 0 finished: collect at /opt/spark/examples/src/main/python/wordcount.py:40, took 1.619928 s
    line3: 1
    line2: 1
    line1: 1
    word4: 1
    word1: 3
    word3: 2
    word2: 2
    [...]

    Avec cela, nous avons vu notre Apache Spark en action. Des nœuds esclaves supplémentaires peuvent être installés et connectés pour faire évoluer la puissance de calcul de notre cluster.


Linux
  1. Comment installer Spark sur Ubuntu

  2. Comment installer phpMyAdmin sur RHEL 8 / CentOS 8

  3. Comment installer P7Zip sur RHEL 8 / CentOS 8

  4. Comment installer ntfs-3g sur RHEL 8 / CentOS 8

  5. comment installer gcc 4.9.2 sur RHEL 7.4

Comment installer ActiveMQ sur RHEL 8

Comment installer apache bench sur RHEL 8

Comment installer Cassandra sur RHEL 8

Comment installer composer sur RHEL 8

Comment installer gdb dans RHEL 8

Comment installer kafka sur RHEL 8