2016-06-29 13 views
4

Kann die sparklyr R package Verbindung zu YARN-verwalteten Hadoop-Clustern herstellen? Dies scheint in der Dokumentation cluster deployment nicht dokumentiert zu sein. Mit Hilfe der SparkR Paket, das Schiffe mit Funken es möglich ist, zu tun:Kann sparklyr mit Funken auf einem Garn-gesteuerten Hadoop-Cluster eingesetzt werden?

# set R environment variables 
Sys.setenv(YARN_CONF_DIR=...) 
Sys.setenv(SPARK_CONF_DIR=...) 
Sys.setenv(LD_LIBRARY_PATH=...) 
Sys.setenv(SPARKR_SUBMIT_ARGS=...) 

spark_lib_dir <- ... # install specific 
library(SparkR, lib.loc = c(sparkr_lib_dir, .libPaths())) 
sc <- sparkR.init(master = "yarn-client") 

Allerdings, wenn ich die letzten Zeilen über swaped mit

library(sparklyr) 
sc <- spark_connect(master = "yarn-client") 

ich Fehler erhalten:

Error in start_shell(scon, list(), jars, packages) : 
    Failed to launch Spark shell. Ports file does not exist. 
    Path: /usr/hdp/2.4.2.0-258/spark/bin/spark-submit 
    Parameters: '--packages' 'com.databricks:spark-csv_2.11:1.3.0,com.amazonaws:aws-java-sdk-pom:1.10.34' '--jars' '<path to R lib>/3.2/sparklyr/java/rspark_utils.jar' sparkr-shell /tmp/RtmpT31OQT/filecfb07d7f8bfd.out 

Ivy Default Cache set to: /home/mpollock/.ivy2/cache 
The jars for the packages stored in: /home/mpollock/.ivy2/jars 
:: loading settings :: url = jar:file:<path to spark install>/lib/spark-assembly-1.6.1.2.4.2.0-258-hadoop2.7.1.2.4.2.0-258.jar!/org/apache/ivy/core/settings/ivysettings.xml 
com.databricks#spark-csv_2.11 added as a dependency 
com.amazonaws#aws-java-sdk-pom added as a dependency 
:: resolving dependencies :: org.apache.spark#spark-submit-parent;1.0 
    confs: [default] 
:: resolution report :: resolve 480ms :: artifacts dl 0ms 
    :: modules in use: 
    ----------------------------------------- 

Ist sparklyr eine Alternative zu SparkR oder ist es auf dem SparkR Paket gebaut?

+1

Mit Blick auf die [sparkapi] (https://github.com/rstudio/sparkapi) readme Die Antwort auf die letzte Frage lautet eindeutig: "Es ist eine Alternative zu SparkR". Immer noch nicht sicher, wie man 'master =' Garn-Client '' obwohl –

+0

verwandte Frage: http://stackoverflow.com/questions/38486163/sparklyr-ports-file-and-java-error-mac-os - scheint, dass Das Problem taucht immer wieder in verschiedenen Betriebssystemen und Konfigurationen auf. – desertnaut

Antwort

5

Ja, Sparklyr kann gegen einen Garn verwalteten Cluster verwendet werden. Um Garn-Managed Cluster zu verbinden muss man:

  1. Set SPARK_HOME Umgebungsvariable auf die richtige Funken Home-Verzeichnis verweisen.
  2. eine Verbindung mit dem Cluster Funken des entsprechenden Master-Standort, zum Beispiel mit: sc <- spark_connect(master = "yarn-client")

Siehe auch: http://spark.rstudio.com/deployment.html

+0

Ich habe versucht, SPARK_HOME zu setzen, aber das Problem mit der Port-Datei ist geblieben. Es ist mir nicht klar, wo genau 'spark_connect' sucht oder wohin es schaut. Ist es notwendig, Namen und Ports aus 'yarn-site.xml' herauszuziehen? –

+0

Derzeit ist 'sparklyr' eine Alternative zu' funcrr'; Ich habe nicht versucht, sie beide Seite an Seite zu verwenden, da dies derzeit nicht unterstützt wird. Können Sie bestätigen, dass Sie Ihr Skript ausführen, ohne dass die Bibliothek 'sparkr' geladen wurde? Wenn das immer noch nicht funktioniert, könnten Sie Ihre Systeminformationen auslagern: Betriebssystem, Version, x86/x64, Funkenumverteilung, usw., damit wir uns das ansehen und reproduzieren können? Wir würden uns freuen, dieses Problem unter http://github.com/rstudio.sparklyr öffnen zu können, um mehr Leute dazu zu bringen, dies zu entsperren. –

+1

Ich habe endlich die Dinge funktioniert, indem ich 'config = list()' zu den Eingängen von 'spark_connect()' hinzufüge. Scheint, dass die Fehlermeldung ein bisschen irreführend ist. Ist das eigentliche Problem rund um die Spark Pakete installiert? –

0

Sind Sie möglicherweise Cloudera Hadoop (CDH) mit?

ich frage, wie ich hatte das gleiche Problem, wenn die CDH-bereitgestellt Spark-Distro mit:

Sys.getenv('SPARK_HOME') 
[1] "/usr/lib/spark" # CDH-provided Spark 
library(sparklyr) 
sc <- spark_connect(master = "yarn-client") 
Error in sparkapi::start_shell(master = master, spark_home = spark_home, : 
     Failed to launch Spark shell. Ports file does not exist. 
     Path: /usr/lib/spark/bin/spark-submit 
     Parameters: --jars, '/u01/app/oracle/product/12.1.0.2/dbhome_1/R/library/sparklyr/java/sparklyr.jar', --packages, 'com.databricks:spark-csv_2.11:1.3.0','com.amazonaws:aws-java-sdk-pom:1.10.34', sparkr-shell, /tmp/Rtmp6RwEnV/file307975dc1ea0.out 

Ivy Default Cache set to: /home/oracle/.ivy2/cache 
The jars for the packages stored in: /home/oracle/.ivy2/jars 
:: loading settings :: url = jar:file:/usr/lib/spark/lib/spark-assembly-1.6.0-cdh5.7.0-hadoop2.6.0-cdh5.7.0.jar!/org/apache/ivy/core/settings/ivysettings.xml 
com.databricks#spark-csv_2.11 added as a dependency 
com.amazonaws#aws-java-sdk-pom added as a dependency 
:: resolving dependencies :: org.apache.spark#spark-submit-parent;1.0 
    confs: [default] 
    found com.databricks#spark-csv_2.11;1.3.0 in central 
    found org.apache.commons#commons-csv;1.1 in central 
    found com.univocity#univocity-parsers;1.5.1 in central 
    found com. 

jedoch, nachdem ich eine vorgefertigte Version von Databricks heruntergeladen (Spark-1.6.1, Hadoop 2.6) und zeigte SPARK_HOME dort, ich konnte erfolgreich verbinden:

Sys.setenv(SPARK_HOME = '/home/oracle/spark-1.6.1-bin-hadoop2.6') 
sc <- spark_connect(master = "yarn-client") # OK 
library(dplyr) 
iris_tbl <- copy_to(sc, iris) 
src_tbls(sc) 
[1] "iris" 

Cloudera noch nicht SparkR in seiner Verteilung umfassen, und ich vermuten, dass sparklyr kann immer noch eine subtile Abhängigkeit von SparkR haben. Hier sind die Ergebnisse, wenn sie mit den CDH-bereitgestellt Funken zu arbeiten versuchen, aber mit dem config=list() Argumente, wie in this thread von sparklyr Fragen auf Github vorgeschlagen:

sc <- spark_connect(master='yarn-client', config=list()) # with CDH-provided Spark 
Error in sparkapi::start_shell(master = master, spark_home = spark_home, : 
    Failed to launch Spark shell. Ports file does not exist. 
    Path: /usr/lib/spark/bin/spark-submit 
    Parameters: --jars, '/u01/app/oracle/product/12.1.0.2/dbhome_1/R/library/sparklyr/java/sparklyr.jar', sparkr-shell, /tmp/Rtmpi9KWFt/file22276cf51d90.out 

Error: sparkr.zip does not exist for R application in YARN mode. 

Auch, wenn Sie den äußersten rechten Teil des Parameters Teils überprüfen des Fehlers (beide Ihre und meine), werden Sie einen Verweis auf sparkr-shell ...

(getestet mit sparklyr0.2.28, sparkapi 0.3.15, R-Sitzung von RStudio Server, Oracle Linux)

sehen
+1

Vielen Dank. Ich bin aber auf einem HDP-Cluster mit function 1.6.1 - also sollten die Under-the-hood-R-Methoden in Spark verfügbar sein. Das Problem scheint zu sein, dass mir eine bestimmte Port-Konfigurationsdatei fehlt, die anscheinend für nichts anderes benötigt wird. –

0

Für dieses Problem wird ein Upgrade auf sparklyr Version 0.2.30 oder neuer empfohlen. Aktualisieren Sie mit devtools::install_github("rstudio/sparklyr"), gefolgt von einem Neustart der R-Sitzung.

+0

Danke für die Weiterverfolgung, aber die Aktualisierung (auf 0.2.31) hat das Portdateiproblem nicht gelöst. Die Spark-Installation auf meinem Cluster scheint nicht die erwartete Konfigurationsdatei zu haben. 'sparklyr' versuchte' '/ spark/bin/spark-submit' 'zu nennen, aber die Konfigurationsdateien sind' .../spark/conf', die Dinge wie 'hive-site.xml' und 'spark-defaults' enthalten. conf' aber keine "ports" Datei. –

+0

Ich sollte beachten, dass diese Spark-Installation wurde stark mit beiden "pyspark" und "SparkR" ohne Problem verwendet. –

1

Ja, es kann, aber es gibt einen Haken an alles andere, was geschrieben wurde, was in der Blogging-Literatur sehr schwer fassbar ist, und das dreht sich um die Konfiguration der Ressourcen.

Der Schlüssel ist, diese: wenn Sie es im lokalen Modus ausführen müssen, Sie müssen nicht über die Ressourcen konfigurieren deklarativ, aber wenn man in dem GARN Cluster ausführen, müssen Sie unbedingt haben, um diese Ressourcen zu erklären. Es hat lange gedauert, bis ich den Artikel gefunden habe, der etwas Licht in dieses Thema gebracht hat, aber als ich es einmal probiert habe, hat es funktioniert.

Hier ist ein (beliebigen) Beispiel mit dem Schlüssel Referenz:

config <- spark_config() 
config$spark.driver.cores <- 32 
config$spark.executor.cores <- 32 
config$spark.executor.memory <- "40g" 

library(sparklyr) 

Sys.setenv(SPARK_HOME = "/usr/local/spark") 
Sys.setenv(HADOOP_CONF_DIR = '/usr/local/hadoop/etc/hadoop/conf') 
Sys.setenv(YARN_CONF_DIR = '/usr/local/hadoop/etc/hadoop/conf') 

config <- spark_config() 
config$spark.executor.instances <- 4 
config$spark.executor.cores <- 4 
config$spark.executor.memory <- "4G" 

sc <- spark_connect(master="yarn-client", config=config, version = '2.1.0') 

R Bloggers Link to Article