博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark&Hadoop:scala编写spark任务jar包,运行无法识别main函数,怎么办?
阅读量:6942 次
发布时间:2019-06-27

本文共 2528 字,大约阅读时间需要 8 分钟。

  昨晚和同事一起看一个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函数。

      好吧,找原因吧。

  1. 是不是发布的jar包有问题?
  2. 是不是在artifcates中设置有问题?
  3. 难道是打包环境设置错误了?
  4. 。。。

  一顿神找呀。

  不行我们写个原始的scala程序,只写一个main函数,通过jar测试下,看是否可行。。。结果:不错奥,这个test.jar不负众望的运行起来了;

  那引入外部包,并打包到jar下运行看看。。。结果:把jar包打包进来运行就不好用了。

  那我们在cmd下运行附带有外部包的jar文件。。。结果:可以的;那我们就走了打包时不附带外部包的方式运行。

当然,按道理说把外部引入的jar文件打包的我们的jar包中,这种处理方案应该是可行的,我们这里就绕过了这个条路。通过spark提交时制定外部引入包,发现也是可行的。下边就介绍下,这两种运行方式的具体操作步骤:

  • cmd下运行jar包方式,执行spark任务:

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、结果:

 

  • 在集群服务器上使用.sh文件调spark-submit命令方式提交任务:

备注:打包时依然不包含外部包到jar包中。

1、test_submit.sh文件内容如下: 

#!/bin/shspark-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$ lsJars  scalatest20161031.jar  test_submit.shhadoop@hadoop-master:~/xxx$ cd Jarshadoop@hadoop-master:~/xxx/Jars$ lscommons-logging.jar  fastjson-1.2.10.jar  log4j.jar  spark-assembly-1.5.1-hadoop2.6.0.jar  sqljdbc4.jarhadoop@hadoop-master:~/xxx/Jars$

3、执行提交命令:

hadoop@hadoop-master:~/xxx/Jars$ cd ..hadoop@hadoop-master:~/xxx$ lsJars  scalatest20161031.jar  test_submit.shhadoop@hadoop-master:~/xxx$ ./test_submit.sh16/11/14 04:06:29 INFO spark.SparkContext: Running Spark version 1.5.116/11/14 04:06:29 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable16/11/14 04:06:29 INFO spark.SecurityManager: Changing view acls to: hadoop16/11/14 04:06:29 INFO spark.SecurityManager: Changing modify acls to: hadoop16/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 started16/11/14 04:06:30 INFO Remoting: Starting remoting

以上是和同事一起闯过的坑,必须记录下来。。。分享给大家吧。 

  

转载地址:http://hvinl.baihongyu.com/

你可能感兴趣的文章
树莓派进阶之路 (006) - 树莓派安装wiringPi
查看>>
泛在传感器网络(Ubiquitous Sensor Network; USN)
查看>>
如何解决exe4j生成exe文件后弹出提示信息
查看>>
第六十节,文本元素标签
查看>>
Dapper ORM VS SqlSugar ORM的 8场对决
查看>>
详解MySQL性能优化(二)
查看>>
详解KMP算法【转】
查看>>
计算机网络中通信协议都有哪些
查看>>
CentOS挂Windows的NFS备忘
查看>>
【死磕jeesite源码】mybatis动态调用表名和字段名
查看>>
【C002】Excel VBA - 文件打开关闭
查看>>
对WF工作流异常(Event on interface type for instance id cannot be delivered)的一点总结....
查看>>
目前常用的加密解密算法
查看>>
近期的一点感慨
查看>>
为什么Linux不需要碎片整理?
查看>>
EasyARM i.mx28学习笔记——开箱试用总结
查看>>
ASP怎么解除文件上传200kb限制
查看>>
Xshell选中的同时把内容复制到剪贴板(还可以设置设置文本分隔符)
查看>>
laravel的中间件demo
查看>>
Linux守护进程的编程实现
查看>>