在集群运行spark时出现java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)
查询得知是版本对应问题
CDH版的spark是1.6.0版本
本地编写代码中的pom文件引用的是2.2.3版本的Spark
之后在集群部署了2.X版本的Spark 2
然后在控制台找到类似:
/opt/cloudera/parcels/SPARK2-2.1.0.cloudera4-1.cdh5.13.3.p0.818552/bin的目录,走到该目录下运行程序(默认需要运行的jar包已经上传到集群)
命令–
client模式:
./spark2-submit --class 主类名–master yarn --executor-memory 1g --total-executor-cores 2 spark的jar包所在目录
cluster模式:
./spark2-submit --class 主类名 --master yarn --deploy-mode cluster --executor-memory 1g --total-executor-cores 2 spark的jar包所在目录
如果有同学在本地idea中跑spark程序时也遇到类似问题,主类运行不了,定位的代码行是new Sparkconf()时,可以考虑是否也是因为版本问题,需要将scala版本与Spark对应上.
比如我的pom文件中的scala版本是2.11.8版本,但是在idea中默认的是2.10.6版本,所以会冲突,需要将idea中的scala版本更改.
第一步:
第二步:
如果idea中下载不了对应的scala版本,建议先在本地下载,然后在上图的第2步导入.
scala下载地址:https://www.scala-lang.org/download/all.html
具体如何下载就不用我细说了吧?
注意你用的是Mac还是Windows,对应的下载包不一样.
解压之后就可以导入添加了.