распараллеливание массовой загрузки aws neptune

Я пытаюсь вставить 624118983 записи, разделенные на 1000 файлов, загрузка всего в neptune занимает 35 часов, что очень медленно. Я настроил экземпляр db.r5.large с двумя экземплярами. У меня есть 1000 файлов, хранящихся в ведре S3. У меня есть один запрос на загрузку, указывающий на папку корзины S3, в которой есть 1000 файлов. когда я получаю статус загрузки, я получаю ответ ниже.

      {
    "status" : "200 OK",
    "payload" : {
        "feedCount" : [
            {
                "LOAD_NOT_STARTED" : 640
            },
            {
                "LOAD_IN_PROGRESS" : 1
            },
            {
                "LOAD_COMPLETED" : 358
            },
            {
                "LOAD_FAILED" : 1
            }
        ],
        "overallStatus" : {
            "fullUri" : "s3://myntriplesfiles/ntriple-folder/",
            "runNumber" : 1,
            "retryNumber" : 0,
            "status" : "LOAD_IN_PROGRESS",
            "totalTimeSpent" : 26870,
            "startTime" : 1639289761,
            "totalRecords" : 224444549,
            "totalDuplicates" : 17295821,
            "parsingErrors" : 1,
            "datatypeMismatchErrors" : 0,
            "insertErrors" : 0
        }
    }

Я вижу, что LOAD_IN_PROGRESS всегда равен 1. Это означает, что neptune не пытается загружать несколько файлов при распараллеливании. Как мне сказать нептуну загрузить 1000 файлов при некотором распараллеливании, например, с коэффициентом параллелизма 10. Мне не хватает какой-либо конфигурации?

Вот как я использую api для массовой загрузки.

      curl -X POST -H 'Content-Type: application/json' https://neptune-hostname:8182/loader -d '
{
"source" : "s3://myntriplesfiles/ntriple-folder/",
"format" : "nquads",
"iamRoleArn" : "my aws arn values goes here",
"region" : "us-east-2",
"failOnError" : "FALSE",
"parallelism" : "HIGH",
"updateSingleCardinalityProperties" : "FALSE",
"queueRequest" : "FALSE"
}'

Пожалуйста посоветуй.

2 ответа

Массовый загрузчик Amazon Neptune не загружает несколько файлов параллельно, а распределяет содержимое каждого файла между числом доступных рабочих потоков на экземпляре записи (ограничено тем, как у вас есть свойство, установленное в команде загрузки). Если у вас нет других ожидающих операций записи в течение периода загрузки, вы можете установить для этого поля значение который будет использовать все доступные рабочие потоки. Во-вторых, большие файлы лучше, чем маленькие, поскольку это дает рабочим потокам больше возможностей, которые они могут выполнять параллельно. В-третьих, использование более крупного экземпляра модуля записи только на время загрузки предоставит намного больше рабочих потоков, которые могут выполнять задачи загрузки. Количество рабочих потоков, доступных в экземпляре, примерно вдвое превышает количество виртуальных ЦП, имеющихся в экземпляре. Довольно часто люди будут использовать что-то вроде db-r5-12xl только для массовой загрузки (для больших нагрузок), а затем уменьшать его до чего-то намного меньшего для обычных рабочих нагрузок запросов.

В дополнение к вышесказанному, сжатие файлов Gzip поможет ускорить чтение по сети. Neptune по умолчанию понимает файлы, сжатые gzip. ТакжеqueueRequest: TRUEможно настроить для достижения лучших результатов. Neptune может поставить в очередь до 64 запросов. Вместо того, чтобы отправлять только один запрос, вы можете запускать несколько файлов параллельно. Вы даже можете настроить зависимости между файлами, если вам нужно. Ссылка: https://docs.aws.amazon.com/neptune/latest/userguide/load-api-reference-load.html Вам нужно перейти на более крупный экземпляр модуля записи только в тех случаях, когда загрузка ЦП постоянно превышает 60%. .

Другие вопросы по тегам