我在部署Spark-1.2.0集群(1master-3worker)之后,使用start-all.sh启动集群时没有问题,在webui上也能看到worker状态。
但是我提交任务到集群或者是启动spark-shell的时候,master会不停的报出错误如下:
[ERROR] [Logging.scala:75] logError: Asked to remove non-existent executor 0
[ERROR] [Logging.scala:75] logError: Asked to remove non-existent executor 1
[ERROR] [Logging.scala:75] logError: Asked to remove non-existent executor 2
[ERROR] [Logging.scala:75] logError: Asked to remove non-existent executor 3
... 而worker节点上Error log中为:
[ERROR] [Logging.scala:96] logError: Error running executor java.io.IOException: Cannot run program "/bin/java" (in directory "/usr/local/spark-1.2.0/work/app-20150113194629-0001/9"): error=2, 没有那个文件或目录 at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) at  org.apache.spark.deploy.worker.ExecutorRunner.fetchAndRunExecutor(ExecutorRunner.scala:135) at org.apache.spark.deploy.worker.ExecutorRunner$$anon$1.run(ExecutorRunner.scala:65) Caused by: java.io.IOException: error=2, 没有那个文件或目录 at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.<init>(UNIXProcess.java:187) at java.lang.ProcessImpl.start(ProcessImpl.java:134) at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) 我Google了很久也没发现有类似问题出现,望老师能给予帮助。
谢谢。

解决方案 »

  1.   

    已解决
    原来不是通信问题,仔细看了下log,是说在指定的位置(SPARK_HOME/work/app_xxxxxxx/0)无法执行'/bin/java',顿时感觉到还是环境设置的问题。回过头来检查SPARK_HOME/conf/spark-env.sh,文件里第一行配置了JAVA_HOME=${JAVA_HOME},原以为这样可以取到系统设置的JAVA_HOME配置,但输出了一下发现,centOS 或者 Mac OS里的jdk 是我自己安装的,不知为何,在spark里这样配置无效。
    将spark-env.sh里的JAVA_HOME配置注释掉就可以正常启动spark和提交spark任务了。