Сбой фабрики данных Azure при копировании файлов больших данных

Я использую фабрику данных Azure для копирования данных из REST API в Azure Data Lake Store. Ниже приведен JSON моей активности.

{
    "name": "CopyDataFromGraphAPI",
    "type": "Copy",
    "policy": {
        "timeout": "7.00:00:00",
        "retry": 0,
        "retryIntervalInSeconds": 30,
        "secureOutput": false
    },
    "typeProperties": {
        "source": {
            "type": "HttpSource",
            "httpRequestTimeout": "00:30:40"
        },
        "sink": {
            "type": "AzureDataLakeStoreSink"
        },
        "enableStaging": false,
        "cloudDataMovementUnits": 0,
        "translator": {
            "type": "TabularTranslator",
            "columnMappings": "id: id, name: name, email: email, administrator: administrator"
        }
    },
    "inputs": [
        {
            "referenceName": "MembersHttpFile",
            "type": "DatasetReference"
        }
    ],
    "outputs": [
        {
            "referenceName": "MembersDataLakeSink",
            "type": "DatasetReference"
        }
    ]
}

REST API создан мной. Сначала для целей тестирования я возвращаю всего 2500 строк, и мой конвейер работал нормально. Он скопировал данные из вызова REST API в Azure Data Lake Store.

После тестирования я обновляю REST API, и теперь он возвращает 125000 строк. Я протестировал этот API в клиенте REST, и он работает нормально. Но в действии копирования фабрики данных Azure при копировании данных в Azure Data Lake Store возникает следующая ошибка.

{
    "errorCode": "2200",
    "message": "Failure happened on 'Sink' side. ErrorCode=UserErrorFailedToReadHttpFile,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Failed to read data from http source file.,Source=Microsoft.DataTransfer.ClientLibrary,''Type=System.Net.WebException,Message=The remote server returned an error: (500) Internal Server Error.,Source=System,'",
    "failureType": "UserError",
    "target": "CopyDataFromGraphAPI"
}

Сторона приемника - это хранилище озера данных Azure. Есть ли ограничение на размер содержимого, которое я копирую из вызова REST в Azure Data Lake Store.

Я также повторно протестировал конвейер, обновив вызов REST API (2500 строк), и он работал нормально, и когда я обновил API-вызов, он вернул 125000 строк. Мой конвейер начинает выдавать ту же вышеупомянутую ошибку.

Мой исходный набор данных в операции копирования

{
    "name": "MembersHttpFile",
    "properties": {
        "linkedServiceName": {
            "referenceName": "WM_GBS_LinikedService",
            "type": "LinkedServiceReference"
        },
        "type": "HttpFile",
        "structure": [
            {
                "name": "id",
                "type": "String"
            },
            {
                "name": "name",
                "type": "String"
            },
            {
                "name": "email",
                "type": "String"
            },
            {
                "name": "administrator",
                "type": "Boolean"
            }
        ],
        "typeProperties": {
            "format": {
                "type": "JsonFormat",
                "filePattern": "arrayOfObjects",
                "jsonPathDefinition": {
                    "id": "$.['id']",
                    "name": "$.['name']",
                    "email": "$.['email']",
                    "administrator": "$.['administrator']"
                }
            },
            "relativeUrl": "api/workplace/members",
            "requestMethod": "Get"
        }
    }
}

Набор данных приемника

{
    "name": "MembersDataLakeSink",
    "properties": {
        "linkedServiceName": {
            "referenceName": "DataLakeLinkService",
            "type": "LinkedServiceReference"
        },
        "type": "AzureDataLakeStoreFile",
        "structure": [
            {
                "name": "id",
                "type": "String"
            },
            {
                "name": "name",
                "type": "String"
            },
            {
                "name": "email",
                "type": "String"
            },
            {
                "name": "administrator",
                "type": "Boolean"
            }
        ],
        "typeProperties": {
            "format": {
                "type": "JsonFormat",
                "filePattern": "arrayOfObjects",
                "jsonPathDefinition": {
                    "id": "$.['id']",
                    "name": "$.['name']",
                    "email": "$.['email']",
                    "administrator": "$.['administrator']"
                }
            },
            "fileName": "WorkplaceMembers.json",
            "folderPath": "rawSources"
        }
    }
}

person Waqas Idrees    schedule 04.04.2018    source источник


Ответы (1)


Насколько я знаю, ограничений по размеру файла нет. У меня был CSV размером 10 ГБ с миллионами строк, и озеру данных все равно.

Что я вижу, так это то, что, хотя в сообщении об ошибке написано «сторона стока», код ошибки - UserErrorFailedToReadHttpFile, поэтому я думаю, что проблема может быть решена, если вы измените httpRequestTimeout в своем источнике, на данный момент это «00:30:40» и возможно, из-за этого прерывается передача строки. 30 минут - много времени для 2500 строк, но, возможно, 125k там не поместятся.

Надеюсь, это помогло!

person Martin Esteban Zurita    schedule 04.04.2018
comment
Но ответ придет через 10 минут. И конвейер выходит из строя около 11 минут - person Waqas Idrees; 04.04.2018
comment
Сообщение = Удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера. Это указывает на ошибку в вашем REST API, а не на проблему конфигурации фабрики данных. Если хотите, поделитесь с нами связанными услугами и набором данных, чтобы мы могли проверить, все ли в порядке. Также попробуйте усилить свой api с помощью другого инструмента, некоторых значений между ними (10 тыс. Строк, 40 тыс. Строк, 80 тыс. Строк), или, может быть, вы периодически теряете связь (если вы размещаете остальные api). - person Martin Esteban Zurita; 04.04.2018
comment
Я много раз тестировал свой API с помощью Postman с 125K строками, и он работает нормально. Я поделюсь с вами временем выполнения - person Waqas Idrees; 04.04.2018