Amazon Neptune バルクローダーの処理エラーの解決方法を教えてください。

最終更新日: 2020 年 10 月 6 日

Amazon Neptune バルクローダーを使用して、Amazon Simple Storage Service (Amazon S3) バケットからデータをロードしようとしています。しかし、一部のリクエストが失敗してしまいます。これを解決するにはどうすればよいですか?

簡単な説明

失敗を繰り返すデータリクエストのトラブルシューティングのために、各ジョブのステータスを確認します。その後、次の手順を実行して失敗したジョブを特定します。

  • 個々のロードに対しデフォルトのバルクローダー API を使用し、そのジョブのステータスを確認します。
  • 管理スクリプトと自動スクリプトを単一のジョブで使用します。Linux または UNIX システムであれば、自動スクリプトを作成し実行できます。

次の制限事項にご注意ください。

  • Neptune バルクローダー API は、すべてのロード処理のスナップショットビューを提供する訳ではありません。
  • Neptune クラスターで AWS Identity and Access Management (IAM) 認証が有効になっている場合は、バルクローダー API へのリクエストに署名する必要があります。
  • バルクローダー API は、直近 1024 回の読み込みジョブに関する情報のみをキャッシュします。保存されるエラーの詳細は、ジョブごとに直近の 10,000 エラーに関するもののみです。

解決方法

デフォルトの バルクローダー API を使用する

1.    ローダー ID を取得します。

$ curl -G  'https://neptunedemo-cluster.cluster-cw7ehemc1eeo.us-east-1.neptune.amazonaws.com:8182/loader'|jq
{
  "status": "200 OK",
  "payload": {
    "loadIds": [
      "c32bbd24-99a7-45ee-972c-21b7b9cab3e2",
      "6f6342fb-4ea3-452c-ac69-b4d117e37d5a",
      "647114a6-6ed4-4018-896c-e84a08fcf864",
      "521d33fa-7050-44d7-a961-b64ef4e2d1db",
      "d0d4714e-7cf8-415e-89f5-d07ed2732bf2"
    ]
  }
}

2.    各ジョブのステータスを 1 つずつチェックして、ジョブが成功していることを確認します。

curl -G 'https://neptunedemo-cluster.cluster-cw7ehemc1eeo.us-east-1.neptune.amazonaws.com:8182/loader/c32bbd24-99a7-45ee-972c-21b7b9cab3e2?details=true&errors=true&page=1&errorsPerPage=3'|jq
{
  "status": "200 OK",
  "payload": {
    "feedCount": [
      {
        "LOAD_COMPLETED": 2
      }
    ],
    "overallStatus": {
      "fullUri": "s3://demodata/neptune/",
      "runNumber": 5,
      "retryNumber": 0,
      "status": "LOAD_COMPLETED",
      "totalTimeSpent": 3,
      "startTime": 1555574461,
      "totalRecords": 8,
      "totalDuplicates": 8,
      "parsingErrors": 0,
      "datatypeMismatchErrors": 0,
      "insertErrors": 0
    },
    "errors": {
      "startIndex": 0,
      "endIndex": 0,
      "loadId": "c32bbd24-99a7-45ee-972c-21b7b9cab3e2",
      "errorLogs": []
    }
  }
}

管理スクリプトを使用する

実稼働プロセスでは、管理者スクリプトを使用して、Neptune バルクローダーで失敗したジョブを特定できます。管理スクリプトは、すべての読み込みジョブに関し、次のような形式で出力を生成します。

Startime-loadid:status,S3location,Errors

注意: Neptune クラスターへのアクセス権があれば、すべての Linux システムで管理者スクリプトを使用できます。

Linux または UNIX システムで自動スクリプトを作成し実行する

1.    テキストエディタを使用してスクリプトを作成します。

$ vi script

2.    cluster-endpoint:Port の部分は、適切な値に置き換える必要があります。

cluster_ep="https://cluster-endpoint:Port/loader"

for loadId in $(curl --silent -G "${cluster_ep}?details=true" | jq '.payload.loadIds[]');
do
        clean_loadId=$(echo -n ${loadId} | tr -d '"')
        time=$(date -d@$(curl --silent -G "${cluster_ep}/${clean_loadId}?details=true" | jq '.payload.overallStatus.startTime'))
        echo -n $time '-'
        echo -n ${clean_loadId}: $(curl --silent -G "${cluster_ep}/${clean_loadId}?details=true" | jq '.payload.overallStatus.status')
        echo -n ',S3 LOCATION': $(curl --silent -G "${cluster_ep}/${clean_loadId}?details=true" | jq '.payload.overallStatus.fullUri')
        echo -n ',ERRORS': $(curl --silent -G "${cluster_ep}/${clean_loadId}?details=truei&errors=true&page=1&errorsPerPage=3" | jq '.payload.errors.errorLogs')

        echo
done

3.    スクリプトを保存し、スクリプトを実行するアクセス許可を指定します。

chmod +x script

4.    依存ライブラリをインストールします。

sudo yum install jq

5.    スクリプトを実行します。

$ ./script

出力例を次に示します。

Thu Apr 18 08:01:01 UTC 2019 -c32bbd24-99a7-45ee-972c-21b7b9cab3e2: "LOAD_COMPLETED",S3 LOCATION: "s3://demodata/neptune/",ERRORS: null
Fri Apr 5 07:04:00 UTC 2019 -6f6342fb-4ea3-452c-ac69-b4d117e37d5a: "LOAD_COMPLETED",S3 LOCATION: "s3://demodata/neptune/",ERRORS: null
Fri Apr 5 07:01:30 UTC 2019 -647114a6-6ed4-4018-896c-e84a08fcf864: "LOAD_COMPLETED",S3 LOCATION: "s3://demodata/neptune/",ERRORS: null
Tue Mar 19 17:36:02 UTC 2019 -521d33fa-7050-44d7-a961-b64ef4e2d1db: "LOAD_COMPLETED",S3 LOCATION: "s3://demodata/neptune/",ERRORS: null
Tue Mar 19 17:35:45 UTC 2019 -d0d4714e-7cf8-415e-89f5-d07ed2732bf2: "LOAD_COMPLETED",S3 LOCATION: "s3://demodata/neptune/",ERRORS: null

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?