Wie kann ich Verarbeitungsfehler in Amazon Neptune Bulk Loader beheben?

Lesedauer: 3 Minute
0

Ich versuche, Amazon Neptune Bulk Loader zu verwenden, um Daten aus einem Amazon Simple Storage Service (Amazon S3)-Bucket zu laden. Einige der Anfragen scheitern jedoch. Wie kann ich dieses Problem beheben?

Kurzbeschreibung

Überprüfen Sie den Status der einzelnen Aufträge, um Probleme mit fehlgeschlagenen Datenanforderungen zu beheben. Ermitteln Sie dann die fehlgeschlagenen Aufträge, indem Sie wie folgt vorgehen:

  • Verwenden Sie die Standard-API des Bulk Loader für jede einzelne Ladung und überprüfen Sie den Status jedes Auftrags.
  • Verwenden Sie ein Admin-Skript und ein automatisiertes Skript in einem Job. Sie können das automatisierte Skript in einem Linux- oder UNIX-System erstellen und ausführen.

Beachten Sie diese Einschränkungen:

  • Die Neptune-Bulk-Loader-API bietet keine Snapshot-Ansicht aller Ladevorgänge.
  • Wenn die Autorisierung für AWS Identity and Access Management (IAM) auf dem Neptune-Cluster aktiviert ist, müssen die Bulk-Load-API signiert werden.
  • Die Bulk Loader-API speichert nur Informationen zu den letzten 1024 Ladejobs. Es speichert nur die Fehlerdetails der letzten 10.000 Fehler pro Job.

Behebung

Verwenden Sie die Standard-API des Bulk Loader

1.    Abrufen der Loader-IDs:

$ 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.    Prüfen Sie nacheinander den Status jedes einzelnen Jobs, um sicherzustellen, dass der Job erfolgreich war:

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": []
    }
  }
}

Verwenden Sie ein Admin-Skript

Sie können ein Admin-Skript verwenden, um einen fehlgeschlagenen Neptune-Bulk-Loader-Job in Ihrem Produktionsprozess zu identifizieren. Das Admin-Skript generiert eine Ausgabe im folgenden Format für alle Ladejobs:

Startime-loadid:status,S3location,Errors

Hinweis: Das Admin-Skript kann von jedem Linux-System aus verwendet werden, das Zugriff auf den Neptune-Cluster hat.

Sie können das automatisierte Skript in einem Linux- oder UNIX-System erstellen und ausführen

1.    Erstellen Sie das Skript mit einem Texteditor:

$ vi script

2.    Stellen Sie sicher, dass Sie cluster-endpoint:Port durch die entsprechenden Werte ersetzen:

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.    Speichern Sie das Skript und stellen Sie dann die Berechtigungen für die Ausführung des Skripts bereit:

chmod +x script

4.    Installieren Sie die abhängige Bibliothek:

sudo yum install jq

5.    Führen Sie das Skript aus:

$ ./script

Dies ist eine Beispielausgabe:

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

Verwandte Informationen

Beispiel: Daten in eine Neptune-DB-Instance laden

Neptune Loader Get-Status-API

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 4 Jahren