Концепция контекста вычислений в 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