2017-08-01 107 views
3

我可以連接到驅動器就好了,加入以下內容:如何使用JMX遠程連接到星火工人在Dataproc

spark.driver.extraJavaOptions=-Dcom.sun.management.jmxremote \ 
           -Dcom.sun.management.jmxremote.port=9178 \ 
           -Dcom.sun.management.jmxremote.authenticate=false \ 
           -Dcom.sun.management.jmxremote.ssl=false 

但這樣做......

spark.executor.extraJavaOptions=-Dcom.sun.management.jmxremote \ 
           -Dcom.sun.management.jmxremote.port=9178 \ 
           -Dcom.sun.management.jmxremote.authenticate=false \ 
           -Dcom.sun.management.jmxremote.ssl=false 

...只有在驅動程序產生一堆錯誤... ...

Container id: container_1501548048292_0024_01_000003 
Exit code: 1 
Stack trace: ExitCodeException exitCode=1: 
    at org.apache.hadoop.util.Shell.runCommand(Shell.java:972) 
    at org.apache.hadoop.util.Shell.run(Shell.java:869) 
    at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:1170) 
    at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:236) 
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:305) 
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:84) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:748) 


Container exited with a non-zero exit code 1 

...並最終崩潰的工作。

上有工人沒有任何錯誤,它只是與退出:

[org.apache.spark.util.ShutdownHookManager] - Shutdown hook called 

Spark v2.2.0,而集羣是一個簡單的1M-2W-配置,和我的工作沒有不執行參數問題上運行。

+1

你檢查過,端口是免費的嗎?如果這些執行者在同一臺機器上實例化,則端口衝突會帶來麻煩。 –

+0

事實上,工人衝突的港口似乎是事故的根源。但是,我如何控制它呢?設置爲'0'會給我一個隨機的。是否有可能將不同的參數傳遞給不同的執行者? – habitats

+1

我建議設置足夠大的執行程序內存,只有一個適合每臺機器。您可能還必須調整資源管理器設置。 –

回答

0

由於Rick Mortiz指出,這個問題是相互矛盾的執行JMX端口。

設置:

-Dcom.sun.management.jmxremote.port=0 

產生一個隨機端口,並從星火刪除這些錯誤。要確定它使用哪個端口,請執行以下操作:

netstat -alp | grep LISTEN.*<executor-pid>/java 

其中列出了該進程當前打開的端口。