目录
3、再重启spark-shell ,报找不到或无法加载主类 org.apache.spark.deploy.yarn.ExecutorLauncher:
执行: spark-shell
1、报When running with master 'yarn' either HADOOP_CONF_DIR or YARN_CONF_DIR must be set in th environmwnt
原因是没有配置之前在/etc/profile下配置了hadoop的环境变量,但是没有配置HADOOP_CONF_DIR
解决办法:
vim /Users/zheng/spark/spark-3.0.0/conf/spark-env.sh
#加上以下环境变量
HADOOP_CONF_DIR=/Users/zheng/hadoop/hadoop-3.2.1/etc/hadoop
2、重启 spark-shell,出现警告, Neither spark.yarn.jars nor spark.yarn.archive is set, falling back to uploading libraries under SPARK_HOME.
解决方式:
在/Users/zheng/spark/spark-3.0.0/conf/spark-defaults.conf加上spark.yarn.jars hdfs://localhost:9000/spark/jars
注意:/spark/jars为hdfs上的目录,需要提前创建好,否则启动spark-shell会报错
3、再重启spark-shell ,报找不到或无法加载主类 org.apache.spark.deploy.yarn.ExecutorLauncher:
在http://localhost:8088/cluster可看见该应用,点进去也可以看见错误信息
原因是没有把/spark-3.0.0/jars下的jar包上传到hdfs上
解决方式:
#上传jar包
hdfs dfs -put $SPARK_HOME/jars/* /spark/jars/
上传完后:
重启,还是报了同样的错误,最后尝试把/spark-3.0.0/conf/spark-defaults.conf文件下的spark.yarn.jars参数修改为spark.yarn.archive再启动,启动成功
总结,最后尝试这两种其实是一样的:
spark.yarn.archive hdfs://localhost:9000/spark/jars
spark.yarn.jars hdfs://localhost:9000/spark/jars/*.jar
spark.yarn.jars和spark.yarn.archive异同:
相同:spark默认会使用spark本地的jars(即$SPARK_HOME/jars下的jar),且每次使用都需要上传,但是可以通过设置这两个参数把jar包放在hdfs目录下,可以缓存在节点上,而不需要application每次跑的时候去获取
不同:spark.yarn.archive是把所有jar文件打成一个zip文件上传到节点,上传速度会快点,但是用到的时候需要解压缩。而spark.yarn.jars是把所有jar文件上传,上传会慢点,但是不需要解压可以直接使用
ps:关于spark.yarn.jars或spark.yarn.archive官方文档解释