インストール/分散版セットアップ

Top > インストール > 分散版セットアップ

/etc/servicesへの追加

getassoc 12345/tcp

計算ノード(サーバ側でのディレクトリの準備)

例えば、計算ノードでのインデクス作成ディレクトリを /home/getassoc/g/pwam とします。
n番目の計算ノード(0から数えます)は、ここにある 0.n、1,n というディレクトリに
担当するインデクスを作成します。ちなみに、0.nは行連想用、1.nは列連想用です。
属性ファイルは全文一致インデクスは0.nにしかられません。

例えば、最初の計算ノードでは、

mkdir -p /home/getassoc/g/pwam/0.0 /home/getassoc/g/pwam/1.0

次の計算ノードでは、

mkdir -p /home/getassoc/g/pwam/0.1 /home/getassoc/g/pam/1.1

とします。余分なディレクトリはほとんど無害なので、すべての計算ノードで
すべてのディレクトリを作っておいてもかまいません。例えば、8分散するならば、

for d in 0 1; do
	for n in 0 1 2 3 4 5 6 7; do
		mkdir -p /home/getassoc/g/pwam/$d.$n
	done
done

計算サーバでのサービスの起動

xgetassoc に12を渡すとサーバになります。

制御端末を切り離す(デーモン)制御端末を切り離す(デーモン)
待ち受けポートを指定待ち受けポートを指定
待ち受け名前付きパイプを指定待ち受け名前付きパイプを指定
マルチホームホストの場合に、バインドするインタフェースを指定しますマルチホームホストの場合に、バインドするインタフェースを指定します
作業用ディレクトリを指定。省略すると親ノードと同じものが用いられる作業用ディレクトリを指定。省略すると親ノードと同じものが用いられる
インデクス作成ディレクトリを指定。省略すると、親ノードのインデクス作成ディレクトリのnwamをpwamに置換したものが用いられるインデクス作成ディレクトリを指定。省略すると、親ノードのインデクス作成ディレクトリのnwamをpwamに置換したものが用いられる

-pか-uのどちらかは指定しなければなりません。両方指定すると、どちらの方法でも接続できるようになります。

/home/getassoc/g/wbin/xgetassoc 12 -p getassoc -u /tmp/getassoc.sock

親ノードでの準備

/home/getassoc/g/etc/ndwam.confに計算ノードの一覧を作成します。
一行に1ノードずつ記述します。各行は

H\tP\tL

の形になります。ここで、\tはタブ文字を表します。
Hにはホスト名かIP-Addressを、Pにはポートを記述します。HとPは必ず組で指定してください。
Lには、名前付きパイプを指定します。名前付きパイプは一台の計算機で親ノードと計算サーバを兼業させている
場合にしか使えないことに注意してください。
HとP、またはLのどちらかは省略できますが、どの行もタブ文字をちょうど3つ含むように注意してください。

localhost	getassoc	
		/tmp/getassoc.sock
127.0.0.1	12345	/tmp/getassoc.sock
::1	12345	

計算ノードは、このファイルの先頭から順に0、1、2... 番の担当ノードになります。
ファイルを最後まで使い切ったら、先頭に戻って再使用されます。上の例なら、
先頭の計算ノードは0番なのですが、ファイルは4行ですから、5分割以上のインデクスを作成しようとすると、
この計算ノードは4番、8番、12番... の担当ノードにもなりえます。

これで、準備は完了です。

分散セットアップの実行

stpの-o引数に、分散セットアップの指示を,(コンマ)で区切って追加します。

行分散数行分散数
列分散数列分散数
行分散計算ノードの設定ファイル行分散計算ノードの設定ファイル
列分散計算ノードの設定ファイル列分散計算ノードの設定ファイル

例えば、行を2分割、列を3分割し、それぞれの設定ファイルがdnwam-r.conf、dnwam-c.confなら、

stp -o,-D,2,-C,/home/getassoc/g/etc/dnwam-r.conf,-X,3,-Y,/home/getassoc/g/etc/dnwam-c.conf -b /home/g sample title,link sample.itb

とします。
行と列の分割数が同じならば、-Dか-Xのどちらかを省略可能です。
行と列の分散計算ノードの設定フィアイルが同じならば、-Cか-Yのどちらかを省略可能です。例:

stp -o,-D,2,-C,/home/getassoc/g/etc/dnwam.conf -b /home/g sample title,link sample.itb

分散の設定はコーパスの属性ファイルに記憶されますので、セットアップが終われば、忘れても構いません。
また、コーパスごとに異なる設定が使えます。

計算サーバでのサービスの起動 (その2)

計算ノードが増えると、いちいち手動で起動してたのでは大変です。私は、以下のようなスクリプトを使っています。
ファイルは2つで、yが各計算ノードにおいておくもの、distが親ノードにおいておくものです。
計算ノードはm1〜m8まで連番の名前がついています。サービスを停止させるときは、(無様ですが、)
distの sleep 11 のところでdistの実行を止めればOKです。xgetassocを更新したくない場合や、
$grがNFSで共有されている場合には dist の真ん中のブロックを削る必要があります。

y:

#! /bin/sh

gr=/home/g
xgetassoc=/home/g/wbin/xgetassoc

init()
{
	mkdir -p $gr/tmp
	mkdir -p $gr/nwam
	mkdir -p $gr/pwam

	for d in 0 1
	do
		h=0
		while [ $h -lt $1 ]
		do
			mkdir -p $gr/pwam/$d.$h
			h=`expr $h + 1`
		done
	done
}

clean()
{
	rm -rf $gr/tmp/*
	rm -rf $gr/nwam/*
	rm -rf $gr/pwam/*/*
}

main()
{
	pkill xgetassoc
	pkill tail

	h=`hostname`

	clear

	$xgetassoc 12 -p getassoc > logs/$h 2>&1 &
	p0=$!
	echo $p0

	tail -f /var/log/stmd &
	p1=$!
	echo $p1

	tail -f logs/$h &
	p2=$!
	echo $p2

	rm -f $HOME/y.quit
	cnt=0
	while [ ! -f $HOME/y.quit ]
	do
		if [ $cnt -ge 18 ]
		then
			echo "$h `date`  `du -s $gr`"
			cnt=0
		fi
		cnt=`expr $cnt + 1`
		sleep 10
	done
	kill $p0 $p1 $p2
}

if [ $# -eq 2 -a x"$1" = x"-i" ]
then
	init $2
	clean
	exit 0
elif [ $# -eq 1 -a x"$1" = x"-c" ]
then
	clean
	exit 0
elif [ $# -eq 1 -a x"$1" = x"-s" ]
then
	touch y.quit
	exit 0
elif [ $# -ne 0 ]
then
	echo "usage: $0 -i #" 1>&2
	echo "       $0 -c" 1>&2
	echo "       $0 -s" 1>&2
	echo "       $0" 1>&2
	exit 1
fi

main

exit 0

dist:

#! /bin/sh
gr=/home/g

for h in 1 2 3 4 5 6 7 8
do
	echo $h
	ssh m$h ./y -s &
done
sleep 11

for h in 1 2 3 4 5 6 7 8
do
	echo $h
	(ssh m$h rm -f $gr/wbin/xgetassoc; scp $gr/wbin/xgetassoc m$h:$gr/wbin/xgetassoc) &
done
sleep 2

for h in 1 2 3 4 5 6 7 8
do
	echo $h
	#scp y m$h:y &
	#ssh m$h ./y -i 16 &
	#ssh m$h ./y -c &
	ssh m$h ./y &
done

最終更新日: 2014-12-09 (火) 18:25:46 (868d)

このページをブックマーク:

このページのURL(コピペして利用下さい):

TOP