GridEngineとは
GridEngineとはジョブスケジューラーの一種で,たくさんのバッチジョブを分散して実行することが出来ます.これにより,空いている計算機を探すようなことをせずとも自動的に計算を実行したり,計算機が埋まっている場合でも空き次第ジョブを実行することが出来ます.また,各種リソース制限もありますので,メモリをたくさん使用するようなジョブが1つのノードに集中することも避けられます.科学計算用のスパコンでよく使用されていて,結果がすぐに帰ってくる必要のない計算で今までのソフトウエア資源を使い回したいときに向いています.HadoopやSparkのように短時間で計算結果を返す必要のあるものには向いていません.
元々は Sun Microsystems がオープンソース版と商用版開発していましたが, Oracle の買収以来オープンソース版がなくなってしまいました.商用版もUnivaに売却されてしまいました.オープンソース時代のソースコードを元に開発がされていたプロジェクトとして,Open Grid SchedulerやSon of Grid Engineなどがあります.どれも最近はリリースがなされていないので,プロジェクトの継続性が心配ではありますが,現在稼働中のGridEngine用アプリケーションを移植するような場合には有用です.
ここではCent OS 6向けにパッケージが提供されているSon of Grid Engineを用いてセットアップしてみます.
マスターノードのセットアップ
まずはマスターとなるノードをセットアップします.RedHat系だとCent OS 6向けにしかバイナリが提供されていないので,Cent OS 6をインストールしてください.ここでは簡単にするためにVagrantを用いてセットアップします.また,計算ノードも一緒にセットアップしています.
以下のファイルをVagrantfile
として適当な空のディレクトリに配置し,vagrant up
を実行することで GridEngine のセットアップの下準備が自動的に完了します.(完全な自動ではないので,この下の特にNIS関係の部分を確認してください)
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "bento/centos-6.7"
config.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
end
config.vm.define "master" do |master|
master.vm.network "private_network", ip: "10.1.212.10"
master.vm.provision "shell", inline: <<-SHELL
# install gridengine
curl -s -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-8.1.8-1.el6.x86_64.rpm
curl -s -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-qmaster-8.1.8-1.el6.x86_64.rpm
curl -s -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-execd-8.1.8-1.el6.x86_64.rpm
curl -s -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-qmon-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-qmaster-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-execd-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-qmon-8.1.8-1.el6.x86_64.rpm
sudo useradd sge
sudo chown -R sge:sge /opt/sge
# change hostname
sudo sed -i -e 's/localhost/gmaster/g' /etc/sysconfig/network
sudo service network restart
# setup nfs
echo '/opt/sge 10.1.212.0/24(rw,root_squash)'|sudo tee /etc/exports
sudo chkconfig nfs on
sudo service nfs start
# setup NIS
sudo yum install -y ypserv
SHELL
end
config.vm.define "calc1" do |calc1|
calc1.vm.network "private_network", ip: "10.1.212.11"
calc1.vm.provision "shell", inline: <<-SHELL
# change hostname
sudo sed -i -e 's/localhost/gcalc1/g' /etc/sysconfig/network
sudo service network restart
# mount nfs
sudo service nfs start
sudo chkconfig nfs on
sudo mkdir -p /opt/sge
sudo mount -t nfs 10.1.212.10:/opt/sge /opt/sge
echo '10.1.212.10:/opt/sge /opt/sge nfs defaults 0 0'|sudo tee -a /etc/fstab
# setup NIS
sudo yum -y install ypbind
SHELL
end
config.vm.provision "shell", inline: <<-SHELL
sudo yum update -y
sudo yum install -y epel-release
sudo yum install -y jemalloc dkms
sudo yum install -y man csh perl perl-XML-Simple hwloc openmotif libXt xorg-x11-xauth xorg-x11-server-Xorg xorg-x11-fonts-ISO8859-1-100dpi xorg-x11-fonts-ISO8859-1-75dpi tcsh tcl xterm mailx nfs-utils
echo '10.1.212.10 gmaster gmaster.localdomain'|sudo tee -a /etc/hosts
echo '10.1.212.11 gcalc1 gcalc1.localdomain'|sudo tee -a /etc/hosts
echo "NISDOMAIN=grid.master"|sudo tee -a /etc/sysconfig/network
SHELL
end
必須ライブラリなどのインストール
この節は上のVagrantfile
を使ったときには不要です.
まず,Grid Engineが必要とするライブラリなどをインストールします.このときにEPELが必要となりますので,リポジトリを追加します.
# EPELの有効化
sudo yum install -y epel-release
# EPELにあるライブラリのインストール(もし,VirtualBoxで試しているときはdkmsも入れておくと良い)
sudo yum install -y jemalloc
# その他の必要なライブラリのインストール
sudo yum install -y man csh perl perl-XML-Simple hwloc openmotif libXt xorg-x11-xauth xorg-x11-server-Xorg xorg-x11-fonts-ISO8859-1-100dpi xorg-x11-fonts-ISO8859-1-75dpi tcsh tcl xterm mailx nfs-utils
ホスト名の設定
この節は上のVagrantfile
を使ったときには不要です.
次にhosts
ファイルを書き込みます.以下のものを/etc/hosts
に追記してください.ホスト名やIPアドレスは今回のGridEngineに追加するノードに合わせて網羅しておいてください.
10.1.212.10 gmaster gmaster.localdomain
10.1.212.11 gcalc1 gcalc1.localdomain
ホスト名を変更します./etc/sysconfig/network
を開いて,HOSTNAME=localhost.localdomain
をHOSTNAME=gmaster.localdomain
などのように,今回設定するホスト名に合わせてセットアップしてください.
NFSの設定
この節は上のVagrantfile
を使ったときには不要です.
Grid Engineの設定などを一部共有するためにNFSが必要になります./opt/sge
以下を共有できるようにしておきます.以下の行を/etc/exports
に書き込んでください.
/opt/sge 10.1.212.0/24(rw,root_squash)
その上で以下のコマンドを実行し,サービスを開始します.
sudo chkconfig nfs on
sudo service nfs start
NISの設定
NISに必要なライブラリのインストールと設定ファイルの書き込み
この節は上のVagrantfile
を使ったときには不要です.
-
yum install ypserv
を実行し,必要なライブラリを追加する. -
/etc/sysconfig/network
にNISDOMAIN=grid.master
を追加.
NISのセットアップ
この節は上のVagrantfile
を使ったときにも必要です.
まず,設定を始める前に再起動します.その後,以下のコマンドを実行します.
sudo /usr/lib64/yp/ypinit -m
sudo service ypserv start
sudo service ypxfrd start
sudo service yppasswdd start
sudo chkconfig ypserv on
sudo chkconfig ypxfrd on
sudo chkconfig yppasswdd on
sudo /usr/lib64/yp/ypinit -m
を実行すると
At this point, we have to construct a list of the hosts which will run NIS
servers. gmaster is in the list of NIS server hosts. Please continue to add
the names for the other hosts, one per line. When you are done with the
list, type a <control D>.
next host to add: gmaster
next host to add:
のような画面が最初に出てきますが,ここではControl-Dを押してください.次に
The current list of NIS servers looks like this:
gmaster
Is this correct? [y/n: y]
となったらy
を押してEnterを押します.
GridEngineのインストール
この節は上のVagrantfile
を使ったときには不要です.
以下のコマンドを実行し,必要なファイルのダウンロードとインストールを行います.またインストールされたディレクトリのOwnerを変更しておきます.
# download RPMs
curl -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-8.1.8-1.el6.x86_64.rpm
curl -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-qmaster-8.1.8-1.el6.x86_64.rpm
curl -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-execd-8.1.8-1.el6.x86_64.rpm
curl -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-qmon-8.1.8-1.el6.x86_64.rpm
# install RPMs
sudo rpm -i gridengine-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-qmaster-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-execd-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-qmon-8.1.8-1.el6.x86_64.rpm
# Add user and change owner
sudo useradd sge
sudo chown -R sge:sge /opt/sge
これでGridEngineを使うためのマスターノード側の下準備は終了です.
計算ノードの設定
必須ライブラリなどのインストール
この節は上のVagrantfile
を使ったときには不要です.マスターノードと同様にセットアップします.
ホスト名の設定
この節は上のVagrantfile
を使ったときには不要です.マスターノードと同様にセットアップします./etc/sysconfig/network
のホスト名は計算ノードのものにしてください.
NFSの設定
この節は上のVagrantfile
を使ったときには不要です.
マスターノードでセットアップしたNFSをマウントします.以下のように実行してください.
sudo service nfs start
sudo chkconfig nfs on
sudo mkdir -p /opt/sge
sudo mount -t nfs 10.1.212.10:/opt/sge /opt/sge
最後に,10.1.212.10:/opt/sge /opt/sge nfs defaults 0 0
を/etc/fstab
に追記することで,再起動後にも自動的にマウントされるようにします.
NISの設定
NISに必要なライブラリのインストールと設定ファイルの書き込み
この節は上のVagrantfile
を使ったときには不要です.
-
yum install ypbind
を実行し,必要なライブラリを追加する. -
/etc/sysconfig/network
にNISDOMAIN=grid.master
を追加.
NISのセットアップ
この節は上のVagrantfile
を使ったときにも必要です.
まず,設定を始める前に再起動します.その後,以下のコマンドを実行します.
sudo authconfig --enablenis --nisdomain=grid.master --nisserver=gmaster --update
GridEngineのセットアップ
マスターノードのセットアップ
まず,マスターノードのセットアップを開始します.マスターノードにログインし,root
になってください.そして,/opt/sge
に移動します.もし,Vagrantを使っている場合のrootパスワードはvagrant
です.そして,./install_qmaster
を実行し,インストーラーを立ち上げます.基本的にはエンターキーを押し続ければよいですが,途中で管理者のメールアドレスを聞かれますので,必要であれば登録しましょう.
最後に,echo 'source /opt/sge/default/common/settings.sh' > /etc/profile.d/gridengine.sh
を実行し,必要な環境変数が自動的に設定されるようにします.
これでマスターノードのセットアップは終了です.
計算ノードのセットアップ
GridEngineへノードとして追加
このコマンドはマスターで実行します.以下のコマンドを実行してGridEngineに追加する予定の計算ノードを登録します.もし,qconf
が見つからないときはsource /opt/sge/default/common/settings.sh
を実行してください.
qconf -ah gcalc1
計算ノードでのセットアップ
この節のコマンドは計算ノードで実行します.root
になった上で/opt/sge
に移動します.その後,./install_execd
を実行し,インストーラーを起動します.こちらもエンターキーを押し続ければ大丈夫ですが,以下にスクリーンショットをのせておきます.途中でPermissionエラーのようなことを言われたときには,おそらくNISに問題があります.
最後に,こちらのノードでもecho 'source /opt/sge/default/common/settings.sh' > /etc/profile.d/gridengine.sh
を実行し,必要な環境変数が自動的に設定されるようにします.
これで計算ノードのセットアップは終了です.無事終了している場合にはqhost
を実行すると
[root@gmaster sge]# qhost
HOSTNAME ARCH NCPU NSOC NCOR NTHR LOAD MEMTOT MEMUSE SWAPTO SWAPUS
----------------------------------------------------------------------------------------------
global - - - - - - - - - -
gcalc1 lx-amd64 1 1 1 1 0.00 996.3M 106.6M 928.0M 0.0
と表示されるはずです.もし,qhost
が見つからないときはsource /opt/sge/default/common/settings.sh
を実行してください.なお,あまりお勧めはされませんが,マスターノードと計算ノードは兼ねることもできます.
やり残したこと
- 計算ノードから必要なファイルがきちんと見えるようにする必要があります.具体的にはホームディレクトリをNFSでマウントしましょう.
- 各種リソース制限などを行っていません.