LoginSignup
3
3

More than 5 years have passed since last update.

S3からNeptuneにバルクロードする

Posted at

NeptuneにVertex(頂点)、Edge(辺)のデータをいれる手段の一つとしてS3を経由したバルクロードの方法があります。

公式ドキュメントにもある通り、csvを用意してIAMを設定すればほぼほぼ完了です。

IAMの用意

マネジメントコンソールから「クラスターのアクション」から「IAMロールの管理」を選択すると下記の画面が現れます。

スクリーンショット 2019-02-05 10.39.53.png

ここに、設定したIAMロールを紐付ければオッケーです。反映まで少し時間がかかります。

設定方法ですがここにある通り、

  • AmazonS3ReadOnlyAccessを使う
  • 信頼関係の編集を行う

以上の2点を行えばオッケーです。最終的に以下のようになると思います。

スクリーンショット 2019-02-05 10.45.53.png

スクリーンショット 2019-02-05 10.46.03.png

スクリーンショット 2019-02-05 10.46.09.png

データの用意

ここを参考にためしてみます。

ヘッダーとして、下記が最低限定義できれていれば、ほぼほぼオッケーでしょう。

スクリーンショット 2019-02-05 10.48.37.png

ちょうど、私は駅すぱあとを提供する会社に勤めていますので、駅データを抽出してCSV化してみました。
作成したcsvファイルをS3に配置します。

バルクロード

個人的都合でNeptuneをPrivate Subnet内に配置しているため、アクセスが許可されたEC2からバルクロードしたみたいと思います。

以下の2点がちゃんとできていれば、ほぼほぼオッケーです。

  • curlコマンドが使える
  • セキュリティグループが適切に設定されている
  • スクリーンショット 2019-02-05 11.04.00.png

EC2上で下記のコマンドを実行します。

curl -X POST \
    -H 'Content-Type: application/json' \
    https://あなたのクラスターエンドポイント:8182/loader -d '
    {
      "source" : "s3://csvを配置したバケット/作成した.csv",
      "format" : "csv",
      "iamRoleArn" : "さっきつくったIAMロール",
      "region" : "ap-northeast-1",
      "failOnError" : "FALSE"
    }'

そうすると下記のレスポンスが帰ってきます。

{
    "status" : "200 OK",
    "payload" : {
        "loadId" : "50b6ccc6-de0b-4830-ba15-*********"
    }
}

これは、挿入・更新が成功したというものではなく、どうやら処理を受け付けたというレスポンスっぽいです。

また、挿入後すぐに別のを挿入しようとするとエラーが帰ってきます。
(基本的に1タスクしか受け付けない?)

ロードとCPU使用率の関係

Neptuneのr4.largeインスタンスを使ってたので、ロード件数に対してどれくらいCPUを使うのかチェックしてみます。

結果としては、下記のようになりました。

スクリーンショット 2019-02-01 15.10.46.png

ただ、これを試す前に20万件を一気にバルクロードしたらCPUが100%に張り付いたまま帰ってこない事象が発生しました。(バグか?)

ベスト・プラクティスにあるように、ロード時には一旦強いインスタンスにスケールアップするのがベターですね。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3