Поделиться через


Определение и использование контекстов вычислений (учебник по SQL Server и RevoScaleR)

Область применения: SQL Server 2016 (13.x) и более поздних версий

Эта часть 4 входит в состав серии учебников по RevoScaleR, посвященной использованию функций RevoScaleR в SQL Server.

В предыдущем учебнике вы использовали функции RevoScaleR для проверки объектов данных. В этом учебнике представлена функция RxInSqlServer, которая позволяет определить контекст вычислений для удаленного экземпляра SQL Server. С помощью удаленного контекста вычислений можно переместить выполнение R из локального сеанса в удаленный сеанс на сервере.

  • Элементы удаленного контекста вычислений SQL Server
  • Включение трассировки в объекте контекста вычислений

RevoScaleR поддерживает несколько контекстов вычислений: Hadoop, Spark в HDFS и SQL Server в базе данных. Для SQL Server функция RxInSqlServer используется для подключения к серверу и передачи объектов между локальным компьютером и удаленным контекстом выполнения.

Создание и задание контекста вычисления

Функция RxInSqlServer, которая создает контекст вычислений SQL Server, использует следующие сведения:

  • Строка подключения для экземпляра SQL Server
  • спецификация способа обработки выходных данных;
  • необязательная спецификация каталога общих данных;
  • необязательные аргументы, которые позволяют выполнять трассировку или указывать уровень трассировки.

В этом разделе описывается каждая из этих частей.

  1. Укажите строку подключения к экземпляру, в котором будут производиться вычисления. Вы можете повторно использовать созданную ранее строку подключения.

    Использование имени для входа SQL

    sqlConnString <- "Driver=SQL Server;Server=<SQL Server instance name>; Database=<database name>;Uid=<SQL user nme>;Pwd=<password>"
    

    Использование проверки подлинности Windows

    sqlConnString <- "Driver=SQL Server;Server=instance_name;Database=RevoDeepDive;Trusted_Connection=True"
    
  2. Укажите способ обработки выходных данных. Следующий скрипт задает в локальном сеансе R ожидание результатов задания R на сервере перед обработкой следующей операции. Он также подавляет вывод из удаленных вычислений в локальном сеансе.

    sqlWait <- TRUE
    sqlConsoleOutput <- FALSE
    

    Аргумент wait функции RxInSqlServer может иметь перечисленные ниже значения.

    • TRUE. Задание будет блокироваться и не вернет результат, пока его выполнение не завершится успешно или с ошибкой.

    • FALSE. Задания не будут блокироваться и вернут результат немедленно, что позволит продолжать выполнять другой код на языке R. Однако даже в режиме без блокировки подключение клиента к SQL Server должно поддерживаться во время выполнения задания.

  3. При необходимости укажите расположение локального каталога для общего использования локальным сеансом R и удаленным компьютером SQL Server и ее учетными записями.

    sqlShareDir <- paste("c:\\AllShare\\", Sys.getenv("USERNAME"), sep="")
    

    Если вы хотите вручную создать каталог для совместного использования, можно добавить строку, подобную следующей:

    dir.create(sqlShareDir, recursive = TRUE)
    
  4. Передайте аргументы для конструктора RxInSqlServer, чтобы создать объект контекста вычислений.

    sqlCompute <- RxInSqlServer(  
         connectionString = sqlConnString,
         wait = sqlWait,
         consoleOutput = sqlConsoleOutput)
    

    Синтаксис RxInSqlServer почти идентичен синтаксису функции RxSqlServerData, которая ранее использовалась для определения источника данных. Однако есть несколько важных отличий.

    • Объект источника данных, определенный с помощью функции RxSqlServerDataуказывает, где хранятся данные.

    • Напротив, контекст вычислений (определенный с помощью функции RxInSqlServer) указывает, где должно производиться агрегирование и другие вычисления.

    Определение контекста вычислений не влияет на другие обычные вычисления R, которые могут выполняться на рабочей станции, и не изменяет источник данных. Например, можно определить в качестве источника данных локальный текстовый файл, но изменить контекст вычислений на SQL Server и выполнять все операции чтения и обобщения данных на компьютере SQL Server.

  5. Активируйте удаленный контекст вычислений.

    rxSetComputeContext(sqlCompute)
    
  6. Возврат сведений о контексте вычислений, включая его свойства.

    rxGetComputeContext()
    
  7. Верните контекст вычислений обратно на локальный компьютер, указав ключевое слово "Local" (использование удаленного контекста вычислений описано в следующем учебнике).

    rxSetComputeContext("local")
    

Совет

Чтобы просмотреть список других ключевых слов, поддерживаемых этой функцией, в командной строке R введите help("rxSetComputeContext") .

Включить трассировку

Иногда в операциях, которые работают в локальном контексте, могут возникать проблемы при работе в контексте удаленных вычислений. Если вы хотите анализировать проблемы или наблюдать за производительностью, можно включить трассировку в контексте вычислений для помощи при устранении неполадок во время выполнения.

  1. Создайте новый контекст вычислений, использующий ту же строку подключения, но добавьте аргументы traceEnabled и traceLevel в конструктор RxInSqlServer.

    sqlComputeTrace <- RxInSqlServer(
        connectionString = sqlConnString,
        #shareDir = sqlShareDir,
        wait = sqlWait,
        consoleOutput = sqlConsoleOutput,
        traceEnabled = TRUE,
        traceLevel = 7)
    

    В этом примере свойству traceLevel присваивается значение 7, что означает "показывать все данные трассировки".

  2. Используйте функцию rxSetComputeContext и указывайте контекст с включенной трассировкой по имени.

    rxSetComputeContext(sqlComputeTrace)
    

Следующие шаги

Узнайте, как переключать контексты вычислений для выполнения кода R на сервере или локально.