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 ...
随机推荐
- CodeForces 444C 分块
题目链接:http://codeforces.com/problemset/problem/444/C 题意:给定一个长度为n的序列a[].起初a[i]=i,然后还有一个色度的序列b[],起初b[i] ...
- Tastypie 学习笔记
Tastypie是什么? 运行于Python环境中的 Django web服务器下的 Restful 风格API接口 (python 类库) 1.安装下面环境或者依赖包到python库(安装过程类似 ...
- 【Cocos2d-x游戏开发】Cocos2d-x中的数据存储技术
一.引言 数据存储和网络功能可以说是一款游戏中必不可少的功能,如果一款游戏不能保存进度那么它的可玩性必然大打折扣(试想一下,玩家辛辛苦苦玩了一整天的游戏,结果退出时告诉人家不能保存关卡信息,你明天还得 ...
- align使图片和文字居中
<img src=... align=absmiddle />
- PHP文件上传
前台页代码: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> </h ...
- Self-introduction (自我介绍)
* 姓名,本名不想这样就暴露,Rachel我英文名,不愿意叫算了,直接叫我米蟲就好了. * 性格, 偏执一些,表里不一,表面和善,骨子倔强,我这一生都在追求高逼格,从未间断过 偶尔像个小疯子,有 ...
- tomcat下jsp要加工程名后缀才能访问的问题解决
今天发现一个部署的项目,在tomcat中配置了去掉工程名,直接通过域名访问.配置后其它的html.动态请求等都可以不带工程名访问,但是只要访问jsp页面就报404错误,加上工程名访问jsp却又正常. ...
- linux系统安装(下)
Grub引导装载程序 目录简单介绍 /dev存放了设备文件 /dev/sad硬盘文件 root/install.log安装日志 root/kickstart包含这次安装信息,下次若需要相同安装可 ...
- PHP 接入芝麻信用 注意 事项
芝麻官方下载的SDK,跑不起来,百度搜索一番也没有发现太多的文章 ,只有一个CSDN博客写的一篇文章,比较有参考价值 详细查阅文档+几天测试整理以下几点注意事项: 接入芝麻API接口,应该分2步: 第 ...
- MySQL优化性能my.cnf详解
提供一个MySQL 5.6版本适合在1GB内存VPS上的my.cnf配置文件(点击这里下载文件): [client] port=3306 socket=/tmp/mysql.sock [mysqld] ...