spark application运行时版本不兼容错误

17/06/27 14:34:41 INFO deprecation: mapred.map.tasks is deprecated. Instead, use mapreduce.job.maps
17/06/27 14:34:41 INFO MemoryStore: Block broadcast_0 stored as values in memory (estimated size 788.8 KB, free 1246.5 MB)
17/06/27 14:34:41 INFO MemoryStore: Block broadcast_0_piece0 stored as bytes in memory (estimated size 54.0 KB, free 1246.4 MB)
17/06/27 14:34:41 INFO BlockManagerInfo: Added broadcast_0_piece0 in memory on 10.50.70.121:37335 (size: 54.0 KB, free: 1247.2 MB)
17/06/27 14:34:41 INFO SparkContext: Created broadcast 0 from rdd at TradeInfoOutlier.scala:30
Exception in thread "main" java.lang.NoSuchMethodError: scala.reflect.api.JavaUniverse.runtimeMirror(Ljava/lang/ClassLoader;)Lscala/reflect/api/JavaUniverse$JavaMirror;
        at com.fangdd.data.profile.outlier.TradeInfoOutlier$.main(TradeInfoOutlier.scala:30)
        at com.fangdd.data.profile.outlier.TradeInfoOutlier.main(TradeInfoOutlier.scala)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:745)
        at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
        at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
17/06/27 14:34:42 INFO SparkContext: Invoking stop() from shutdown hook

这种错误是由于生产环境采用的是scala 2.10 + spark1.6.3的运行环境,本地打的application jar使用scala2.11 + spark.1.6.3的编译环境,所以放入生产环境集群报了上述错误,更改scala版本重新打jar包后运行成功

### Spark运行找不到或无法加载主类的原因分析 在Spark应用程序运行过程中,如果遇到“找不到或无法加载主类”的错误提示,通常表明Java虚拟机(JVM)未能找到指定的主类。以下是可能原因及其对应的解决方案: #### 1. **主类路径配置不正确** 如果`spark-submit`命令中的`--class`参数未正确定义目标类名,则可能导致此问题。例如,在提交作业,应确保提供的是全限定类名(即包含包名的部分)。 解决方案:确认`--class`参数指向正确的主类名称,并验证其是否存在于打包后的JAR文件中[^4]。 #### 2. **依赖项缺失** 当项目所需的外部库未被正确引入到执行环境中,也可能引发此类异常。这通常是由于构建工具(如Maven或Gradle)生成的fat JAR缺少必要的依赖关系所致。 解决方法之一是通过设置`--jars`选项显式添加额外的jar包;另一种更推荐的方式则是利用shade插件创建一个包含所有依赖在内的uber-jar[^5]。 ```bash spark-submit --class edu.hnnu.spark \ --master local[*] \ your-application.jar ``` 上述脚本展示了如何运用`spark-submit`来启动基于Scala/Java开发的应用程序实例。其中需替换实际存在的入口点以及相应的资源位置标记处的内容。 #### 3. **编译器版本冲突** 使用不同版本的JDK进行源码编写与最终部署可能会引起兼容性障碍。比如采用较新的语言特性却试图于旧版runtime上运作便会出现类似的状况。 应对策略为统一整个生命周期内的软件栈构成要素——从IDE内部设定直至生产服务器端均保持一致性的SDK选型标准[^6]。 --- ### 提供一段伪代码用于演示基本框架结构 下面给出了一段简单的模板作为参考模型展示怎样定义好自己的业务逻辑单元并妥善处理输入输出数据流转过程: ```java package edu.hnnu; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import java.util.Arrays; import java.util.List; public class spark { public static void main(String[] args){ String logFile = "hdfs://namenode:8020/user/hadoop/input.txt"; try(JavaSparkContext sc=new JavaSparkContext("local","App Name")){ List<String> data= Arrays.asList("hello world", "this is a test"); JavaRDD<String> distData=sc.parallelize(data); long count=distData.count(); System.out.printf("Number of elements:%d%n",count); } } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值