次のコマンドを使用して、起動後にApache Sparkクラスターを起動したいと思います。
Sudo ./path/to/spark/sbin/start-all.sh
次に、システムがリブート/シャットダウンの準備をしたときに次のコマンドを実行します。
Sudo ./path/to/spark/sbin/stop-all.sh
どうすれば始められますか?構築できる基本的なテンプレートはありますか?
私は非常にシンプルなものを使用しようとしました(ファイル:/lib/systemd/system/spark.service
):
[Unit]
Description=Spark service
[Service]
ExecStart=Sudo ./path/to/spark/sbin/start-all.sh
どちらも機能しません。
.service
ファイルは次のようになります。
[Unit]
Description=Spark service
[Service]
ExecStart=/path/to/spark/sbin/start-all.sh
[Install]
WantedBy=multi-user.target
.service
ファイルを有効にして使用するには、さらにいくつかの手順を実行します。
/lib/systemd/system
という名前でmyfirst.service
フォルダーに配置します
スクリプトを実行可能にする:
chmod u+x /path/to/spark/sbin/start-all.sh
始めよう:
Sudo systemctl start myfirst
起動時に実行できるようにします:
Sudo systemctl enable myfirst
やめて
Sudo systemctl stop myfirst
デフォルトのサービスユーザーはすでにrootであるため、サービスでSudoを使用してSparkを起動する必要はありません。
その他のsystemd
オプションについては、以下のリンクをご覧ください。
上記の内容は基本的なものです。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
サービスをセットアップするには:
Sudo systemctl start spark.service
Sudo systemctl stop spark.service
Sudo systemctl enable spark.service
以下のリンクをお読みください。 Sparkは複雑なセットアップなので、Ubuntuのinitサービスと統合する方法を理解する必要があります。
https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files
https://www.freedesktop.org/software/systemd/man/systemd.unit.html
これにより、最小限のサービスファイルを使用して、ブート時に(rootとして)/root/boot.sh
が作成および実行されます。
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
あなたはできる Ctrl+C これをルート端末に。
別の$bootscript
を使用するなど、パラメーターを変更するには、その変数を手動で設定し、コマンドをコピーするときにその行をスキップします。
コマンドを実行した後、お気に入りのエディターを使用してブートスクリプトを編集できます。次回のブート時に実行されます。次を使用して、すぐに実行することもできます。
systemctl start $servicename
すべてのステップはSudoで実行できますが、少し複雑で、一部のシステムにはSudoがインストールされていないため、使用する前にサンプルを変更する必要があります。したがって、この例にはSudoを含めないことにしました。