2017-08-01 4 views
0

Ich versuche Rserve auf Microsoft R Client auszuführen und RevoScaleR-Funktionen über eine Netzwerkverbindung auszuführen. Ich kann nicht-RevoScaleR-Funktionen ausführen, aber RevoScaleR scheint ein Kompatibilitätsproblem zu haben.RevoScaleR-Funktionen schlagen über Rserve unter Linux fehl

Ich kann ein rserve starten, eine Verbindung zur Verfügung und Code ausführen, der nicht beteiligt ist RevoScaleR:

> library(RSclient) 
> rsc <- RSconnect(port=30120) 
> RSeval(rsc, ' 
+ model <- lm(dist~speed, cars) 
+ predict(model, cars)') 
     1   2   3   4   5   6   7   8 
-1.849460 -1.849460 9.947766 9.947766 13.880175 17.812584 21.744993 21.744993 
     9  10  11  12  13  14  15  16 
21.744993 25.677401 25.677401 29.609810 29.609810 29.609810 29.609810 33.542219 
     17  18  19  20  21  22  23  24 
33.542219 33.542219 33.542219 37.474628 37.474628 37.474628 37.474628 41.407036 
     25  26  27  28  29  30  31  32 
41.407036 41.407036 45.339445 45.339445 49.271854 49.271854 49.271854 53.204263 
     33  34  35  36  37  38  39  40 
53.204263 53.204263 53.204263 57.136672 57.136672 57.136672 61.069080 61.069080 
     41  42  43  44  45  46  47  48 
61.069080 61.069080 61.069080 68.933898 72.866307 76.798715 76.798715 76.798715 
     49  50 
76.798715 80.731124 

Aber wenn ich versuche, RevoScaleR Funktionen auszuführen, erhalte ich eine Fehlermeldung „Remote-Auswertung fehlgeschlagen“:

> RSeval(rsc, ' 
+ model <- rxLinMod(dist~speed, cars) 
+ rxPredict(model, cars)') 
Error in RSeval(rsc, "\nmodel <- rxLinMod(dist~speed, cars)\nrxPredict(model, cars)") : 
    remote evaluation failed 

rserve und erzeugt den folgenden Fehlerausgang:

> Error in doTryCatch(return(expr), name, parentenv, handler) : 
    ignoring SIGPIPE signal 
Error in doTryCatch(return(expr), name, parentenv, handler) : 
    Write error: expected 8 got 

Merkwürdigerweise revos caleR scheint zeitweise zu funktionieren, wenn ich Rserve in den Debug-Modus setze. Es funktioniert auch, wenn ich Rserve auf Microsoft R Server unter Windows ausführen, aber Rserve unter Windows ist stark eingeschränkt.

Einer meiner Verdacht ist, dass rserve der Forking könnte verursacht Probleme, aber die einzigen Gabel bezogenen Warnungen I RevoScaleR Bezug sind zu einem thread pool feature finden, die ich nicht aktiviert. Ich glaube, Verbindungen mit der BxlServer könnten auch ein Problem sein - Rserve scheint nicht einen neuen BxlServer auf fork zu erstellen - aber ich konnte keine Dokumentation darüber finden, und ich weiß nicht einmal, ob der BxlServer beteiligt ist, wenn Sie stellen keine Verbindung zu SQL Server her. GDB zeigt, dass das SIGPIPE in SendAndReceiveBxlFnToServer auftritt, das klingt, als wäre der BxlServer beteiligt.

Ich bin auf SLES 11 SP3 und Microsoft R Client 3.3.3.

Ist Rserve mit RevoScaleR inkompatibel? Wenn es kompatibel ist, muss ich irgendwelche zusätzlichen Einstellungen über das machen, was ich mit regulärem R tun würde, damit es funktioniert?

+0

Weitere Untersuchungen zeigen, dass Rserve im Debug-Modus beim ersten Start einen neuen BxlServer startet (aber keinen für neue Gabeln). Im regulären Modus startet Rserve niemals einen BxlServer. Etwas Wichtiges geht hier mit dem BxlServer weiter. – user2357112

+0

Weitere Untersuchungen zeigen, dass Rserve einen BxlServer startet, aber dann SIGHUPs und stirbt um die Zeit, die Rserve dämonisiert. Rserve dämmt im Debug-Modus nicht, was wahrscheinlich der Grund für den Unterschied im Debug-Modus ist. Ich denke, der BxlServer spielt nicht gut mit Rserves Forking, was ziemlich merkwürdig ist, wenn man bedenkt, wie aktuell der Artikel über Forking und den Thread-Pool ist. – user2357112

+0

Was machst du mit Rserve? Beachten Sie, dass MRS mit Operationalisierungstools geliefert wird. –

Antwort

0

Es ist bei Implementierungsdetails Stossen, aber die BxlServer manuell mit RevoScaleR:::startBxlServer() Start scheint Dinge zu beheben:

RSeval(rsc, 'RevoScaleR:::startBxlServer()') 

rserve des Forking Mechanismus scheint schlecht mit dem BxlServer zu interagieren - zumindest, Vanille rserve. Ich bin mir nicht sicher, was DeployR fork tut.

Verwandte Themen