Como resolver erros de processamento no Amazon Neptune Bulk Loader?

3 minuto de leitura
0

Estou tentando usar o Amazon Neptune Bulk Loader para carregar dados de um bucket do Amazon Simple Storage Service (Amazon S3). No entanto, algumas das solicitações falham. Como faço para solucionar isso?

Breve descrição

Para solucionar problemas de solicitações de dados que continuam falhando, verifique o status de cada trabalho. Em seguida, identifique os trabalhos que falharam fazendo o seguinte:

  • Use a API Bulk Loader padrão para cada carga individual e verifique o status de cada trabalho.
  • Use um script de administração e um script automatizado em um único trabalho. Você pode criar e executar o script automatizado em um sistema Linux ou UNIX.

Observe essas limitações:

  • a API Bulk Loader do Neptune não fornece uma exibição instantânea de todas as operações de carregamento.
  • Se a autorização do AWS Identity and Access Management (IAM) estiver habilitada no cluster do Neptune, as solicitações para a API Bulk Load deverão ser assinadas.
  • A API Bulk Loader armazena em cache as informações somente sobre as últimas 1024 trabalhos de carregamento. Ela armazena somente os detalhes dos últimos 10.000 erros por trabalho.

Resolução

Use a API Bulk Loader padrão

1.    Recupere os IDs do carregador:

$ 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.    Verifique o status de cada trabalho, um por um, para verificar se o trabalho foi bem-sucedido:

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

Use um script de administração

Você pode usar um script de administração para identificar uma falha na tarefa do Bulk Loader do Neptune em seu processo de produção. O script de administração gera uma saída no seguinte formato para todos os trabalhos de carregamento:

Startime-loadid:status,S3location,Errors

Observação: o script de administração pode ser usado em qualquer sistema Linux que tenha acesso ao cluster do Neptune.

Crie e execute o script automatizado em um sistema Linux ou UNIX

1.    Crie o script usando um editor de texto:

$ vi script

2.    Certifique-se de substituir cluster-endpoint:Port pelos valores apropriados:

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.    Salve o script e forneça permissões para que ele seja executado:

chmod +x script

4.    Instale a biblioteca dependente:

sudo yum install jq

5.    Execute o script:

$ ./script

Este é um exemplo de saída:

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

Informações relacionadas

Exemplo: Carregamento de dados em uma instância de banco de dados do Neptune

API Neptune Loader Get-Status

AWS OFICIAL
AWS OFICIALAtualizada há 4 anos