Как я могу выполнять обычные R-функции для удаленного доступа к Hadoop на SQL Server?

как я могу выполнить обычный R-код на SQL Server без использования rx-функций Microsoft? Я думаю, что ComputeContext «RxInSqlServer» не тот? Но я не смог найти хорошую информацию о других параметрах ComputeContext.

Возможно ли это с этим заявлением?

rxSetComputeContext(ComputeContext)

Или я могу использовать его только для выполнения rx-функций? Другим вариантом может быть установка подключения к серверу в RStudio или VisualStudio?

Моя проблема: я хочу анализировать данные из hadoop через ODBC-соединение на SQL Server, поэтому я хотел бы использовать производительность удаленного SQL Server, а не данные в SQL Server. А потом я хочу проанализировать данные хаупа с помощью sparklyr.

Резюме: я хочу использовать производительность удаленного сервера, а не данные SQL Server. Таким образом, RStudio должен работать не локально, он должен выполнять и использовать память удаленного сервера.

Спасибо!


person user43348044    schedule 21.04.2017    source источник
comment
Извините, но я не понимаю (1) где находятся ваши данные, которые вы хотите проанализировать, и (2) на какой машине вы хотите запускать процессы R.   -  person Bob Albright    schedule 21.04.2017
comment
Я хочу выполнить данные через RStudio удаленно на SQL Server (с R), чтобы использовать производительность (дисковое пространство, память и т. д.) с удаленного сервера. Но я не хочу использовать базу данных SQL Server! Я подключаюсь через ODBC-соединение на SQL Server к hadoop. Преимущество: память удаленного сервера, и я думаю, что выполнение может выполняться параллельно на удаленном сервере с Microsoft R, верно? На моей локальной машине это невозможно.   -  person user43348044    schedule 21.04.2017
comment
Вы должны иметь возможность выполнять в удаленном контексте SQL, как вы описываете. В основном вам потребуется подключение ODBC с использованием проверки подлинности SQL к базе данных Hadoop (Polybase?). Чтобы это работало, вам нужно открыть брандмауэр Windows с повышенной безопасностью в базе данных SQL Server. В правилах исходящего трафика вам необходимо отключить блокировку доступа к сети для локальных учетных записей пользователей R в экземпляре SQL Server MSSQLSERVER.   -  person Bob Albright    schedule 21.04.2017
comment
Это звучит хорошо! Но как выглядит функция rxSetComputeContext для подключения к серверу Sql для удаленного выполнения R? У меня уже есть соединение на SQL Server с базой данных Hadoop, которое отлично работает. Я имею в виду эту функцию: msdn.microsoft.com/en-us /microsoft-r/scaler/packagehelp/   -  person user43348044    schedule 21.04.2017
comment
Я бы не делал какие-либо вызовы rxSetComputeContext (в основном использовал локальный вычислительный контекст при работе внутри SQL Server). Это вытянет данные из текущего блока SQL через ODBC (я так думаю?) в R.   -  person Bob Albright    schedule 21.04.2017
comment
Когда я использую local, R будет выполняться на моей локальной машине. Но я хочу выполнить на удаленной машине (SQL Server). Соединение ODBV находится на сервере. Удаленная машина подключается к Hadoop и сохраняет данные в xdf-файлы на диске на удаленном сервере. Так что все действия выполняются на удаленной машине, а результат попадает на мою локальную машину.   -  person user43348044    schedule 21.04.2017
comment
Я думаю, вы хотите вызвать rxExec и сбросить туда код, который даст вам контекст, который находится внутри SQL Server. Это не тот сценарий, который я часто использовал сам. Возможно, вам лучше вообще прочитать об операционализации (msdn. microsoft.com/en-us/microsoft-r/operationalize/), это позволит вам получить удаленную оболочку, но вам нужно будет установить/настроить ее отдельно от SQL Server.   -  person Bob Albright    schedule 21.04.2017
comment
Это звучит как то, что мне нужно. Я попробую и дам вам знать. Спасибо за вашу помощь!   -  person user43348044    schedule 21.04.2017
comment
Последний вопрос: во всех скриптах я читал про RxInSqlServer. Что это такое, я думаю, что он выполняет код и на удаленном сервере, верно? А затем отправить результаты на локальную машину.   -  person user43348044    schedule 22.04.2017
comment
Это разумный способ думать об этом. Я не уверен, как MS предлагает думать об этом, но я думаю об этом как о переносе вычислений для функций rx (BxlServer) на SQL Server.   -  person Bob Albright    schedule 22.04.2017


Ответы (1)


Концепция контекста вычислений в Microsoft R Server такова: «Где будут выполняться вычисления?»

При настройке контекста вычислений вы сообщаете Microsoft R Server, что вычисления будут выполняться либо на локальном компьютере (с «локальным» или «локальным» контекстами вычислений), либо сценарий будет выполняться на удаленном компьютере, на котором установлен Microsoft R Server. установлен на нем. Контексты удаленных вычислений определяются путем создания объекта контекста вычислений, а затем установки контекста для этого объекта.

Для SQL Server вы должны создать объект RxInSqlServer(), а затем вызвать rxSetComputeContext() для этого объекта. Для Hadoop объект будет создан с помощью вызова RxHadoopMR().

В коде это будет выглядеть примерно так:

CC <- RxHadoopMR( < context defined here > )
rxSetComputeContext(CC)

Чтобы увидеть использование при определении контекста, см. документацию (введите «?RxHadoopMR» в клиенте R, без кавычек).

Любой вызов функции «rx» после этого будет выполняться в кластере Hadoop без передачи данных клиенту; кроме результатов.

RxInSqlServer() будет следовать тому же шаблону.

Примечание. Для выполнения любых удаленных вычислений на этом компьютере должен быть установлен Microsoft R Server.

Если вы хотите запустить стандартную функцию R в контексте удаленных вычислений, вы должны обернуть эту функцию вызовом rxExec(). rxExec() разработан как интерфейс для распараллеливания любой функции R с открытым исходным кодом и обеспечения ее выполнения в удаленном контексте. См. документацию (введите «?rxExec» в клиенте R, без кавычек) для использования.

Информацию об эффективном распараллеливании см. в этом блоге: алгоритмы/" rel="nofollow noreferrer">https://blogs.msdn.microsoft.com/microsoftrservertigerteam/2016/11/14/performance-optimization-when-using-rxexec-to-parallelize-algorithms/

Вы назвали «без использования rx-функций Microsoft», и я интерпретирую это как «Я хотел бы использовать алгоритмы R с открытым исходным кодом для данных в SQL Server», с Microsoft R Server вы должны использовать rxExec () в качестве интерфейс для запуска Open Source R. Если вы вообще не хотите использовать функции rx, вам нужно будет запросить данные на локальный компьютер, а затем использовать Open Source R. Чтобы взаимодействовать с удаленным контекстом с помощью Microsoft R Server, голый минимум использует rxExec().

Вот как вы сможете выполнить первую часть вашего вопроса: «Как я могу выполнить обычный R-код на SQL Server без использования rx-функций Microsoft? Я думаю, что ComputeContext «RxInSqlServer» не подходит. ?"


На ваш второй вопрос: «Моя проблема: я хочу анализировать данные из hadoop через ODBC-соединение на SQL Server, поэтому я хотел бы использовать производительность удаленного SQL Server, а не данные в SQL Server. И затем я хочу проанализируйте данные хаупа с помощью sparklyr».

Во-первых, я хотел бы отметить, что с выпуском Microsoft R Server 9.1 вы можете использовать sparklyr в режиме реального времени с подключением MRS Spark, некоторые примеры см. в этом блоге: https://blogs.msdn.microsoft.com/microsoftrservertigerteam/2017/04/19/new-features-in-9-1-microsoft-r-server-with-sparklyr-interoperability/

Во-вторых, то, что вы пытаетесь сделать, очень сложно. Я могу думать о двух способах, которыми это возможно.

Во-первых, если у вас есть SQL Server PolyBase, вы можете настроить SQL Server для создания виртуальной таблицы, ссылающейся на данные в Hadoop, аналогично Hive. После того, как вы сослались на свои данные Hadoop в SQl Server, вы должны использовать вычислительный контекст RxInSqlServer() для этих таблиц. Это проанализирует данные в SQL Server и вернет результаты клиенту.

Вот подробный блог, объясняющий комплексную настройку Cloudera и SQL Server: https://blogs.msdn.microsoft.com/microsoftrservertigerteam/2016/10/17/integrating-polybase-with-cloudera-using-active-directory-authentication/

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

1) В вашем кластере Hadoop должен быть установлен и настроен OpenSSH 2) Ваш компьютер с SQL Server должен иметь возможность SSH в ваш кластер Hadoop 3) Вы должны иметь возможность разместить ключ SSH на своем компьютере с SQL Server в каталоге, который R Services процесс имеет доступ к

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

Затем вы должны сделать следующее:

  • На вашем клиентском компьютере вы должны определить пользовательскую функцию, содержащую анализ, который вы хотите выполнить, это может быть функция R с открытым исходным кодом, функции rx или их сочетание.
  • В этой пользовательской функции перед вызовом любых других функций R или rx вы должны определить объект контекста вычислений RxHadoopMR, который указывает на ваш кластер, ссылаясь на ключ SSH в каталоге на компьютере SQL Server, как если бы вы выполнялись с этого компьютера. (так же, как вы определили бы объект RxHadoopMR, если бы вы выполняли удаленную операцию Hadoop со своего клиентского компьютера).
  • Внутри этой пользовательской функции, сразу после определения RxHadoopMR(), вы должны вызвать rxSetComputeContext() для вашего определенного объекта RxHadoopMR().
  • В этой настраиваемой функции напишите реальный скрипт, который будет работать с данными в Hadoop.
  • После того, как эта функция определена, вы должны определить объект вычислительного контекста RxInSqlServer() на клиентском компьютере.
  • Вы должны установить контекст вычислений в RxInSqlServer()
  • Затем вы должны вызвать rxExec() с вашей пользовательской функцией в качестве входных данных.

Что это будет делать, так это выполнять вашу пользовательскую функцию на компьютере с SQL Server, что, как мы надеемся, заставит его определить свой вычислительный контекст как ваш кластер Hadoop и получить данные по SSH для анализа на компьютере с SQL Server; возврат результатов клиенту.

При этом Microsoft R Server не предназначен для использования таким образом, и если вы хотите оптимизировать производительность, используйте первый вариант и настройте PolyBase.

person Kirill Glushko - Microsoft    schedule 24.04.2017
comment
Какой фантастический ответ!!! Большое спасибо! Ваш ответ делает Microsoft R более понятным для меня. Я попробую это в ближайшие дни и буду следить за вашими сообщениями в блоге, очень интересно. У меня есть последний вопрос об инфраструктуре: я часто читаю. Это будет анализировать данные в SQL Server и возвращать результаты клиенту. Что значит точно? Анализировать в базе данных SQL Server или в памяти SQL Server? И где хранятся данные с вычислительным контекстом RxInSqlServer? Локально данные хранятся в файлах xdf. - person user43348044; 26.04.2017
comment
@ R123456789, Большое спасибо! Это будет анализировать данные в SQL Server и возвращать результаты клиенту. Я имею в виду, что SQL Server со службами R не должен запрашивать данные из SQL для выполнения анализа, MRS имеет прямой доступ к данным , и будет работать в рамках процесса SQL Server и возвращать результаты вашему R-клиенту. С вычислительным контекстом RxInSqlServer() результирующие данные будут храниться на основе того, как вы указываете параметр outData вашего вызова функции rx, это может быть XDF, таблица в SQL, фрейм данных или многие другие приемники. - person Kirill Glushko - Microsoft; 26.04.2017
comment
Глушко: Могу ли я использовать rxExec с вычислительным контекстом RxInSqlServer()? Для этого я задал отдельный вопрос (пример): stackoverflow.com/questions/43775573/ - person user43348044; 05.05.2017
comment
@user43348044 user43348044 Я оставил комментарий к вашему отдельному вопросу, пожалуйста, ответьте там. - person Kirill Glushko - Microsoft; 06.05.2017