草庐IT

r - 如何在SQL Server上为hadoop远程执行正常的R功能?

coder 2024-01-09 原文

如何在不使用Microsoft rx函数的情况下在SQL Server上执行常规R代码?我认为ComputeContext“RxInSqlServer”不正确吗?但是我找不到关于其他ComputeContext-options的良好信息。

此声明有可能吗?

rxSetComputeContext(ComputeContext)

还是只能使用它来执行rx功能?另一个选择是在RStudio或VisualStudio中设置服务器连接吗?

我的问题是:我想通过SQL Server上的ODBC-Connection分析hadoop的数据,所以我想使用远程SQL Server的性能,而不是SQL Server中的数据。然后我想用sparklyr分析hadoop数据。

摘要:我想使用远程服务器的性能而不是SQL Server数据。因此,RStudio应该不在本地运行,它应该执行并使用远程服务器的内存。

谢谢!

最佳答案

Microsoft R Server中的计算上下文的概念是“在哪里执行计算?”

设置计算上下文时,您要告诉Microsoft R Server计算将在本地计算机上进行(使用“local”或“localpar”计算上下文),或者脚本将在具有Microsoft R Server的远程计算机上执行安装在上面。通过创建计算上下文对象,然后将上下文设置为该对象来定义远程计算上下文。

对于SQL Server,您将创建一个RxInSqlServer()对象,然后在该对象上调用rxSetComputeContext()。对于Hadoop,将通过RxHadoopMR()调用创建对象。

在代码中,它将类似于:

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

要查看定义上下文的用法,请参阅文档(在R Client中输入“?RxHadoopMR”,不带引号)。

此后,将在Hadoop集群上执行对“rx”函数的任何调用,而不会将任何数据传输到客户端。除了结果。

RxInSqlServer()将遵循相同的模式。

注意:要执行任何远程计算,必须在该计算机上安装Microsoft R Server。

如果希望在远程计算上下文上运行标准R函数,则必须将该函数包装在对rxExec()的调用中。 rxExec()被设计为用于并行化任何开源R函数并允许其在远程上下文中执行的接口(interface)。请参阅文档(在R Client中输入“?rxExec”,无引号)以了解用法。

有关有效并行化的信息,请参见以下博客:https://blogs.msdn.microsoft.com/microsoftrservertigerteam/2016/11/14/performance-optimization-when-using-rxexec-to-parallelize-algorithms/

您喊出“不使用Microsoft rx函数”的意思,我将其解释为“我想在SQL Server数据中使用开放源R算法”,对于Microsoft R Server,必须使用rxExec()作为接口(interface)来运行Open SourceR。如果您根本不使用任何rx函数,则需要将数据查询到本地计算机,然后使用Open SourceR。要使用Microsoft R Server与远程上下文进行接口(interface),最少使用rxExec()。

这样,您便可以实现询问的第一部分:“如何在不使用Microsoft rx函数的情况下在SQL Server上执行常规R代码?我认为ComputeContext“RxInSqlServer”不是正确的选择?

对于第二个问题,“我的问题是:我想通过SQL Server上的ODBC-Connection分析来自hadoop的数据,所以我想使用远程SQL Server的性能而不是SQL Server中的数据。然后我想要用sparklyr分析hadoop数据。”

首先,我想评论一下,随着Microsoft R Server 9.1的发布,您可以在MRS Spark连接中内联使用sparklyr,有关一些示例,请参见此博客: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。在SQl Server中引用Hadoop数据后,将在这些表上使用RxInSqlServer()计算上下文。这将分析SQL Server中的数据,并将结果返回给客户端。

以下是详细的博客,解释了在Cloudera和SQL Server上的端到端设置:https://blogs.msdn.microsoft.com/microsoftrservertigerteam/2016/10/17/integrating-polybase-with-cloudera-using-active-directory-authentication/

第二个是,未经测试的 hacky ,我会而不是推荐,它具有以下先决条件:

1)您的Hadoop集群必须已安装并配置了OpenSSH
2)您的SQL Server计算机必须具有SSH进入Hadoop群集的能力
3)您必须能够在SQL Server计算机上的SSH密钥放置R服务进程能够访问的目录中

我需要在此处添加另一个免责声明,不能保证可以正常工作,并且可能无法正常工作。该软件并非旨在以这种方式运行。

然后,您将执行以下操作:
  • 在客户端计算机上,您将定义一个自定义函数,其中包含您要执行的分析,可以是开源R函数,rx函数或混合函数。
  • 在此自定义函数中,在调用任何其他R或rx函数之前,您将定义一个指向您的群集的RxHadoopMR计算上下文对象,引用该SQL Server计算机上目录中的SSH密钥,就像您从该计算机上执行一样。 (如果要从客户端计算机执行远程Hadoop操作,则与定义RxHadoopMR对象的方式相同)。
  • 在此自定义函数中,在定义RxHadoopMR()之后,应立即在已定义的RxHadoopMR()对象
  • 上调用rxSetComputeContext()。
  • 仍在此自定义函数中,编写将对Hadoop中的数据进行操作的实际脚本。
  • 定义此函数后,您将在客户端计算机上定义RxInSqlServer()计算上下文对象。
  • 您将计算上下文设置为RxInSqlServer()
  • 然后,您将使用自定义函数作为输入来调用rxExec()。

  • 要做的是在SQL Server计算机上执行自定义功能,这有望使它将其计算上下文定义为Hadoop群集,并通过SSH提取数据以在SQL Server计算机上进行分析;将结果返回给客户。

    话虽如此,这并不是设计使用Microsoft R Server的方式,如果要优化性能,请使用Option One并配置PolyBase。

    关于r - 如何在SQL Server上为hadoop远程执行正常的R功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43537539/

    有关r - 如何在SQL Server上为hadoop远程执行正常的R功能?的更多相关文章

    1. ruby - 如何在 Ruby 中顺序创建 PI - 2

      出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits

    2. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

      我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

    3. ruby-openid:执行发现时未设置@socket - 2

      我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

    4. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

      如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

    5. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

      我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

    6. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

      exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

    7. ruby - 如何在续集中重新加载表模式? - 2

      鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

    8. ruby - 如何在 Ruby 中拆分参数字符串 Bash 样式? - 2

      我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"

    9. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

      我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

    10. ruby - Chef 执行非顺序配方 - 2

      我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul

    随机推荐