Spark&Hadoop:scala编写spark任务jar包,运行无法识别main函数,怎么办?
2016-11-14 10:04
375 查看
昨晚和同事一起看一个scala写的程序,程序都写完了,且在idea上debug运行是ok的。但我们不能调试的方式部署在客户机器上,于是打包吧。打包时,我们是采用把外部引入的五个包(spark-assembly-1.5.1-hadoop2.6.0.jar、commons-logging.jar、fastjson-1.2.10.jar、sqljdbc4.jar、log4j.jar)打包到我们的jar包中。好了,一切都好了。。。在java -jar demo.jar方式运行,以及把它拷贝到spark集群中,使用spark-submit方式调教都不好用。爆出error都是一致的:找不到main函数。
好吧,找原因吧。
是不是发布的jar包有问题?
是不是在artifcates中设置有问题?
难道是打包环境设置错误了?
。。。
一顿神找呀。
不行我们写个原始的scala程序,只写一个main函数,通过jar测试下,看是否可行。。。结果:不错奥,这个test.jar不负众望的运行起来了;
那引入外部包,并打包到jar下运行看看。。。结果:把jar包打包进来运行就不好用了。
那我们在cmd下运行附带有外部包的jar文件。。。结果:可以的;那我们就走了打包时不附带外部包的方式运行。
当然,按道理说把外部引入的jar文件打包的我们的jar包中,这种处理方案应该是可行的,我们这里就绕过了这个条路。通过spark提交时制定外部引入包,发现也是可行的。下边就介绍下,这两种运行方式的具体操作步骤:
[b]cmd下运行jar包方式,执行spark任务:[/b]
1、打包时,需要注意不要引入其他包:
2、我把生成的文件拷贝到D盘根目录,结构如下:
3、执行cmd执行命令为:
4、结果:
[b]在集群服务器上使用.sh文件调spark-submit命令方式提交任务:[/b]
备注:打包时依然不包含外部包到jar包中。
1、test_submit.sh文件内容如下:
2、集群节点上文件存储结构:
3、执行提交命令:
以上是和同事一起闯过的坑,必须记录下来。。。分享给大家吧。
好吧,找原因吧。
是不是发布的jar包有问题?
是不是在artifcates中设置有问题?
难道是打包环境设置错误了?
。。。
一顿神找呀。
不行我们写个原始的scala程序,只写一个main函数,通过jar测试下,看是否可行。。。结果:不错奥,这个test.jar不负众望的运行起来了;
那引入外部包,并打包到jar下运行看看。。。结果:把jar包打包进来运行就不好用了。
那我们在cmd下运行附带有外部包的jar文件。。。结果:可以的;那我们就走了打包时不附带外部包的方式运行。
当然,按道理说把外部引入的jar文件打包的我们的jar包中,这种处理方案应该是可行的,我们这里就绕过了这个条路。通过spark提交时制定外部引入包,发现也是可行的。下边就介绍下,这两种运行方式的具体操作步骤:
[b]cmd下运行jar包方式,执行spark任务:[/b]
1、打包时,需要注意不要引入其他包:
2、我把生成的文件拷贝到D盘根目录,结构如下:
3、执行cmd执行命令为:
java -cp D:\xxx\Jars\spark-assembly-1.5.1-hadoop2.6.0.jar;D:\xxx\Jars\commons-logging.jar;D:\xxx\Jars\fastjson-1.2.10.jar;D:\xxx\Jars\sqljdbc4.jar;D:\xxx\Jars\log4j.jar;D:\xxx\scalatest20161031.jar testobject
4、结果:
[b]在集群服务器上使用.sh文件调spark-submit命令方式提交任务:[/b]
备注:打包时依然不包含外部包到jar包中。
1、test_submit.sh文件内容如下:
#!/bin/sh spark-submit --master spark://172.21.7.10:7077 --jars ./Jars/spark-assembly-1.5.1-hadoop2.6.0.jar,./Jars/commons-logging.jar,./Jars/fastjson-1.2.10.jar,./Jars/sqljdbc4.jar,./Jars/log4j.jar --class testobject --executor-memory 15G --total-executor-cores 8 scalatest20161031.jar
2、集群节点上文件存储结构:
hadoop@hadoop-master:/$ cd /home/hadoop/xxx/ hadoop@hadoop-master:~/xxx$ ls Jars scalatest20161031.jar test_submit.sh hadoop@hadoop-master:~/xxx$ cd Jars hadoop@hadoop-master:~/xxx/Jars$ ls commons-logging.jar fastjson-1.2.10.jar log4j.jar spark-assembly-1.5.1-hadoop2.6.0.jar sqljdbc4.jar hadoop@hadoop-master:~/xxx/Jars$
3、执行提交命令:
hadoop@hadoop-master:~/xxx/Jars$ cd .. hadoop@hadoop-master:~/xxx$ ls Jars scalatest20161031.jar test_submit.sh hadoop@hadoop-master:~/xxx$ ./test_submit.sh 16/11/14 04:06:29 INFO spark.SparkContext: Running Spark version 1.5.1 16/11/14 04:06:29 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 16/11/14 04:06:29 INFO spark.SecurityManager: Changing view acls to: hadoop 16/11/14 04:06:29 INFO spark.SecurityManager: Changing modify acls to: hadoop 16/11/14 04:06:29 INFO spark.SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(hadoop); users with modify permissions: Set(hadoop) 16/11/14 04:06:30 INFO slf4j.Slf4jLogger: Slf4jLogger started 16/11/14 04:06:30 INFO Remoting: Starting remoting
以上是和同事一起闯过的坑,必须记录下来。。。分享给大家吧。
相关文章推荐
- 编写第一个用scala写的spark任务,用sbt打包成jar,并单机模式下运行
- 编写第一个用scala写的spark任务,用sbt打包成jar,并单机模式下运行
- 如何在eclipse中编写好程序,然后打包成jar文件,在hadoop分布式集群上运行
- 使用IntelliJ IDEA编写Scala在Spark中运行
- eclipse编写scala应用运行在spark集群上
- scala IDE for Eclipse运行spark时显示找不到或无法加载主类
- spark点点滴滴 —— 运行scala任务异常处理
- Spark官方文档——本地编写并运行scala程序
- 用Eclipse编写Java时调用algs4.jar和stdlib.jar解决StdOut和StdIn无法被识别的问题
- scala当引入java.sql._时object的main函数无法运行
- scala编写的Spark程序远程提交到服务器集群上运行
- hadoop spark环境搭建及idea scala maven集成开发spark任务
- hadoop学习笔记(5)-运行任务(Job)小结:第三方jar包、hadoop jar命令
- hadoop的jar命令运行任务方法
- 编写的exe在别的机器上运行的时候总是报错 "找不到MSVCR100.dll 请重新安装",编译的机器上又不会报,这是怎么回事啊?是不是因为编译的机器上有特殊的配置?
- 利用Scala编写Wordcount并在spark框架下运行
- 解决Hadoop运行jar包时MapReduce任务启动前OutOfMemoryError:Java heap space问题
- 大数据IMF传奇行动 IDEA 安装运行 编译出错Error:scalac: Multiple 'scala-library*.jar'
- spark源码解析-从提交任务到jar的加载运行(基于2.1.0版本)
- 编写hadoop程序并打成jar包上传到hadoop集群运行