Подключение C# приложения к Azure Databricks - PullRequest
2 голосов
/ 17 марта 2020

В настоящее время я работаю над проектом, в котором хранятся данные Azure Datalake. Datalake подключен к Azure Databricks.

Требование требует, чтобы Azure Databricks был подключен к приложению C#, чтобы иметь возможность выполнять запросы и получать результат от * 1012. * применение. В настоящее время мы решаем эту проблему так, что мы создали рабочую область для блоков данных с несколькими запросами, которые необходимо выполнить. Мы создали работу, которая связана с упомянутой рабочей областью. Из приложения C# мы вызываем ряд перечисленных API здесь, в этой документации , чтобы вызвать экземпляр задания и дождаться его выполнения. Однако я не смог извлечь результат ни из одного из API-интерфейсов, перечисленных в документации.

У меня такой вопрос: мы используем правильный подход или что-то не видим? Если это путь к go, каков был ваш опыт в извлечении результата из успешно выполненного задания в Azure Блок данных из приложения C#.

1 Ответ

1 голос
/ 17 марта 2020

Корпорация Майкрософт предлагает замечательное эталонное решение для архитектуры , которое также может помочь вам получить больше информации

Я не уверен, что использование REST API - лучший способ для go получить выходные данные своей работы из Azure DataBricks.

Прежде всего REST API имеет ограничение скорости на экземпляр блока данных. Это не так уж плохо при 30 запросах в секунду, но это сильно зависит от масштаба вашего приложения и других применений экземпляра блока данных, если этого достаточно. Этого должно быть достаточно для создания задания, но если вы хотите опросить статус задания для завершения, этого может быть недостаточно.

Существует также ограниченная пропускная способность при передаче данных через REST API. Например: в соответствии с документами выходной API будет возвращать только первые 5 МБ выходных данных прогона. Если вам нужны более крупные результаты, вам придется хранить их где-то еще, прежде чем получать их из приложения C#.

Альтернативный метод поиска

Короче говоря: Использовать Azure PaaS в ваших интересах с blobstorage и eventgrid.

Это ни в коем случае не исчерпывающее решение, и я уверен, что кто-то может придумать лучшее, но это сработало для меня в подобных случаях.

Что вы можете сделать, это записать результат своих заданий в какое-либо облачное хранилище, подключенное к блокам данных, а затем получить результат из этого хранилища позже. В этом уроке есть шаг , который демонстрирует базовую концепцию c для хранения результатов работы с SQL хранилищем данных , но вы можете использовать любое хранилище, которое вам нравится, например, хранилище BLOB-объектов

Допустим, вы сохраняете результат в хранилище BLOB-объектов. Каждый раз, когда новый вывод задания записывается в BLOB-объект, вы можете инициировать событие. Вы можете подписаться на эти события через Azure Eventgrid и использовать их в своем приложении. Существует. net SDK , который позволит вам сделать это. Событие будет содержать BLOB-объект URI, который можно использовать для передачи данных в ваше приложение.

Форма docs Событие blobcreated будет выглядеть примерно так:

[{
  "topic": "/subscriptions/{subscription-id}/resourceGroups/Storage/providers/Microsoft.Storage/storageAccounts/my-storage-account",
  "subject": "/blobServices/default/containers/test-container/blobs/new-file.txt",
  "eventType": "Microsoft.Storage.BlobCreated",
  "eventTime": "2017-06-26T18:41:00.9584103Z",
  "id": "831e1650-001e-001b-66ab-eeb76e069631",
  "data": {
    "api": "PutBlockList",
    "clientRequestId": "6d79dbfb-0e37-4fc4-981f-442c9ca65760",
    "requestId": "831e1650-001e-001b-66ab-eeb76e000000",
    "eTag": "\"0x8D4BCC2E4835CD0\"",
    "contentType": "text/plain",
    "contentLength": 524288,
    "blobType": "BlockBlob",
    "url": "https://my-storage-account.blob.core.windows.net/testcontainer/new-file.txt",
    "sequencer": "00000000000004420000000000028963",
    "storageDiagnostics": {
      "batchId": "b68529f3-68cd-4744-baa4-3c0498ec19f0"
    }
  },
  "dataVersion": "",
  "metadataVersion": "1"
}]

Будет важно назвать ваши двоичные объекты с необходимой информацией, такой как идентификатор задания и идентификатор запуска. Вы также можете создавать собственные события, что увеличит сложность решения, но позволит вам добавить больше деталей к вашему событию.

Как только вы получите в своем приложении данные blob , созданные в вашем приложении. вы можете использовать SDK хранилища, чтобы получить blobdata для использования в вашем приложении. В зависимости от логики вашего приложения c вам также придется управлять идентификатором задания и запускать идентификаторы в приложении, в противном случае вы рискуете получить выходные данные задания в своем хранилище, которые больше не подключены к процессу в вашем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...