Comment résoudre les erreurs de traitement dans Amazon Neptune Bulk Loader ?

Date de la dernière mise à jour : 06/10/2020

J'essaie d'utiliser Amazon Neptune Bulk Loader pour charger des données à partir d'un compartiment Amazon Simple Storage Service (Amazon S3). Mais certaines requêtes échouent. Comment puis-je résoudre ce problème ?

Brève description

Pour résoudre les problèmes d'échec répété des requêtes de données, vérifiez le statut de chaque tâche. Ensuite, identifiez les tâches qui ont échoué en procédant comme suit :

  • Utilisez l'API Bulk Loader par défaut pour chaque chargement individuel et vérifiez le statut de chaque tâche.
  • Utilisez un script d'administration et un script automatisé dans une tâche. Vous pouvez créer et exécuter le script automatisé sur un système Linux ou UNIX.

Veuillez noter ces limitations :

  • L'API Neptune Bulk Loader ne fournit pas de vue d'instantané de toutes les opérations de chargement.
  • Si l'autorisation AWS Identity and Access Management (IAM) est activée sur le cluster Neptune, les requêtes envoyées à l'API Bulk Load doivent être signées.
  • L'API Bulk Loader met en cache les informations uniquement sur les 1 024 dernières tâches de chargement. Elle ne stocke les détails des erreurs que pour les 10 000 dernières erreurs par tâche.

Résolution

Utiliser l'API Bulk Loader par défaut

1.    Récupérez les ID du chargeur :

$ 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.    Vérifiez une par une le statut de chaque tâche pour vous assurer de la réussite la tâche :

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

Utiliser un script d'administration

Vous pouvez utiliser un script d'administration pour identifier une tâche Neptune Bulk Loader ayant échoué dans votre processus de production. Le script d'administration génère une sortie au format suivant pour toutes les tâches de chargement :

Startime-loadid:status,S3location,Errors

Remarque : le script d'administration peut être utilisé à partir de n'importe quel système Linux ayant accès au cluster Neptune.

Créer et exécuter le script automatisé sur un système Linux ou UNIX

1.    Créez le script à l'aide d'un éditeur de texte :

$ vi script

2.    Veillez à remplacer cluster-endpoint:Port par les valeurs appropriées :

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.    Enregistrez le script, puis fournissez les autorisations nécessaires à l'exécution du script :

chmod +x script

4.    Installez la bibliothèque dépendante :

sudo yum install jq

5.    Exécutez le script :

$ ./script

Ceci est l'exemple de sortie :

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

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?