BH12.12/SPARQLthon13/OWLIM-Enterprise
提供:TogoWiki
ontotextのOWLIM-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
目次 |
インストール
マスターノードとワーカーノードでクラスターを構成しクエリを処理する 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) 仕様に準拠した監視ツール