我目前正在部署兩個Spark應用程序,我想限制每個應用程序的內核和執行程序。我的配置如下:Spark應用程序不能只用一個內核工作
spark.executor.cores=1
spark.driver.cores=1
spark.cores.max=1
spark.executor.instances=1
現在的問題是,有了這個確切的配置,一個流應用程序工作,而另一個沒有。不工作的應用保持狀態:運行和連續打印在日誌中顯示以下信息:
17/03/06 10:31:50 INFO JobScheduler: Added jobs for time 1488814310000 ms
17/03/06 10:31:55 INFO JobScheduler: Added jobs for time 1488814315000 ms
出人意料的是,如果我改變配置以下,這是不是現在的工作進行沒有問題的同一個應用程序。
spark.executor.cores=3
spark.driver.cores=1
spark.cores.max=3
spark.executor.instances=3
注:應用程序不會用值2工作這就是爲什麼我用一個最低的3
這樣看來,一些流媒體應用需要比別人更多的內核。我的問題是什麼決定了應用程序需要多少資源?爲什麼一個應用程序無法使用一個單核運行,同時它可以運行3個內核?
我只用一個接收器。事實上,我創建直接流與使用此指令MQTT: 'JavaReceiverInputDStream結果= MQTTUtils.createStream(JSSC,brokerUrl,mqttTopic,clientID的, \t \t \t \t用戶名,密碼,FALSE);' 基本上,後我使用下面的行來獲取流數據,並做進一步的分析: 'JavaDStream 線= results.flatMap(新FlatMapFunction <字符串,字符串>(){ \t \t \t公共迭代呼叫(串x){ \t \t \t \t return Arrays.asList(x).iterator(); \t \t \t} \t \t});' –
你可以看看星火UI,並檢查執行頁上的免費代碼。如果沒有空閒核心,請檢查正在運行的任務並在此處發帖。 – zsxwing
我一共有50個核心和13個使用。 –