2016-03-03 29 views
2

我試圖啓動火花外殼。 。尋找解決此問題的幫助感激有這方面的快速幫助解決該問題的錯誤日誌中提到如下:火花殼牌錯誤:「spark.dynamicAllocation {最小/最大}執行人必須在Cloudera的快速啓動VM我提示以下錯誤:建立星火1.2.1後置

16/03/03 09:40:37 INFO EventLoggingListener: Logging events to hdfs://quickstart.cloudera:8020/user/spark/applicationHistory/local-1457026830824 
org.apache.spark.SparkException: spark.dynamicAllocation.{min/max}Executors must be set! 
    at org.apache.spark.ExecutorAllocationManager.validateSettings(ExecutorAllocationManager.scala:135) 
    at org.apache.spark.ExecutorAllocationManager.<init>(ExecutorAllocationManager.scala:98) 
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:377) 
    at org.apache.spark.repl.SparkILoop.createSparkContext(SparkILoop.scala:986) 
    at $iwC$$iwC.<init>(<console>:9) 
    at $iwC.<init>(<console>:18) 
    at <init>(<console>:20) 
    at .<init>(<console>:24) 
    at .<clinit>(<console>) 
    at .<init>(<console>:7) 
    at .<clinit>(<console>) 
    at $print(<console>) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.spark.repl.SparkIMain$ReadEvalPrint.call(SparkIMain.scala:852) 
    at org.apache.spark.repl.SparkIMain$Request.loadAndRun(SparkIMain.scala:1125) 
    at org.apache.spark.repl.SparkIMain.loadAndRunReq$1(SparkIMain.scala:674) 
    at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:705) 
    at org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:669) 
    at org.apache.spark.repl.SparkILoop.reallyInterpret$1(SparkILoop.scala:828) 
    at org.apache.spark.repl.SparkILoop.interpretStartingWith(SparkILoop.scala:873) 
    at org.apache.spark.repl.SparkILoop.command(SparkILoop.scala:785) 
    at org.apache.spark.repl.SparkILoopInit$$anonfun$initializeSpark$1.apply(SparkILoopInit.scala:123) 
    at org.apache.spark.repl.SparkILoopInit$$anonfun$initializeSpark$1.apply(SparkILoopInit.scala:122) 
    at org.apache.spark.repl.SparkIMain.beQuietDuring(SparkIMain.scala:270) 
    at org.apache.spark.repl.SparkILoopInit$class.initializeSpark(SparkILoopInit.scala:122) 
    at org.apache.spark.repl.SparkILoop.initializeSpark(SparkILoop.scala:60) 
    at org.apache.spark.repl.SparkILoop$$anonfun$process$1$$anonfun$apply$mcZ$sp$5.apply$mcV$sp(SparkILoop.scala:945) 
    at org.apache.spark.repl.SparkILoopInit$class.runThunks(SparkILoopInit.scala:147) 
    at org.apache.spark.repl.SparkILoop.runThunks(SparkILoop.scala:60) 
    at org.apache.spark.repl.SparkILoopInit$class.postInitialization(SparkILoopInit.scala:106) 
    at org.apache.spark.repl.SparkILoop.postInitialization(SparkILoop.scala:60) 
    at org.apache.spark.repl.SparkILoop$$anonfun$process$1.apply$mcZ$sp(SparkILoop.scala:962) 
    at org.apache.spark.repl.SparkILoop$$anonfun$process$1.apply(SparkILoop.scala:916) 
    at org.apache.spark.repl.SparkILoop$$anonfun$process$1.apply(SparkILoop.scala:916) 
    at scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:135) 
    at org.apache.spark.repl.SparkILoop.process(SparkILoop.scala:916) 
    at org.apache.spark.repl.SparkILoop.process(SparkILoop.scala:1011) 
    at org.apache.spark.repl.Main$.main(Main.scala:31) 
    at org.apache.spark.repl.Main.main(Main.scala) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:358) 
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:75) 
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 


scala> 

回答

2

唯一的例外是很清楚看來你已經設置的spark.dynamicAllocation.enabled物業給true,但未能設置spark.dynamicAllocation.minExecutorsspark.dynamicAllocation.maxExecutorsspark 1.2.1 documentation明確指出這一點(從spark.dynamicAllocation.enabled說明,重點是我的):

This requires the following configurations to be set: spark.dynamicAllocation.minExecutors, spark.dynamicAllocation.maxExecutors, and spark.shuffle.service.enabled

如果你看一下1.2 branch of Spark,你會發現,如果你不指定這些值,默認推遲到-1:

// Lower and upper bounds on the number of executors. These are required. 
private val minNumExecutors = conf.getInt("spark.dynamicAllocation.minExecutors", -1) 
private val maxNumExecutors = conf.getInt("spark.dynamicAllocation.maxExecutors", -1) 

此行爲已改變。如果你看一下updated 1.6 branch of Spark,你會看到,他們分別推遲到0Integer.MAX_VALUE,:

// Lower and upper bounds on the number of executors. 
private val minNumExecutors = conf.getInt("spark.dynamicAllocation.minExecutors", 0) 
private val maxNumExecutors = conf.getInt("spark.dynamicAllocation.maxExecutors", 
              Integer.MAX_VALUE) 

這只是意味着,你需要添加這些無論對SparkConf設置,或者以任何其他配置文件,你'提供給火花外殼:

val sparkConf = new SparkConf() 
    .set("spark.dynamicAllocation.minExecutors", minExecutors) 
    .set("spark.dynamicAllocation.maxExecutors", maxExecutors) 
+0

謝謝Mr.Yuval。您的迴應有助於解決問題。我已經完成了以下工作來解決問題。在火花default.conf文件,我已經設置了spark.dynamicAllocation.enabled =假,還確保HDFS被調用火花外殼之前啓動。這已經成功啓動了spark上下文。但是我不能夠啓動火花SQL。它說的錯誤是無法連接到蜂巢metastore。入門配置單元和紗線,並開始火花-SQL,但是有另外一個錯誤,並不能TOSTART火花-SQL。它是不可能在同一時間開始於spark.1.2.1火花外殼和火花SQL。 – Naga