BH12.12/SPARQLthon13/OWLIM-Enterprise

提供:TogoWiki

移動: 案内, 検索

ontotextOWLIM-Enterpriseのインストール方法、データロード方法およびベンチマークテストについて。


OWLIM-Enterprise

  • Scale-out handling of concurrent query requests: the query processing rate scales linearly with the number of worker nodes
  • Resilience in the event of hardware/software failure: automatic failover of cluster nodes, synchronization and dynamic configuration
http://www.ontotext.com/owlim/replication-cluster
Cluster configuration small.png















目次

インストール

マスターノードとワーカーノードでクラスターを構成しクエリを処理する OWLIM-Enterprise(ver 5.4.6486, Sesame 2.7.7) のインストール方法を記載する。

Tomcat/OWLIM

マスターノードおよびワーカーノード分のTomcatとOWLIMをインストール・設定する

  • 必要なポート数
マスターノード : 4つ
ワーカーノード : 3つ
  • インストールスクリプト(※インストールディレクトリにマスターノードを1つ、ワーカーノードを6つインストール・設定する例)
##
# [OWLIM-EP インストール・設定]
##
dir_root="\/path\/to\/install\/dir"
ver_tomcat="apache-tomcat-7.0.40"
ver_owlim="owlim-enterprise-5.4.6486"
mem_java="8g"
#master ディレクトリ名およびポート設定
m_nodes=("master")
jmxremote_ports=("10030")
m_tomcat_connector_ports=("10000") #これに"10"をプラスしたportが自動で使われる
m_tomcat_shutdown_ports=("10020")
#worker ディレクトリ名およびポート設定
w_nodes=("worker1" "worker2" "worker3" "worker4" "worker5" "worker6")
w_tomcat_connector_ports=("10001" "10002" "10003" "10004" "10005" "10006") #これらに"10"をプラスしたportが自動で使われる
w_tomcat_shutdown_ports=("10021" "10022" "10023" "10024" "10025" "10026")
#ディレクトリ作成
for i in ${m_nodes[@]} ${w_nodes[@]}; do mkdir -p $i/app; done
for i in ${m_nodes[@]} ${w_nodes[@]}; do mkdir $i/data; done
for i in ${m_nodes[@]} ${w_nodes[@]}; do mkdir $i/console; done
#tomcatインストール
for i in ${m_nodes[@]} ${w_nodes[@]}; do cd $i; ln -s app/${ver_tomcat} tomcat; cd ..; done
for i in ${m_nodes[@]} ${w_nodes[@]}; do cd $i/app; tar xzvf /path/to/src/dir/${ver_tomcat}.tar.gz; cd ../../; done
#owlimインストール
for i in ${m_nodes[@]} ${w_nodes[@]}; do cd $i; ln -s app/${ver_owlim} owlim; cd ..; done
for i in ${m_nodes[@]} ${w_nodes[@]}; do cd $i/app; unzip /path/to/src/dir/${ver_owlim}.zip; cd ../../; done
for i in ${m_nodes[@]} ${w_nodes[@]}; do cd $i; cp app/${ver_owlim}/sesame_owlim/*.war app/${ver_tomcat}/webapps/; cd ..; done
#owlim consoleインストール
for i in ${m_nodes[@]} ${w_nodes[@]}; do cd $i/console; unzip ../owlim/sesame_owlim/openrdf-console.zip; cd ../../; done
for i in ${m_nodes[@]} ${w_nodes[@]}; do mkdir -p $i/data/openrdf-sesame-console/templates; cp $i/owlim/templates/*.ttl $i/data/openrdf-sesame-console/templates/; done
for i in ${m_nodes[@]} ${w_nodes[@]}; do cp $i/console/bin/console.sh $i/console/bin/console.sh.bak; sed -e "s/JAVA\_OPT\=\-mx512m/JAVA\_OPT\=\"\-mx${mem_java} \-Dinfo.aduna.platform.appdata.basedir\=${dir_root}\/${i}\/data\/\"/" $i/console/bin/console.sh > a.out; mv a.out $i/console/bin/console.sh; done
#master catalina.sh 設定
for (( i = 0; i < ${#m_nodes[@]}; i++ )); do cp ${m_nodes[$i]}/tomcat/bin/catalina.sh ${m_nodes[$i]}/tomcat/bin/catalina.sh.bak; sed -e "3i JAVA\_OPTS\=\"\-Xmx${mem_java} \-Dinfo.aduna.platform.appdata.basedir\=${dir_root}\/${m_nodes[$i]}\/data\/\"" ${m_nodes[$i]}/tomcat/bin/catalina.sh | sed -e "4i CATALINA\_OPTS\=\"\-Dcom.sun.management.jmxremote.port\=${jmxremote_ports[$i]} \-Dcom.sun.management.jmxremote.authenticate\=false \-Dcom.sun.management.jmxremote.ssl\=false\"" > a.out; mv a.out ${m_nodes[$i]}/tomcat/bin/catalina.sh; done
#worker catalina.sh 設定
for i in ${w_nodes[@]}; do cp $i/tomcat/bin/catalina.sh $i/tomcat/bin/catalina.sh.bak; sed -e "3i JAVA\_OPTS\=\"\-Xmx${mem_java} \-Dinfo.aduna.platform.appdata.basedir\=${dir_root}\/${i}\/data\/\"" $i/tomcat/bin/catalina.sh > a.out; mv a.out $i/tomcat/bin/catalina.sh; done
#master server.xml 設定
for (( i = 0; i < ${#m_nodes[@]}; i++ )); do cp ${m_nodes[$i]}/tomcat/conf/server.xml ${m_nodes[$i]}/tomcat/conf/server.xml.backup; sed -e "s/8005/${m_tomcat_shutdown_ports[$i]}/" ${m_nodes[$i]}/tomcat/conf/server.xml | sed -e "s/Connector port\=\"8080\" protocol\=\"HTTP\/1.1\"/Connector port\=\"${m_tomcat_connector_ports[$i]}\" protocol\=\"HTTP\/1.1\"/" | sed -e "91d" > a.out; mv a.out ${m_nodes[$i]}/tomcat/conf/server.xml; done
#worker server.xml 設定
for (( i = 0; i < ${#w_nodes[@]}; i++ )); do cp ${w_nodes[$i]}/tomcat/conf/server.xml ${w_nodes[$i]}/tomcat/conf/server.xml.backup; sed -e "s/8005/${w_tomcat_shutdown_ports[$i]}/" ${w_nodes[$i]}/tomcat/conf/server.xml | sed -e "s/Connector port\=\"8080\" protocol\=\"HTTP\/1.1\"/Connector port\=\"${w_tomcat_connector_ports[$i]}\" protocol\=\"HTTP\/1.1\"/" | sed -e "91d" > a.out; mv a.out ${w_nodes[$i]}/tomcat/conf/server.xml; done
#実行権限設定
for i in ${m_nodes[@]} ${w_nodes[@]}; do chmod 0755 $i/console/bin/console.sh; done
for i in ${m_nodes[@]} ${w_nodes[@]}; do chmod 0755 $i/tomcat/bin/catalina.sh; done
  • インストールディレクトリ(※インストールディレクトリにマスターノードを1つ、ワーカーノードを6つインストール・設定する例)
$ ls -1
master
worker1
worker2
worker3
worker4
worker5
worker6

$ ls -l master
app
console
data
owlim -> app/owlim-enterprise-5.4.6486
tomcat -> app/apache-tomcat-7.0.40

クラスター設定

Openrdf-Workbenchを利用しWEBブラウザでマスターノード用およびワーカーノード用のレポジトリを作成する。 さらに、jconsoleを起動し、ワーカーノードをマスタノードに紐付ける。

  • マスターノード用のレポジトリ作成
マスターノードのOpenrdf-Workbenchを開く
 ex) http://example.com:10000/openrdf-workbench/repositories/NONE/repositories
New repositoryを作成
 - Typeで「OWLIM-Enterprise master node」を選択
 - 任意のID, Title を入力
  • ワーカーノード用のレポジトリ作成
※全てのワーカーノードについて、以下の手順を繰り返す

各ワーカーノードのSesame serverにchangeする
 ex) Sesame server: http://example.com:10001/openrdf-sesame
New repositoryを作成
 - Typeで「OWLIM-Enterprise worker node」を選択
 - 任意のID, Title を入力
 - 各パラメーターを入力
  • ワーカーノードをマスタノードに紐付ける
ssh -X example.com
$ jconsole
Remote Process を選択し、"localhost:10030"に接続
 MBeansタブを開く
  ReplicationCluster->ClusterInfo/cluster->Operations を選択
   6つのワーカーをクラスターノードとして登録する(画面を変更しなければ、数字を帰るだけで連続して登録することが可能)
    addClusterNode : p1 = http://example.com:10001/openrdf-sesame/repositories/cluster, p2 = 10011
    addClusterNode : p1 = http://example.com:10002/openrdf-sesame/repositories/cluster, p2 = 10012
    addClusterNode : p1 = http://example.com:10003/openrdf-sesame/repositories/cluster, p2 = 10013
    addClusterNode : p1 = http://example.com:10004/openrdf-sesame/repositories/cluster, p2 = 10014
    addClusterNode : p1 = http://example.com:10005/openrdf-sesame/repositories/cluster, p2 = 10015
    addClusterNode : p1 = http://example.com:10006/openrdf-sesame/repositories/cluster, p2 = 10016
  ReplicationCluster->ClusterInfo/cluster->Attributes を選択
   NodeStatusに6つのワーカーが登録され、かつ[ON]になっていることを確認する
   ConfiguredWritableをtrueに変更
    同時にisWritableがfalseからtrueにかわっていることを確認



データロード

マスターノードのリポジトリに対して、データをロードする。

JervenのOWLIM-SE用sesame-loaderを利用しようと試みたが、OWLIM-EPには適用できなかった。

[sesame-loader]
https://github.com/JervenBolleman/sesame-loader
Loads data into an sesame repository using multiple threads per file without any server over head.

ロードするRDFファイルのトリプル数が大きいと、非常に多くのメモリを必要とし、CPUも暴走気味になる。

  • 1.2億トリプルのデータをロードするのに、128GBのヒープメモリが必要であった。またロード完了までに1週間ほどかかった。
OWLIM-SEにsesame-loaderを利用して同RDFファイルをロードした際は、22分で完了

ontotextに問い合わせたところ、0.5 or 1 millionトリプルごとにロードするのが適切とのことであった。

RDFファイルを0.5 or 1 millionトリプルごとに分割して、コンソールからロードする方法があるが、同一のブランクノードIDが異なるファイルに分かれてしまった場合、ロード後にOWLIMで同一のブランクノードとして扱われない。

そこで、Sesameライブラリを利用し、0.5 or 1 millionトリプルごとロードするプログラムを作成し、ロードすることにした。

プログラム

以下のサイトを参考に作成



ベンチマークテスト

以下のベンチマークテスト用データを用いて、データロードおよびクエリ実行速度を計測する。

RDF File # of Triples File Size
Allie 116,624,162 15GB
  • ベンチマークテスト実施サーバの仕様
Intel(R) Xeon(R) CPU E5-2630L 2.00GHz(CPU:2, CPU cores:6, prosessor:24)
256GB Main-memory
18TB Hdd ( rpm)
NetXtreme II BCM57800 1/10 Gigabit Ethernet
Red Hat Enterprise Linux Server release 6.2 (Santiago)
  • Javaのヒープメモリサイズは8GBに設定

データロード

Triple Store Allie(min)
OWLIM-EP-5.4.6486 330

クエリ実行

5つのSPARQLクエリの実行速度を測定

Triple Store Query.1 (sec) Query.2 (sec) Query.3 (sec) Query.4 (sec) Query.5 (sec)
OWLIM-EP-5.4.6486 < 1 < 1 < 1 < 1 58

参考

同一サーバで、以下のデータを用い、Virtuoso6および7に対するベンチマークテスト結果

RDF File # of Triples File Size
Allie 114,051,820 14GB
Triple Store Allie(min)
Virtuoso-6.1.6 79
Virtuoso develop/7 14
Triple Store Query.1 (sec) Query.2 (sec) Query.3 (sec) Query.4 (sec) Query.5 (sec)
Virtuoso-6.1.6 5 3 4 < 1 88
Virtuoso develop/7 4 3 2 < 1 32



メモ

  • データロード済みのクラスターに対して、ワーカーノードを新たに追加する場合、OWLIMを止めることなく追加すること出来た。
    • 新たなワーカーノードには、同期処理によりロード済みデータがコピーされる。
  • 一つのTomcat/OWLIM上に複数のマスターノード(repository)を作成することが出来た。
    • 同一のワーカーノードを複数のマスタノードに割り当てることは出来なかった。
  • JConsole グラフィカルユーザーインタフェースは、Java Management Extensions (JMX) 仕様に準拠した監視ツール