SPARQLthon17/DDBJ
提供:TogoWiki
目次 |
エンドポイント構築
DDBJエントリーのRDFをトリプルストアにロードする。トリプル数は97億。
過去のページ
SPARQLthon10
SPARQLthon15
SPARQLthon16
安定的ロードの検証
前回まで検証で、最も成功率が高いのはMediumノードなので、その環境でエラーが起きないかロードを繰り返した。
設定&スクリプト
- ディレクトリ
VirtuosoのDBディレクトリ
例:/home/w3sw/store/virtuoso_stableload/var/lib/virtuoso/db
- virtuoso_medium.ini
デフォルト(virtuoso.ini)からの変更点(700Gメモリ設定時≒1Tサーバ程度の設定)
[Database] ;MaxCheckpointRemap = 2000 //コメントアウトして無効化 [Parameters] ServerPort = 1114 //isql用ポートを設定する DirsAllowed = ., /home/w3sw/store/virtuoso_stableload/share/virtuoso/vad, /home/w3sw/okbp //ロードするファイルのディレクトリを追加 MaxMemPoolSize = 1500000000 //必須か不明だが、BSBMの設定ファイルに記載があったので変更 ;NumberOfBuffers = 10000 //デフォルトのメモリ量を無効化して大きな値を設定 ;MaxDirtyBuffers = 6000 NumberOfBuffers = 80000000 MaxDirtyBuffers = 60000000 MaxCheckpointRemap = 24000000 UnremapQuota = 0 [HTTPServer] //Web用(エンドポイントやconductor)用ポートを設定 ServerPort = 8894 [URIQA] DefaultHost = localhost:8894 [SPARQL] ;MaxQueryCostEstimationTime = 400 ; in seconds //見積もり時間数(Virtuosoが誤算することがある)を超えるクエリを実行できなくなるので、無効化
- add_load_list.sql
ロード対象ファイルの登録スクリプト
ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjbct*.ttl' , 'http://ddbj.nig.ac.jp/graph/bct'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjcon*.ttl' , 'http://ddbj.nig.ac.jp/graph/con'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjenv*.ttl' , 'http://ddbj.nig.ac.jp/graph/env'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjest*.ttl' , 'http://ddbj.nig.ac.jp/graph/est'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjgss*.ttl' , 'http://ddbj.nig.ac.jp/graph/gss'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjhtc*.ttl' , 'http://ddbj.nig.ac.jp/graph/htc'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjhtg*.ttl' , 'http://ddbj.nig.ac.jp/graph/htg'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjhum*.ttl' , 'http://ddbj.nig.ac.jp/graph/hum'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjinv*.ttl' , 'http://ddbj.nig.ac.jp/graph/inv'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjmam*.ttl' , 'http://ddbj.nig.ac.jp/graph/mam'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjpat*.ttl' , 'http://ddbj.nig.ac.jp/graph/pat'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjphg*.ttl' , 'http://ddbj.nig.ac.jp/graph/phg'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjpln*.ttl' , 'http://ddbj.nig.ac.jp/graph/pln'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjpri*.ttl' , 'http://ddbj.nig.ac.jp/graph/pri'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjrod*.ttl' , 'http://ddbj.nig.ac.jp/graph/rod'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjsts*.ttl' , 'http://ddbj.nig.ac.jp/graph/sts'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjsyn*.ttl' , 'http://ddbj.nig.ac.jp/graph/syn'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjtsa*.ttl' , 'http://ddbj.nig.ac.jp/graph/tsa'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjuna*.ttl' , 'http://ddbj.nig.ac.jp/graph/una'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjvrl*.ttl' , 'http://ddbj.nig.ac.jp/graph/vrl'); ld_dir_all('/home/w3sw/okbp/release_94_rdf', 'ddbjvrt*.ttl' , 'http://ddbj.nig.ac.jp/graph/vrt');
- bulk_load_medium.sh
スパコンにジョブとして投げるシェルスクリプト(ログ出力用コマンドは除去している)
#シェルの宣言。2行目はスパコン向けの宣言 #!/bin/sh #$ -S /bin/sh #ファイルパス等の設定 VIRTUOSO_HOME=/home/w3sw/store/virtuoso_stableload DBBASE=/home/w3sw/store/virtuoso_stableload/var/lib/virtuoso/db PIDFILE=$DBBASE/virtuoso.lck PORT=1114 #echoを書いておけばジョブの標準出力としてログが吐かれる echo `date +'%Y/%m/%d %H:%M:%S'` "Bulkload start" #Virtuosoの起動 $VIRTUOSO_HOME/bin/virtuoso-t +config $DBBASE/virtuoso_medium.ini +wait if [ -f "$PIDFILE" ]; then #PID用ファイルが生成されていれば、正常起動 #チェックポイントの間隔を6000分にしてロード中に発生しないようにする $VIRTUOSO_HOME/bin/isql $PORT dba dba exec="checkpoint;" $VIRTUOSO_HOME/bin/isql $PORT dba dba exec="checkpoint_interval(6000);" #ロード対象ファイルの登録スクリプトを実行 $VIRTUOSO_HOME/bin/isql $PORT dba dba < $DBBASE/add_load_list.sql #ロードの実行 $VIRTUOSO_HOME/bin/isql $PORT dba dba exec="rdf_loader_run();" #チェックポイントの実行 $VIRTUOSO_HOME/bin/isql $PORT dba dba exec="checkpoint;" $VIRTUOSO_HOME/bin/isql $PORT dba dba exec="checkpoint_interval(60);" #Taxonomyファイルのロード $VIRTUOSO_HOME/bin/isql $PORT dba dba exec="log_enable(3,1);" $VIRTUOSO_HOME/bin/isql $PORT dba dba exec="DB.DBA.TTLP_MT (file_to_string_output('/home/w3sw/okbp/rdf/ontology/taxonomy/taxonomy.owl'), '', 'http://ddbj.nig.ac.jp/graph/taxonomy');" #Virtuosoのシャットダウン $VIRTUOSO_HOME/bin/isql $PORT dba dba exec="shutdown();" else #起動に失敗した場合 echo "ERROR! Virutuoso start" fi #テキストインデックスを生成するためにVirtuosoを再度起動する $VIRTUOSO_HOME/bin/virtuoso-t +config $DBBASE/virtuoso_medium.ini +wait if [ -f "$PIDFILE" ]; then sleep 604800 #放置すれば自動的にテキストインデックスの生成が始まる。スパコンのジョブが終了しないために、無理矢理sleepを入れている $VIRTUOSO_HOME/bin/isql $PORT dba dba exec="checkpoint;" $VIRTUOSO_HOME/bin/isql $PORT dba dba exec="shutdown();" else echo "ERROR! Virutuoso start" fi
- ジョブ実行コマンド(Mediumノードに700Gメモリを要求)
qsub -l s_vmem=700G -l mem_req=700G -l month -l medium bulk_load_medium.sh
ロード作業内容(ケース1)
工程 | 所要時間 | 備考 |
---|---|---|
ロード | 25時間19分 | |
チェックポイント | 8時間45分 | |
OWLロード | 失敗 | ロードの途中で進まなくなった。ロード前にlog_enable(3,1)を付けないと起きる場合がある |
ロード作業内容(ケース2)
ケース1と同様にDDBJスパコンのmediumノードで実施(同条件)。
通常4~5分で起動するところを80分掛った。
その後のロードスピードもかなり遅かったため停止したが、再度起動して数日後にハングアップした。→スパコン管理者に依頼してプロセス停止
ロード作業内容(ケース3)
DBCLSのep2サーバ上でロードを試行。
メモリ64G用の環境で1週間で80億までロードできたが、徐々に速度が落ちて行き(後半の10億は2日掛っていた)、中断した。
スパコンのThinノードでは同一設定で10億トリプル以上ロードが進まなくなったことから、ハードの違いによってロード時の挙動が変わることを確認した。
ロード作業内容(ケース4)
MSSのサーバ上で、2月18日にリリースされたVirtuoso7.1でロードを試行。
I/Oハンドリングが改善されたという開発者ログがあったが、特に挙動に変化は見られなかった。
vmstatで監視したところ、設定値のメモリ上限を超えた後、I/O wait状態になりロードが進まなくなっていた。
リソースURI用Webページ構築
各オントロジーの内容精査
一覧表(dbcls:virtuoso7udp2上で調査)
オントロジー | graph名 | 全トリプル数 | リソースタイプ | タイプ別リソース数 | ブランクノード有(*1) |
---|---|---|---|---|---|
GMO | gmo/ | 6956 | owl:Class | 712 | No |
owl:DatatypeProperty | 7 | ||||
owl:FunctionalProperty | 7 | ||||
owl:ObjectProperty | 3 | ||||
owl:Ontology | 1 | ||||
MCCV | mccv/ | 293 | owl:ObjectProperty | 22 | No |
owl:DatatypeProperty | 22 | ||||
owl:Class | 9 | ||||
owl:FunctionalProperty | 3 | ||||
owl:Ontology | 1 | ||||
MEO | meo/ | 4468 | owl:Class | 783 | No |
owl:AnnotationProperty | 13 | ||||
owl:DatatypeProperty | 13 | ||||
rdfs:Datatype | 1 | ||||
owl:Ontology | 1 | ||||
MPO | mpo/ | 734 | owl:Class | 142 | No |
owl:ObjectProperty | 8 | ||||
owl:DatatypeProperty | 8 | ||||
owl:Ontology | 1 | ||||
PDO | pdo/ | 2881 | owl:Class | 266 | No |
owl:AnnotationProperty | 15 | ||||
owl:ObjectProperty | 10 | ||||
owl:Ontology | 1 | ||||
CSSO | csso/ | 2537 | owl:Class | 270 | No |
owl:AnnotationProperty | 20 | ||||
owl:Ontology | 1 | ||||
FALDO | faldo/ | 151 | owl:Class | 15 | YES |
owl:Restriction | 8 | ||||
owl:ObjectProperty | 6 | ||||
owl:DatatypeProperty | 1 | ||||
owl:Ontology | 1 | ||||
GO | go/ | 1211571 | owl:Axiom | 118267 | YES |
owl:Class | 48542 | ||||
owl:Restriction | 23913 | ||||
owl:AnnotationProperty | 44 | ||||
owl:ObjectProperty | 10 | ||||
owl:TransitiveProperty | 3 | ||||
owl:Ontology | 1 | ||||
SO | so/ | 43060 | owl:Axiom | 4761 | YES |
owl:Class | 2240 | ||||
owl:Restriction | 561 | ||||
owl:ObjectProperty | 48 | ||||
owl:AnnotationProperty | 21 | ||||
owl:NamedIndividual | 11 | ||||
obo:IAO_synonymtypedef | 8 | ||||
owl:TransitiveProperty | 7 | ||||
owl:SymmetricProperty | 4 | ||||
obo:IAO_subsetdef | 3 | ||||
owl:Ontology | 1 | ||||
Taxonomy(DDBJ) | taxonomy/ | 10518682 | ddbj:Taxon | 1093316 | YES |
ddbj:Rank | 29 | ||||
owl:DatatypeProperty | 26 | ||||
ddbj:GeneticCode | 20 | ||||
owl:ObjectProperty | 6 | ||||
owl:FunctionalProperty | 4 | ||||
owl:Class | 3 | ||||
owl:Ontology | 1 |
(*1) Typeを持つリソースの定義のobject部分がブランクノードになっているものがあるか。あればブランクノードを辿って入れ子構造で表現する必要がある
- Type毎のリソース数を取得するSPARQL
SELECT ?type (COUNT(?s) AS ?cnt) FROM <http://togogenome.org/graph/mccv/> WHERE { ?s a ?type } GROUP BY ?type ORDER BY DESC(?cnt)
- ブランクノードがあるか調べるSPARQL
SELECT ?p (COUNT(?blank) AS ?blank_cnt) FROM <http://togogenome.org/graph/mccv/> WHERE { ?s a ?type . ?s ?p ?blank FILTER isBlank(?blank). } GROUP BY ?p
定義取得用SPARQL
GMO
SELECT DISTINCT ?s ?p ?p_label ?o FROM <http://togogenome.org/graph/gmo/> WHERE { ?s a ?type . ?s ?p ?o . OPTIONAL { ?p rdfs:label ?p_label } } ORDER BY ?s
MCCV
SELECT DISTINCT ?s ?p ?p_label ?o FROM <http://togogenome.org/graph/mccv/> WHERE { ?s a ?type . ?s ?p ?o . OPTIONAL { ?p rdfs:label ?p_label } } ORDER BY ?s
課題
- 日本語データが含まれるので、表示がうまくいくか確認する
MEO
SELECT DISTINCT ?s ?p ?p_label ?o FROM <http://togogenome.org/graph/meo/> WHERE { ?s a ?type . ?s ?p ?o . OPTIONAL { ?p rdfs:label ?p_label } } ORDER BY ?s
課題
- 主語が<http://www.w3.org/2001/XMLSchema#date>のデータが含まれている。除去するか。