Je souhaite démarrer un cluster Apache Spark après le démarrage à l'aide de la commande suivante:
Sudo ./path/to/spark/sbin/start-all.sh
Exécutez ensuite cette commande lorsque le système se prépare à redémarrer/arrêter:
Sudo ./path/to/spark/sbin/stop-all.sh
Comment puis-je commencer? Existe-t-il un modèle de base sur lequel je peux construire?
J'ai essayé d'utiliser un extrêmement simple (fichier: /lib/systemd/system/spark.service
):
[Unit]
Description=Spark service
[Service]
ExecStart=Sudo ./path/to/spark/sbin/start-all.sh
Ce qui ne marche pas.
Votre fichier .service
devrait ressembler à ceci:
[Unit]
Description=Spark service
[Service]
ExecStart=/path/to/spark/sbin/start-all.sh
[Install]
WantedBy=multi-user.target
Maintenant, effectuez quelques étapes supplémentaires pour activer et utiliser le fichier .service
:
Placez-le dans le dossier /lib/systemd/system
avec un nom de myfirst.service
Faites que votre script soit exécutable avec:
chmod u+x /path/to/spark/sbin/start-all.sh
Commencez le:
Sudo systemctl start myfirst
Autorisez-le à s'exécuter au démarrage:
Sudo systemctl enable myfirst
Arrête ça:
Sudo systemctl stop myfirst
Vous n'avez pas besoin de lancer Spark avec Sudo dans votre service, car l'utilisateur du service par défaut est déjà root.
Consultez les liens ci-dessous pour plus d'options systemd
.
Maintenant, ce que nous avons ci-dessus est simplement rudimentaire, voici une configuration complète pour spark:
[Unit]
Description=Apache Spark Master and Slave Servers
After=network.target
After=systemd-user-sessions.service
After=network-online.target
[Service]
User=spark
Type=forking
ExecStart=/opt/spark-1.6.1-bin-hadoop2.6/sbin/start-all.sh
ExecStop=/opt/spark-1.6.1-bin-hadoop2.6/sbin/stop-all.sh
TimeoutSec=30
Restart=on-failure
RestartSec=30
StartLimitInterval=350
StartLimitBurst=10
[Install]
WantedBy=multi-user.target
Pour configurer le service:
Sudo systemctl start spark.service
Sudo systemctl stop spark.service
Sudo systemctl enable spark.service
Veuillez lire les liens suivants. Spark est une configuration complexe, vous devez donc comprendre comment elle s'intègre au service init d'Ubuntu.
https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files
https://www.freedesktop.org/software/systemd/man/systemd.unit.html
Cela crée et exécute /root/boot.sh
au démarrage (en tant que root) à l'aide d'un fichier de service minimal:
bootscript=/root/boot.sh
servicename=customboot
cat > $bootscript <<EOF
#!/usr/bin/env bash
echo "$bootscript ran at $(date)!" > /tmp/it-works
EOF
chmod +x $bootscript
cat > /etc/systemd/system/$servicename.service <<EOF
[Service]
ExecStart=$bootscript
[Install]
WantedBy=default.target
EOF
systemctl enable $servicename
Vous pouvez Ctrl+C ceci dans un terminal root.
Pour modifier les paramètres, par exemple pour utiliser un $bootscript
différent, définissez cette variable manuellement et ignorez simplement cette ligne lors de la copie des commandes.
Après avoir exécuté les commandes, vous pouvez éditer le script de démarrage à l’aide de votre éditeur favori et le lancer au prochain démarrage. Vous pouvez aussi le lancer immédiatement en utilisant:
systemctl start $servicename
Toutes les étapes peuvent être réalisées avec Sudo, mais la procédure est un peu plus compliquée et, dans certains systèmes, aucune installation de Sudo n’est installée; certaines personnes doivent donc modifier cet exemple avant de l’utiliser. Par conséquent, j'ai choisi de ne pas inclure Sudo dans l'exemple.