Spark&Hadoop:scala编写spark任务jar包,运行无法识别main函数,怎么办?
昨晚和同事一起看一个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提交时制定外部引入包,发现也是可行的。下边就介绍下,这两种运行方式的具体操作步骤:
- cmd下运行jar包方式,执行spark任务:
1、打包时,需要注意不要引入其他包:

2、我把生成的文件拷贝到D盘根目录,结构如下:


java -cp D:\xxx\Jars\spark-assembly-1.5.-hadoop2.6.0.jar;D:\xxx\Jars\commons-logging.jar;D:\xxx\Jars\fastjson-1.2..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/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..jar log4j.jar spark-assembly-1.5.-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
// :: INFO spark.SparkContext: Running Spark version 1.5.
// :: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
// :: INFO spark.SecurityManager: Changing view acls to: hadoop
// :: INFO spark.SecurityManager: Changing modify acls to: hadoop
// :: INFO spark.SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(hadoop); users with modify permissions: Set(hadoop)
// :: INFO slf4j.Slf4jLogger: Slf4jLogger started
// :: INFO Remoting: Starting remoting
以上是和同事一起闯过的坑,必须记录下来。。。分享给大家吧。
Spark&Hadoop:scala编写spark任务jar包,运行无法识别main函数,怎么办?的更多相关文章
- 使用Scala编写Spark程序求基站下移动用户停留时长TopN
使用Scala编写Spark程序求基站下移动用户停留时长TopN 1. 需求:根据手机基站日志计算停留时长的TopN 我们的手机之所以能够实现移动通信,是因为在全国各地有许许多多的基站,只要手机一开机 ...
- Spark2 jar包运行完成,退出spark,释放资源
import org.apache.spark.sql.SparkSession import org.apache.spark.sql.Dataset import org.apache.spark ...
- AndroidStudio开发Java工程(解决java控制台中文打印乱码+导入jar包运行工程)
这篇分享一点个人AS开发java工程经验,虽然有时候还是得打开eclipse来运行java项目,但能用AS的时候还是尽量用AS,毕竟一个字,爽~ 废话不多说,进入正题. 一.开发Java工程 你有两种 ...
- 双击jar包运行方法
方案一 在jar包同级,写个bat文件,如下 java -jar Xxx.jar pause 方案二 右击jar文件 ->打开方式->选择安装的jre/bin/javaw.exe. 双击依 ...
- jar包运行出现中文乱码的问题
写了一个java Project,在eclipse里运行的时候不会出现乱码,但是用jar包运行的时候,出现了中文乱码. 我将它包装成了一个文件,这样就在没有jre的机器上也可以运行了.start.ba ...
- springboot项目jar包运行
springboot项目jar包运行 参考 Linux后台运行java的jar包 步骤 进入maven项目中,打包项目. mvn package -Dmaven.test.skip=true 运行ja ...
- Spring Boot部署之jar包运行
上篇阐述了Spring Boot war部署项目,本篇阐述另一种运行方式:jar包运行. 一.打jar包 1.修改pom.xml配置 2.执行package(对于module执行package之前需要 ...
- Spark集群搭建【Spark+Hadoop+Scala+Zookeeper】
1.安装Linux 需要:3台CentOS7虚拟机 IP:192.168.245.130,192.168.245.131,192.168.245.132(类似,尽量保持连续,方便记忆) 注意: 3台虚 ...
- idea配置scala编写spark wordcount程序
1.创建scala maven项目 选择骨架的时候为org.scala-tools.archetypes:scala-aechetype-simple 1.2 2.导入包,进入spark官网Docum ...
随机推荐
- python 线程之threading(五)
在学习了Event和Condition两个线程同步工具之后还有一个我认为比较鸡肋的工具 semaphores 1. 使用semaphores的使用效果和Condition的notify方法的效果基本相 ...
- react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)
react学习小结 本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...
- JBD日志的定位、分析和恢复
在上一篇中,我们介绍了Ext3文件系统的日志可以看做一个文件,由JBD进行管理.自然而然引出如下这些问题: 1)如何定位ext3日志文件和查看日志文件的裸数据? 2)ext3日志文件数据在物理上是如何 ...
- CSS3中的变形与动画【转】
最近在学习制作移动端的页面,做了一个微信页面的小demo,其中用到了很多的CSS3新增的内容,其中就有CSS3新增的变形和动画.其实这种CSS3的动画效果用JS也可以实现,不过CSS3能开启硬件加速, ...
- ActiveMQ集群应用
ActiveMQ集群 ActiveMQ具有强大和灵活的集群功能,但在使用的过程中会发现很多的缺点,ActiveMQ的集群方式主要由两种:Master-Slave和Broker Cluster. 1.M ...
- SQl中的char,varcher,nvarchar,txt
CHAR char是定长的,在字段建立时,空间就固定了,不管是否插入值(NULL也包含在内),都占用字符的空间.例如: char(8),输入字符小于8,后面补空值.输入字符大于8时,会截取.CH ...
- UIPickerView理解
- 如何完全卸载oracle11g?
步骤一: 停止Oracle的所有服务. 步骤二: 运行%oracle_home%\app\Administrator\product\11.2.0\dbhome_1\deinstall \deinst ...
- 【转发】关于Java性能的9个谬论
转载请注明出处,感谢大家的支持!本文来自优优码:http://www.uucode.net/201502/9%e4%b8%aa%e8%b0%ac%e8%ae%ba Java的性能有某种黑魔法之称.部分 ...
- C++ 画星号图形——圆形(核心代码记录)
void Circle::print_char(int x1,int x2) { int i; // 计算这一行的宽度,终端最多显示80列 ; n = n > ? : n; ; i < n ...