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

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

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%に張り付いたまま帰ってこない事象が発生しました。(バグか?)

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

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)