Installation des R-Servers für SAP HANA

In meinem letzten Blog habe ich Integration der Programmiersprache R in SAP HANA bin ich zunächst darauf eingegangen was R ist und welche Bedeutung R heute für unsere Welt hat. Anschließend bin ich auf die Integration von R mit SAP HANA eingegangen und habe die Architektur dieser Integration erläutert. In diesem Blog möchte ich in die Praxis eintauchen. Zunächst werde ich die Installation beschreiben und dann anhand einem Beispiel die Verwendung von R im HANA Kontext erläutern.

Installation

In meinem letzten Blog habe ich erwähnt, dass die Verwendung von R ab HANA SP4 (Revision 28) möglich ist, deshalb gehe ich bei dieser Beschreibung der Installation davon aus, dass bereits ein SAP HANA System installiert ist mit der Revision 28 oder höher.

Die Installation besteht im Wesentlichen aus fünf Schritten:

  1. Installation des Linux Host
  2. Überprüfen der benötigen Pakete
  3. Installieren von R
  4. Installieren von Rserve
  5. Konfiguration der HANA Parameter für die Verwendung des R Host

Installation des Linux Host

Die R Installation muss auf einem separaten Linux Host durchgeführt werden. Derzeit wird nur Linux für die Verwendung von R mit SAP HANA unterstützt. Die SAP empfiehlt dabei die SUSE Linux Distribution. Für einen produktiven Betrieb empfehlen wir SUSE Linux Enterprise Server (SLES), welcher auch die Basis für SAP HANA darstellt. Ebenfalls empfehlen wir in einer Produktivumgebung mehrere dedizierte Hosts für ein High Availabilty System zu installieren. Für eine Testinstallation kann man jedoch durchaus auch auf openSUSE zurückgreifen. Auf die Installation des Linux Host gehe ich nicht ein, dies wird vorausgesetzt. Ebenfalls sollte ein separater User angelegt werden, der für die Ausführung des Rserve Dienstes verwendet wird.

Überprüfen der benötigten Pakete

Wenn der Linux Host zur Verfügung steht, muss überprüft werden, ob die folgenden benötigten Pakete installiert sind:

  • xorg-x11-devel
  • gcc-fortran

Dies kann über das Terminal mit folgendem Befehl überprüft werden:
rpm –qa | grep Wenn das xorg-x11-devel Paket installiert ist, dann wird die installierte Version angezeigt wie folgt dargestellt.

Wenn dasgcc-fortran Paket installiert ist, dann wird die installierte Version angezeigt wie folgt dargestellt.

Sind die Pakete nicht installiert, dann müssen diese installiert werden z.B. über den Paketmanager Yast unter SUSE Linux.

Installieren von R

Als nächstes laden Sie die Source von R in der Version 2.1.3 herunter. Diese kann alternativ auch von anderen Quellen, die auf der R Projekt Seite angegeben sind bezogen werden. Nachdem Sie das Archiv mit der R Source heruntergeladen haben, entpacken Sie dieses, passen die Berechtigung an, wechseln in das Verzeichnis und kompilieren und installieren Sie R auf Basis der Source. Dazu melden Sie sich am Terminal an und führen folgende Kommandos aus:
wget http://ftp5.gwdg.de/pub/misc/cran/src/base/R-2/R-2.13.0.tar.gz
gunzip R-2.13.0.tar.gz
tar xvf R-2.13.0.tar
chmod –R 777 R-2.13.0
cd R-2.13.0
./configure --enable-R-shlib
make clean
make
make install

Nachdem erfolgreichen Kompilieren wird das R Kommando in /usr/local/bin installiert. Wenn Sie es in ein anderes Verzeichnis installieren möchten, dann stellen Sie sicher, dass Sie die PATH Variable entsprechend setzen.

Installieren von Rserve

Melden Sie sich mit dem User für die Ausführung von Rserve an und laden Sie die Rserve Version 0.6-5 herunter.
Installieren Sie dann Rserve über das R Terminal. Dazu melden Sie sich am Terminal an und führen folgende Kommandos aus:
wget http://mirrors.softliste.de/cran/src/contrib/Archive/Rserve/Rserve_0.6-5.tar.gz
R
install.packages("/PATH/TO/YOUR/Rserve.tar.gz", repos = NULL)
library("Rserve") # test if installation worked, it should return no output
q()

Gegebenenfalls erhalten Sie folgende Meldung:
Warning in install.packages("/PATH/TO/YOUR/Rserve.tar.gz", repos = NULL) :
'lib = "/usr/local/lib64/R/library"' is not writable
Would you like to create a personal library
~/R/x86_64-unknown-linux-gnu-library/2.13
to install packages into? (y/n)

Ist dies der Fall, dann bestätigen Sie diese mit y.

Melden Sie sich dann mit dem Benutzer Root an und legen Konfigurationsdatei für den Rserve Dienst an /etc/Rserv.conf mit folgendem Inhalt:
maxinbuf 10000000 # (value should be physical memory in bytes / 2048)
Maxsendbuf 0
remote enable
Beachten Sie dabei, dass der maxinbuf Wert auf Basis des Arbeitsspeichers des R-Host ermittelt wird. Hat der R-Host z.B. 8 GB RAM, dann sollte der Wert entsprechend auf 4194304 eingestellt werden (8 589 934 592 / 2 048 = 4 194 304). Der Parameter maxinbuf definiert in kB die maximal erlaubte Größe des Input Buffer, welche der maximalen Datengröße entspricht die vom Client an den Server übertragen wird. Wenn der Server dazu verwendet mehrere parallele Verbindungen (R Funktionsaufrufe) zu verarbeiten, dann sollte dieser Parameter aus Sicherheitsgründen verkleinert werden. Wird der Server stattdessen dazu verwendet wenige parallele Verbindungen zu verarbeiten und es werden große Datenmengen erwartet, dann sollte der Wert entsprechend vergrößert werden entsprechend dem Arbeitsspeicher. Grundsätzlich wird der Parameter dazu verwendet um zu verhindern, dass böswillige Benutzer den Server in die „Knie“ zwingen indem Sie zu große Daten an den Server senden. Maxsendbuf definiert in kB die maximale Datengröße, die vom Server an den Client übertragen wird. Der Wert 0 bedeutet, dass es keine Einschränkung gibt.
Entsprechend sollte beim Einsatz von R mit HANA auch darauf geachten werden, dass der R-Host natürlich auch SAP HANA ausreichend RAM zur Verfügung. Ggf. müssen die Parameter angepasst werden und/oder der R-Host und/oder HANA vom Sizing her angepasst werden.

Melden Sie sich anschließend mit dem Benutzer an, der den Rserve Dienst ausführen soll und starten Sie den Dienst. Dazu melden Sie sich am Terminal an und führen folgendes Kommando (Rserve hört in diesem Fall auf dem Port 30120) aus:
R CMD Rserve --RS-port 30120 --no-save --RS-encoding "utf8"Sie sollten dann folgende Meldung erhalten.

Wenn der R Host neu gestartet wird, dann muss Rserve manuell neugestartet werden, da es derzeit keine Möglichkeit gibt, den Dienst automatisch nach einem Neustart starten zu lassen. Als Workaround können Sie z.B. crontab mit folgenden Shell Skript (Port und User muss entsprechend ersetzt werden) verwenden um den Dienst zu starten, falls dieser nicht läuft.
pgrep -u -f "Rserve --RS-port --no-save" || R CMD Rserve --RS-port --no-save

Konfiguration der HANA Parameter

Melden Sie sich am HANA Studio an mit dem Benutzer SYSTEM oder einem Benutzer der entsprechende Berechtigungen hat die HANA Datenbank Konfiguration (indexserver.ini) zu verändern. Alle relevanten Parameter für die R Konfiguration befinden sich in der Datei indexserver.ini unter der Sektion calcEngine.
Klicken Sie hierzu mit der rechten Maustaste auf Ihren Systemknoten im Navigator Tab des HANA Studios und wählen Sie Administration im Kontextmenü aus.
Wählen Sie dann auf der rechten Seite den Reiter Configuration aus. Dann wählen Sie indexserver.ini aus und klappen die Parameter der calcengine auf.
Es gibt derzeit drei Parameter, die für die R Konfiguration relevant sind.

  1. cer_timeout
    Connection timeout in Sekunden
    Default-Wert: 300
    Dieser Parameter ist besonders wichtig, da er die maximal erlaubte Laufzeit für die Ausführung einer einzelnen R Funktion definiert. Wenn Sie eine längere Laufzeit als 5 Minuten, sollten Sie diesen Parameter anpassen, andernfalls wird die Ausführung Ihres R Codes nach 5 Minuten abgebrochen.
  2. cer_rserve_addresses
    Dieser Parameter gibt eine Liste von Hosts an, welche den Rserve Dienst bereitstellen. Jeder Host hat einen Eintrag bestehend aus IPv4 Adresse und dem Port des Rserve Diensts.
    Die Einträge müssen wie folgt eingegeben werden: „host1:port1,host2:port2,…“
    Verwenden Sie mehrere Hosts um ein High Availability System zu erreichen.
  3. cer_rserve_maxsendsize
    Dieser Parameter definiert die maximale Größe (in kB) des Ergebnis, welches vom R-Host an HANA übertragen werden darf.
    Default-Wert: 0 (keine Beschränkung)
    Wenn die angegebene Größe überschritten wird, dann wird die Übertragung mit einem Fehler abgebrochen


Tragen Sie Ihre IP-Adresse mit Host (ggf. mehrere R Hosts) im entsprechenden Format ein. Ändern Sie ggf. die Parameter cer_timeout und cer_rserve_maxendsize.
Bevor Sie jedoch über den SQL Editor im HANA Studio eine R Prozedur erstellen können, müssen Sie dem Benutzer, der die Prozedur anlegt, das System Privilege CREATE R SCRIPT zuweisen z.B. mit dem User SYSTEM. Dies können Sie im HANA Studio über die Benutzerpflege erreichen oder durch mit folgendem SQL Statement
GRANT CREATE R SCRIPT TO "HANA Username" WITH ADMIN OPTIONDie Admin Option erlaubt es dem Benutzer das System Privilege auch anderen Benutzern zu zuweisen.

Erste R Prozedur anlegen
Nun können Sie R in SQL Script einbetten. Zum Testen der Konfiguration berechnen wir nun in einer R Prozedur die Wurzel aus 49 – das Ergebnis sollte also 7 sein.
Momentan gibt es bei der R Integration die Begrenzung, dass als Parameter nur Tabellen bzw. Tabellentypen erlaubt sind. Aus diesem Grund legen Sie zuerst eine Tabelle an für das Ergebnis über folgendes SQL Statement (in diesem Beispiel wird das Schema F004 verwendet).
create column table "F004"."R_RESULT"( "RESULT" FLOAT (20) null)

Dann legen Sie die R Prozedur über folgendes SQL Statement im SQL Editor an

DROP PROCEDURE "F004"."R_TEST_CALL";
CREATE PROCEDURE "F004"."R_TEST_CALL"(OUT result "F004"."R_RESULT") LANGUAGE RLANG AS BEGIN
radical=as.integer(49)
result<-data.frame(RESULT=sqrt(radical)) END;



Zum Testen der R Prozedur führen Sie folgendes SQL Statement im SQL Editor aus
CALL "F004"."R_TEST_CALL"( "R_RESULT" ) WITH OVERVIEW;
SELECT * FROM "R_RESULT";




Wenn Sie 7 als Ergebnis erhalten, dann funktioniert die Konfiguration und Sie können nun R Prozeduren erstellen und verwenden.

Fazit
Dem HANA Anwendungsentwickler stehen mit SQL Script, der Predictive Analysis Library, Fuzzy und seit SP4 mit R viele Möglichkeiten zur Verfügung um zum gewünschten Ergebnis zu kommen. Mit dem HANA UI Toolkit, welches auf der HANA XS Engine (vgl. mit einem Webserver) basiert, kann man bereits einen Vorgeschmack bekommen auf die HTML5 Anwendungen, die auf HANA entwickelt werden in Kombination mit den zuvor genannten Technologien, kann der Anwendungsentwickler innovative Applikationen entwickeln - insbesondere im Analytischen Bereich.

Getagged mit: , , , ,

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

*