2017-06-28 50 views
0

我在具有以下配置的羣集上使用sparkR(spark 2.0.0,yarn):5臺機器(每個24個內核+ 200 GB RAM)。想與更多的參數運行sparkR.session()只佔總資源的比例分配給我的工作:SparkR - 覆蓋spark.conf中的默認參數

if(Sys.getenv("SPARK_HOME") == "") Sys.setenv(SPARK_HOME = "/...") 

library(SparkR, lib.loc = file.path(Sys.getenv('SPARK_HOME'), "R", "lib")) 

sparkR.session(master = "spark://host:7077", 
       appname = "SparkR", 
       sparkHome = Sys.getenv("SPARK_HOME"), 
       sparkConfig = list(spark.driver.memory = "2g" 
           ,spark.executor.memory = "20g" 
           ,spark.executor.cores = "4" 
           ,spark.executor.instances = "10"), 
       enableHiveSupport = TRUE) 

奇怪的是,似乎參數要傳遞給sparkContext,但在同一時間,我結束與使用100%資源的X-core執行程序(在本例中,5 * 24個內核= 120個內核可用; 120/4 = 30個執行程序)。

我試圖與分配沒有默認PARAMATERS創建另一火花defaults.conf(所以唯一的默認參數是那些火花文檔中存在的 - 他們應該很容易overrided)由:

if(Sys.getenv("SPARK_CONF_DIR") == "") Sys.setenv(SPARK_CONF_DIR = "/...") 

再者,我查看http://driver-node:4040上的Spark UI,執行程序的總數不正確(標籤爲「Executors」),但同時標籤「Environment」中的所有配置參數與我在R腳本中提供的參數完全相同。

任何人都知道可能是什麼原因? R API或某些基礎設施集羣特定問題(如紗線設置)存在問題

回答

1

我發現您必須使用spark.driver.extraJavaOptions

spark <- sparkR.session(master = "yarn", 
      sparkConfig = list(
       spark.driver.memory = "2g", 
       spark.driver.extraJavaOptions = 
       paste("-Dhive.metastore.uris=", 
        Sys.getenv("HIVE_METASTORE_URIS"), 
        " -Dspark.executor.instances=", 
        Sys.getenv("SPARK_EXECUTORS"), 
        " -Dspark.executor.cores=", 
        Sys.getenv("SPARK_CORES"), 
        sep = "") 
      )) 

或者,您可以更改​​參數,例如,

Sys.setenv("SPARKR_SUBMIT_ARGS"="--master yarn --driver-memory 10g sparkr-shell")