2017-04-21 44 views
0

如何在不使用Microsoft Rx函數的情況下在SQL Server上執行正常的R代碼?我認爲ComputeContext「RxInSqlServer」不是正確的嗎?但是我找不到關於其他ComputeContext選項的好信息。如何在SQL Server上爲hadoop遠程執行正常的R函數?

這是可能與此聲明?

rxSetComputeContext(ComputeContext) 

或者我只能用它來執行rx函數嗎?另一個選項可能是在RStudio或VisualStudio中設置服務器連接?

我的問題是:我想通過SQL Server上的ODBC連接分析hadoop中的數據,所以我想使用遠程SQL Server的性能而不是SQL Server中的數據。然後我想用sparklyr分析hadoop數據。

摘要:我想使用遠程服務器的性能而不是SQL Server數據。所以RStudio應該不是本地的,它應該執行並使用遠程服務器的內存。

謝謝!

+0

對不起,但我不明白(1)你想要分析的數據在哪裏,(2)你想讓R進程運行在哪臺機器上。 –

+0

我想在遠程服務器上使用遠程服務器上的RStudio(使用R)遠程執行數據以使用性能(磁盤空間,內存......)。但我不想使用SQL Server數據庫!我通過SQL Server上的ODBC連接連接到hadoop。優點是:遠程服務器的內存和我認爲的執行可以在遠程服務器上並行運行,這與微軟R對吧?在我的local機器上,這是不可能的。 – user43348044

+0

您應該可以像描述的那樣在遠程SQL上下文中執行操作。您基本上必須使用SQL身份驗證的ODBC連接到Hadoop數據庫(Polybase?)。爲此,您需要在SQL Server數據庫上打開「具有高級安全性的Windows防火牆」。在「出站規則」中,您需要禁用「阻止SQL Server實例MSSQLSERVER中R本地用戶帳戶的網絡訪問」。 –

回答

2

一個計算上下文的微軟R服務器的概念是,「哪裏會計算執行?」

當設置計算上下文,你是在告訴微軟R服務器,將在本地機器上出現計算(與「本地」或「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函數,則必須在調用rxExec()的過程中包裝該函數。 rxExec()被設計爲一個接口來並行化任何Open Source R函數並允許在遠程上下文中執行它。請參閱文檔(在R客戶端中輸入「?rxExec」,不含引號)以供使用。

有關高效並行的信息,請參閱本博客:https://blogs.msdn.microsoft.com/microsoftrservertigerteam/2016/11/14/performance-optimization-when-using-rxexec-to-parallelize-algorithms/

你叫了一聲「不使用微軟RX-功能」,我解釋這是「我想上使用開放式源R算法數據在SQL Server中「,使用Microsoft R Server時,必須使用rxExec()作爲運行Open Source R的接口。如果您根本不想使用rx函數,則需要將數據查詢到本地計算機,然後使用Open Source R.要使用Microsoft R Server與遠程上下文進行交互,最低限度使用rxExec()。

這就是你如何能夠實現你的問題的第一部分,「我如何在不使用Microsoft rx函數的情況下在SQL Server上執行正常的R代碼?我認爲ComputeContext」RxInSqlServer「isn'正確的?「


關於你的第二問,「我的問題是:我想通過在SQL Server ODBC連接被分析來自Hadoop的數據,所以我想用遠程SQL Server的性能,而不是在數據SQL Server。然後我想用sparklyr來分析hadoop數據。「

首先,我想評論說,與微軟R服務器9.1的版本,您可以使用在線sparklyr與MRS星火連接,對於一些示例,請參閱本博客: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/

第二,我會建議,是未經測試哈克,並具有以下prereqs:

1)您的Hadoop集羣必須有OpenSSH的安裝和配置 2)你的SQL Server計算機必須通過SSH進入Hadoop集羣的能力 3)你必須能夠將一個SSH密鑰Ø n,其中將R服務過程中有訪問

的能力,我需要在這裏添加其他聲明的目錄你的SQL Server機器,有這個工作沒有保障,並有可能的,它不會工作。該軟件不是以這種方式運行的。

你會然後執行以下操作:

  • 在您的客戶端機器,你會定義一個包含您希望進行分析的自定義功能,這可能是開源r功能,接收功能,或混合物。
  • 在此自定義函數中,在調用任何其他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。

+0

多麼美妙的答案!非常感謝!您的回答讓Microsoft R更清晰。我會在接下來的幾天內試用它,我會關注你的博客帖子,非常有趣。我得到了關於基礎架構的最後一個問題:我經常閱讀「這將分析SQL Server中的數據,並將結果返回給客戶端。」 exacly意味着什麼?在SQL Server中分析「數據庫」還是在SQL Server的「內存」中分析?數據存儲在計算上下文RxInSqlServer中的位置?本地數據存儲在xdf文件中。 – user43348044

+0

@ R123456789,非常感謝!通過「這將分析SQL Server中的數據,並將結果返回給客戶端。「,我的意思是,帶有R服務的SQL Server不必查詢SQL以外的數據來執行分析,MRS可以直接訪問數據,並且可以在SQL Server過程中運行,並將結果返回給R客戶端。使用RxInSqlServer()計算上下文,結果數據將根據您如何指定調用rx函數的「outData」參數進行存儲,這可以是XDF,SQL中的表,數據框或其他許多其他sinks。 –

+0

Glushko:我可以在RxInSqlServer()計算上下文中使用rxExec嗎?爲此,我問了一個單獨的問題(示例):http://stackoverflow.com/questions/43775573/how-to-use-rxexec-to- run-standard -r-remote – user43348044

相關問題