我如何在 SQL 服务器上为 hadoop 远程执行正常的 R 函数?
How can i perform normal R-functions for hadoop remote on SQL Server?
如何在不使用 Microsoft rx 函数的情况下在 SQL 服务器上执行正常的 R 代码?我认为 ComputeContext "RxInSqlServer" 不合适?但是我找不到关于其他 ComputeContext 选项的好信息。
这个声明可以吗?
rxSetComputeContext(ComputeContext)
或者我只能用它来执行 rx 功能吗?另一个选项可能是在 RStudio 或 VisualStudio 中设置服务器连接?
我的问题是:我想通过 SQL 服务器上的 ODBC 连接分析来自 hadoop 的数据,所以我想使用远程 SQL 服务器的性能,而不是数据SQL服务器。然后我想用 sparklyr 分析 hadoop 数据。
总结:我想使用远程服务器的性能,而不是 SQL 服务器数据。所以RStudio应该运行不是本地的,它应该执行和使用远程服务器的内存。
谢谢!
Microsoft R Server 中计算上下文的概念是“计算将在何处执行?”
设置计算上下文时,您是在告诉 Microsoft R Server 计算将在本地计算机(使用“本地”或“localpar”计算上下文)上进行,或者脚本将在远程计算机上执行上面安装了 Microsoft R Server。远程计算上下文是通过创建计算上下文对象,然后将上下文设置为该对象来定义的。
对于 SQL 服务器,您将创建一个 RxInSqlServer() 对象,然后对该对象调用 rxSetComputeContext()。对于 Hadoop,对象将通过 RxHadoopMR() 调用创建。
在代码中,它看起来像:
CC <- RxHadoopMR( < context defined here > )
rxSetComputeContext(CC)
要查看定义上下文的用法,请参阅文档(在 R 客户端中输入“?RxHadoopMR”,不要引号)。
在此之后对 "rx" 函数的任何调用都将在 Hadoop 集群上执行,不会将数据传输到客户端;除了结果。
RxInSqlServer() 将遵循相同的模式。
注意:要执行任何远程计算,必须在该计算机上安装 Microsoft R Server。
如果您希望 运行 远程计算上下文中的标准 R 函数,您必须将该函数包装在对 rxExec() 的调用中。 rxExec() 被设计为并行化任何开源 R 函数并允许其在远程上下文中执行的接口。请参阅文档(在 R 客户端中输入“?rxExec”,无引号)以了解用法。
有关高效并行化的信息,请参阅此博客:https://blogs.msdn.microsoft.com/microsoftrservertigerteam/2016/11/14/performance-optimization-when-using-rxexec-to-parallelize-algorithms/
您调用了 "without using the Microsoft rx-functions",我将其解释为 "I would like to use Open Source R Algorithms on data in-SQL Server",对于 Microsoft R 服务器,您必须使用 rxExec() 作为 运行 开源 R 的接口。如果您根本不想使用 rx 函数,则需要将数据查询到本地计算机,然后使用开源 R。要使用 Microsoft R Server 与远程上下文进行交互,最低限度是使用 rxExec()。
这就是您能够实现问题的第一部分的方式,"how can I perform normal R-Code on a SQL Server without using the Microsoft rx-functions? I think the ComputeContext "RxInSqlServer" 是不是正确的?"
对于你的第二次提问,"My Problem is: I want analyse data from hadoop via ODBC-Connection on the SQL Server, so I would like to use the performance of the remote SQL Server and not the data in SQL Server. And then I want analyse the hadoop-data with 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服务器PolyBase,你可以配置SQL服务器在Hadoop中创建一个虚拟的table引用数据,类似于Hive。在 SQl 服务器中引用 Hadoop 数据后,您将在这些 table 上使用 RxInSqlServer() 计算上下文。这将分析 SQL 服务器中的数据,并将结果 return 发送给客户端。
这是一篇详细的博客,解释了 Cloudera 和 SQL 服务器上的端到端设置:https://blogs.msdn.microsoft.com/microsoftrservertigerteam/2016/10/17/integrating-polybase-with-cloudera-using-active-directory-authentication/
我 不 推荐的第二个是 未测试、hacky 和具有以下先决条件:
1) 您的 Hadoop 集群必须安装并配置 OpenSSH
2) 您的 SQL 服务器机器必须能够通过 SSH 连接到您的 Hadoop 集群
3) 您必须能够将 SSH 密钥放置在 SQL 服务器计算机上 R Services 进程能够访问的目录中
我需要在这里添加另一个免责声明,不保证 可以正常工作,而且很可能不会正常工作。该软件并非设计为以这种方式运行。
然后您将执行以下操作:
- 在您的客户端计算机上,您可以定义一个自定义函数,其中包含您希望执行的分析,这可以是开源 R 函数、rx 函数或混合函数。
- 在此自定义函数中,在调用任何其他 R 或 rx 函数之前,您将定义一个指向您的集群的 RxHadoopMR 计算上下文对象,引用 SQL 服务器计算机上目录中的 SSH 密钥作为如果你是从那台机器上执行的。 (如果您要从客户端计算机执行远程 Hadoop 操作,则与定义 RxHadoopMR 对象的方式相同)。
- 在此自定义函数中,在定义 RxHadoopMR() 之后,您将立即在定义的 RxHadoopMR() 对象上调用 rxSetComputeContext()
- 仍然在这个自定义函数中,编写将对 Hadoop 中的数据进行操作的实际脚本。
- 定义此函数后,您将在客户端计算机上定义一个 RxInSqlServer() 计算上下文对象。
- 您可以将计算上下文设置为 RxInSqlServer()
- 然后您将调用 rxExec() 并将您的自定义函数作为输入。
这将做的是在 SQL 服务器计算机上执行您的自定义函数,这将有希望使其将其计算上下文定义为您的 Hadoop 集群,并通过 SSH 提取数据以在 SQL服务器机器; return将结果发送给客户。
话虽如此,这并不是 Microsoft R Server 的设计用途,如果您希望优化性能,请使用选项一并配置 PolyBase。
如何在不使用 Microsoft rx 函数的情况下在 SQL 服务器上执行正常的 R 代码?我认为 ComputeContext "RxInSqlServer" 不合适?但是我找不到关于其他 ComputeContext 选项的好信息。
这个声明可以吗?
rxSetComputeContext(ComputeContext)
或者我只能用它来执行 rx 功能吗?另一个选项可能是在 RStudio 或 VisualStudio 中设置服务器连接?
我的问题是:我想通过 SQL 服务器上的 ODBC 连接分析来自 hadoop 的数据,所以我想使用远程 SQL 服务器的性能,而不是数据SQL服务器。然后我想用 sparklyr 分析 hadoop 数据。
总结:我想使用远程服务器的性能,而不是 SQL 服务器数据。所以RStudio应该运行不是本地的,它应该执行和使用远程服务器的内存。
谢谢!
Microsoft R Server 中计算上下文的概念是“计算将在何处执行?”
设置计算上下文时,您是在告诉 Microsoft R Server 计算将在本地计算机(使用“本地”或“localpar”计算上下文)上进行,或者脚本将在远程计算机上执行上面安装了 Microsoft R Server。远程计算上下文是通过创建计算上下文对象,然后将上下文设置为该对象来定义的。
对于 SQL 服务器,您将创建一个 RxInSqlServer() 对象,然后对该对象调用 rxSetComputeContext()。对于 Hadoop,对象将通过 RxHadoopMR() 调用创建。
在代码中,它看起来像:
CC <- RxHadoopMR( < context defined here > )
rxSetComputeContext(CC)
要查看定义上下文的用法,请参阅文档(在 R 客户端中输入“?RxHadoopMR”,不要引号)。
在此之后对 "rx" 函数的任何调用都将在 Hadoop 集群上执行,不会将数据传输到客户端;除了结果。
RxInSqlServer() 将遵循相同的模式。
注意:要执行任何远程计算,必须在该计算机上安装 Microsoft R Server。
如果您希望 运行 远程计算上下文中的标准 R 函数,您必须将该函数包装在对 rxExec() 的调用中。 rxExec() 被设计为并行化任何开源 R 函数并允许其在远程上下文中执行的接口。请参阅文档(在 R 客户端中输入“?rxExec”,无引号)以了解用法。
有关高效并行化的信息,请参阅此博客:https://blogs.msdn.microsoft.com/microsoftrservertigerteam/2016/11/14/performance-optimization-when-using-rxexec-to-parallelize-algorithms/
您调用了 "without using the Microsoft rx-functions",我将其解释为 "I would like to use Open Source R Algorithms on data in-SQL Server",对于 Microsoft R 服务器,您必须使用 rxExec() 作为 运行 开源 R 的接口。如果您根本不想使用 rx 函数,则需要将数据查询到本地计算机,然后使用开源 R。要使用 Microsoft R Server 与远程上下文进行交互,最低限度是使用 rxExec()。
这就是您能够实现问题的第一部分的方式,"how can I perform normal R-Code on a SQL Server without using the Microsoft rx-functions? I think the ComputeContext "RxInSqlServer" 是不是正确的?"
对于你的第二次提问,"My Problem is: I want analyse data from hadoop via ODBC-Connection on the SQL Server, so I would like to use the performance of the remote SQL Server and not the data in SQL Server. And then I want analyse the hadoop-data with 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服务器PolyBase,你可以配置SQL服务器在Hadoop中创建一个虚拟的table引用数据,类似于Hive。在 SQl 服务器中引用 Hadoop 数据后,您将在这些 table 上使用 RxInSqlServer() 计算上下文。这将分析 SQL 服务器中的数据,并将结果 return 发送给客户端。
这是一篇详细的博客,解释了 Cloudera 和 SQL 服务器上的端到端设置:https://blogs.msdn.microsoft.com/microsoftrservertigerteam/2016/10/17/integrating-polybase-with-cloudera-using-active-directory-authentication/
我 不 推荐的第二个是 未测试、hacky 和具有以下先决条件:
1) 您的 Hadoop 集群必须安装并配置 OpenSSH 2) 您的 SQL 服务器机器必须能够通过 SSH 连接到您的 Hadoop 集群 3) 您必须能够将 SSH 密钥放置在 SQL 服务器计算机上 R Services 进程能够访问的目录中
我需要在这里添加另一个免责声明,不保证 可以正常工作,而且很可能不会正常工作。该软件并非设计为以这种方式运行。
然后您将执行以下操作:
- 在您的客户端计算机上,您可以定义一个自定义函数,其中包含您希望执行的分析,这可以是开源 R 函数、rx 函数或混合函数。
- 在此自定义函数中,在调用任何其他 R 或 rx 函数之前,您将定义一个指向您的集群的 RxHadoopMR 计算上下文对象,引用 SQL 服务器计算机上目录中的 SSH 密钥作为如果你是从那台机器上执行的。 (如果您要从客户端计算机执行远程 Hadoop 操作,则与定义 RxHadoopMR 对象的方式相同)。
- 在此自定义函数中,在定义 RxHadoopMR() 之后,您将立即在定义的 RxHadoopMR() 对象上调用 rxSetComputeContext()
- 仍然在这个自定义函数中,编写将对 Hadoop 中的数据进行操作的实际脚本。
- 定义此函数后,您将在客户端计算机上定义一个 RxInSqlServer() 计算上下文对象。
- 您可以将计算上下文设置为 RxInSqlServer()
- 然后您将调用 rxExec() 并将您的自定义函数作为输入。
这将做的是在 SQL 服务器计算机上执行您的自定义函数,这将有希望使其将其计算上下文定义为您的 Hadoop 集群,并通过 SSH 提取数据以在 SQL服务器机器; return将结果发送给客户。
话虽如此,这并不是 Microsoft R Server 的设计用途,如果您希望优化性能,请使用选项一并配置 PolyBase。