NeptuneのBulk Loadでつまづいた件(その1)
こんにちは。Ariaです。最近ルービックキューブにはまってます。(全然できない)
状況
Neptuneのbulk loadでOUT_OF_MEMORY_ERROR
が出て困りました。
- 今回エラーが発生した手順 1. Neptuneコンソール画面からノートブックを開く。
2. Jupyterのセルで%loadコマンドを実行し、データを読み込みトライ。
3. Load Failedと出たので、ターミナルから踏み台サーバにSSH接続し、以下コマンドでエラー内容を精査。
$ curl -X GET "https://your-neptune-endpoint:port/loader/{loaderId}?details=true&errors=true"
※エンドポイント、ポート、{loaderId}は適宜変更してくださいね
(参考: Neptuneユーザーガイドより)
Neptune DB インスタンスにデータをロードする
Neptune Loader Get-Status errorLogs
↓curlの出力結果
(前略)
"errorLogs" : [
{
"errorCode" : "OUT_OF_MEMORY_ERROR",
"errorMessage" : "Out of memory error. Resume load and try again.",
"fileName" : "s3://globi-neptune/full_data/edge/globi_interaction_edge_for_gremlin.csv",
"recordNum" : 0
},
(略)
結論
上記結果のerrorMessageに"Resume load and try again"とある通り、ノートブックで%loadコマンドを繰り返し実行した。今回のケースの場合、3回目の%loadコマンド実行でLoad completedが表示され、データが全権取り込まれたことが確認できた。
Overall Status: LOAD_COMPLETED
Total execution time: 0:06:33
Done.
考察
- (%loadコマンドが2回失敗したのは)NeptuneDBのクラスターの設定で、ケチって最大キャパシティーユニットを下げまくったのが原因かも。
- loadの途中でエラーが出たことで、2回目のロードで重複が出ないか心配だったが、そこはNeptuneが賢くやってくれるようだった。
余談
データが全件取り込めたかどうかの確認は、次のgremlinクエリで簡単に確認できます。
%%gremlin
g.V().count() // ノードの件数確認
g.E().count() // エッジの件数確認
Happy coding!