记录一次因为spark内置环境问题引发的惨案
问题:Spark在spark-env.sh中的环境变量不生效
错误日志
- Terminal发现启动worker的时候会出现错误:
1
2
3
4
5
6
7
8
9[root@ceshi3 sbin]# ./start-slaves.sh
- /usr/local/spark-1.6.0-bin-hadoop2.6/conf/spark-env.sh: line 9: export: `/usr/local/spark-1.6.0-bin-hadoop2.6/lib/spark-assembly-1.6.0-hadoop2.6.0.jar': not a valid identifier
- ceshi3: /usr/local/spark-1.6.0-bin-hadoop2.6/conf/spark-env.sh: line 9: export: `/usr/local/spark-1.6.0-bin-hadoop2.6/lib/spark-assembly-1.6.0-hadoop2.6.0.jar': not a valid identifier
- ceshi3: starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/spark-1.6.0-bin-hadoop2.6/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-ceshi3.out
- ceshi3: failed to launch org.apache.spark.deploy.worker.Worker:
- ceshi3: /usr/local/spark-1.6.0-bin-hadoop2.6/bin/spark-class: line 87: /usr/local/spark-1.6.0-bin-hadoop2.6/bin/java: 没有那个文件或目录
- ceshi3: /usr/local/spark-1.6.0-bin-hadoop2.6/bin/spark-class: line 87: exec: /usr/local/spark-1.6.0-bin-hadoop2.6/bin/java: cannot execute: 没有那个文件或目录
- ceshi3: full log in /usr/local/spark-1.6.0-bin-hadoop2.6/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-ceshi3.out1
2- ceshi3: /usr/local/spark-1.6.0-bin-hadoop2.6/bin/spark-class: line 87: /usr/local/spark-1.6.0-bin-hadoop2.6/bin/java: 没有那个文件或目录
- ceshi3: /usr/local/spark-1.6.0-bin-hadoop2.6/bin/spark-class: line 87: exec: /usr/local/spark-1.6.0-bin-hadoop2.6/bin/java: cannot execute: 没有那个文件或目录
这个bin/java明明是$ JAVA_HOME 的,为什么会变为 $SPARK_HOME 呢
既然启动报错,而且报的是 $JAVA_HOME,那就要看几个东西:一个是正常的系统变量配置,再一个就是在要启动的服务里是否使用了这个配置变量,再确认下自己的配置是否已经有了。
查看 spark 关于环境变量的配置文件
1 | export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=dk31:2181,dk32:2181,dk34:2181 -Dspark.deploy.zookeeper.dir=/spark" |
发现 $JAVA_HOME 变量是取的系统变量·,但是系统变量为什么取不到?
查了下:在脚本中使用export, 只在脚本中有效,退出这个脚本,设置的变量就没有了。
由于spark-class使用了 spark-env.sh 在使用的时候 已经取不到该值,所以无效了。
但是想不通为什么会变成 $SPARK_HOME 的变量