如何在sql server上为hadoop remote执行正常的r函数?

uyhoqukh  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(404)

如果不使用microsoft rx函数,如何在sql server上执行正常的r代码?我认为computecontext“rxinsqlserver”不合适?但是我找不到关于其他computecontext选项的好信息。
这种说法有可能吗?

rxSetComputeContext(ComputeContext)

或者我只能用它来执行接收功能?另一个选项是在rstudio或visualtudio中设置服务器连接?
我的问题是:我想通过odbc连接在sqlserver上分析hadoop中的数据,所以我想使用远程sqlserver的性能,而不是sqlserver中的数据。然后我想用sparklyr分析hadoop数据。
摘要:我希望使用远程服务器的性能,而不是sql server数据。所以rstudio不应该在本地运行,它应该执行并使用远程服务器的内存。
谢谢!

n3schb8v

n3schb8v1#

在microsoftrserver中,计算上下文的概念是“在哪里执行计算?”
设置计算上下文时,您告诉microsoft r server,计算将在本地计算机上进行(使用“local”或“localpar”计算上下文),或者脚本将在安装了microsoft r server的远程计算机上执行。远程计算上下文是通过创建一个计算上下文对象,然后将上下文设置为该对象来定义的。
对于sql server,您将创建一个rxinsqlserver()对象,然后对该对象调用rxsetcomputecontext()。对于hadoop,对象将通过rxhadoopmr()调用创建。
在代码中,它看起来像:

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

要查看定义上下文的用法,请参阅文档(在r客户机中输入“?rxhadoopmr”,不加引号)。
在此之后对“rx”函数的任何调用都将在hadoop集群上执行,没有数据传输到客户端;除了结果。
rxinsqlserver()将遵循相同的模式。
注意:要执行任何远程计算,必须在该计算机上安装microsoft r server。
如果希望在远程计算上下文上运行标准r函数,则必须将该函数 Package 在对rxec()的调用中。rxec()被设计为一个接口,用于并行化任何开源r函数,并允许在远程上下文中执行它。有关用法,请参阅文档(在r客户机中输入“?rxec”,无引号)。
有关高效并行化的信息,请参阅以下博客:https://blogs.msdn.microsoft.com/microsoftrservertigerteam/2016/11/14/performance-optimization-when-using-rxexec-to-parallelize-algorithms/
您调用了“不使用MicrosoftRx函数”,我将其解释为“我希望在sql server中的数据上使用开源r算法”,对于MicrosoftR服务器,您必须使用rxec()作为运行开源r的接口。如果您不想使用任何rx函数,您将需要查询本地机器上的数据,然后使用开源r。要使用microsoftrserver与远程上下文交互,最基本的方法是使用rxec()。
这就是如何实现问题的第一部分:“我如何在不使用microsoft rx函数的情况下在sql server上执行正常的r代码?我认为computecontext“rxinsqlserver”不是正确的?”
对于第二个问题,“我的问题是:我想通过sql server上的odbc连接分析来自hadoop的数据,所以我想使用远程sql server的性能,而不是sql server中的数据。然后我想用SparkyR分析hadoop数据。”
首先,我想指出的是,随着microsoft r server 9.1的发布,您可以将SparkyR与mrs spark连接一起使用,有关一些示例,请参见以下博客:https://blogs.msdn.microsoft.com/microsoftrservertigerteam/2017/04/19/new-features-in-9-1-microsoft-r-server-with-sparklyr-interoperability/
第二,你要做的是非常复杂的。我能想到两种可能的方法。
一种是,如果您有SQLServerPolybase,那么您可以配置SQLServer以在hadoop中创建一个引用数据的虚拟表,类似于hive。在sql server中引用hadoop数据之后,您将在这些表上使用rxinsqlserver()计算上下文。这将分析SQLServer中的数据,并将结果返回给客户端。
下面是一个详细的博客,解释了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)必须能够在sql server计算机上的r服务进程能够访问的目录中放置ssh密钥
我需要在这里添加另一个免责声明,这不能保证有效,而且很可能不会有效。软件的设计不是以这种方式运行的。
然后执行以下操作:
在您的客户机上,您可以定义一个自定义函数,其中包含您希望执行的分析,这可以是开源的r函数、rx函数或混合函数。
在这个自定义函数中,在调用任何其他r或rx函数之前,您将定义一个rxhadoopmr compute context对象,该对象指向您的集群,引用sqlserver机器上目录中的ssh密钥,就像您从该机器执行一样(与从客户机执行远程hadoop操作时定义rxhadoopmr对象的方式相同)。
在这个自定义函数中,在定义rxhadoopmr()之后,您将立即对已定义的rxhadoopmr()对象调用rxsetcomputecontext()
仍然在这个自定义函数中,编写实际的脚本,在hadoop中对数据进行操作。
定义此函数后,您将在客户机上定义一个rxinsqlserver()计算上下文对象。
您可以将计算上下文设置为rxinsqlserver()
然后将使用自定义函数作为输入调用rxec()。
这将在sqlserver机器上执行您的自定义函数,这将有希望使它将其计算上下文定义为hadoop集群,并通过ssh将数据拉到sqlserver机器上进行分析;将结果返回给客户端。
尽管如此,这并不是microsoftrserver的设计用途,如果您希望优化性能,请使用选项一并配置polybase。

相关问题