在windows下通过的IntelliJ IDEA通过Ant构建工具远程提交Spark应用程序
来源:互联网 发布:java培训机构 知乎 编辑:程序博客网 时间:2024/05/02 00:09
这次看到以前写的这篇文章实在混乱不堪,所以决定修整一下
1、在linux上 已经搭建好了spark集群环境。(已经安装好了JDK、scala、hadoop、yarn、spark等)
2、在windows上已经安装IntelliJ IDEA
3、在windows上安装与集群环境相同版本的windows版的JDK(别忘了配置环境变量)。
4、在windows上安装与集群环境相同版本的windows版scala(这一步不是必须,可以在IDEA中安装scala插件,我用这个是为了方便在ant文件中添加scala的工具包,没有用IDEA自带的scala包)
本地IntelliJ IDEA在编译构件spark程序的时候需要用到下面的库
5、将相同版本的hadoop(已编译)解压到windows任意目录下
例如:D:\Program Files\Java\hadoop-2.7.3(其实就是将hadoop-2.7.3解压到D盘目录下,构建程序的时候需要用到的只是lib目录下的jar包而已)
6、将相同版本的spark(已编译)解压到windows任意目录下
例如:D:\Program Files\Java\spark-2.0.2-bin-hadoop2.7
7、在IntelliJ IDEA创建scala工程
8、为项目添加library,将spark 目录lib下的所有全部jar包添加为library:
9、如果是建立scala工程系统会自动添加scala的SDK,如果没有可以手动添加scala的SDK library选择
10、如果用到额外的jar按自行添加即可
特别说明:
jsch-0.1.53 jar包文件,此文件是ant构建远程传动功能所用到的文件,需要到网上下载并添加进来,可以是其他版本的,功能一样就行了。将此jar包添加到D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib目录下此目录是IDEA的ant/lib目录,当使用ant构建时会自动调用此jar包的功能
JDK的添加更不用说了。
11、配置好的目录结构如下:
12、编写一个wordcount 程序
13.创建object 伴生对象,程序代码如下
object WordCount { def main(args: Array[String]) { val conf = new SparkConf().setAppName("WordCountApp") //yarn 模式下运行 conf.setMaster("yarn") //master 节点运行 //conf.setMaster("spark://masterVM:7077") val sc = new SparkContext(conf) val line = sc.textFile("/input/*") line.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).collect().foreach(println) sc.stop() }}
14.使用ant构建不同于一般的java程序,只需要一个antbuild.xml 文件就够了。
添加ant后的目录结构:
我的ant构建文件如下:
<?xml version="1.0" encoding="utf-8"?><project name="WordCount" default="all" basedir="."> <!-- global properties --> <property name="main-class" value="wordcount.WordCount"/> <property name="spark.home" value="D:/Program Files/Java/spark-2.0.2-bin-hadoop2.7"/> <property name="scala.home" value="D:/Program Files/Java/scala_2.11.8"/> <property name="jar.dir" value="${basedir}/out"/> <property name="src.dir" value="${basedir}" /> <property name="jarFileName" value="${ant.project.name}.jar" /> <property name="build.dir" value="${basedir}/out/${ant.project.name}" /> <!-- class path settings --> <path id="build.path.spark"> <pathelement location="${build.dir}" /> <pathelement location="${scala.home}/lib/scala-library.jar" /> <pathelement location="${spark.home}/jars/hadoop-common-2.7.3.jar"/> <pathelement location="${spark.home}/jars/hadoop-hdfs-2.7.3.jar"/> <pathelement location="${spark.home}/jars/jackson-annotations-2.6.5.jar"/> <pathelement location="${spark.home}/jars/jackson-core-2.6.5.jar"/> <pathelement location="${spark.home}/jars/spark-core_2.11-2.0.2.jar"/> </path> <!-- define scalac, fsc, sbaz ... tasks --> <target name="scala.tasks"> <echo message="初始化..."/> <taskdef resource="scala/tools/ant/antlib.xml"> <classpath> <pathelement location="${scala.home}/lib/scala-reflect.jar" /> <pathelement location="${scala.home}/lib/scala-library.jar" /> <pathelement location="${scala.home}/lib/scala-compiler.jar" /> </classpath> </taskdef> </target> <target name="compile" depends="scala.tasks"> <echo message="编译。。。"/> <mkdir dir="${build.dir}" /> <fsc srcdir="${src.dir}" destdir="${build.dir}" classpathref="build.path.spark" > <include name="**/**.scala" /> </fsc> </target> <!--对编译后的文件进行打包 --> <target name="package_jar" depends="compile"> <echo message="将工程打包" /> <jar destfile="${basedir}/out/${jarFileName}" basedir="${build.dir}"> <manifest> <!--指定main-class--> <attribute name="Main-Class" value="${main-class}" /> </manifest> </jar> </target> <!-- sftp上传到linux服务器利用hadoop命令运行 --> <target name="scp_sshexec" depends="package_jar"> <echo message="sftp上传到linux服务器利用hadoop命令运行包" /> <scp file="${basedir}/out/${jarFileName}" todir="master:zhfk@192.168.161.135:~/sparkJarsDir" trust="true"> </scp> <sshexec host="192.168.161.135" username="master" password="zhfk" command="source /etc/profile;spark-submit ~/sparkJarsDir/${jarFileName} " trust="true" > </sshexec> </target> <!-- 清理工作目录--> <target name="clean" depends="scp_sshexec"> <echo message="清理工作目录" /> <delete dir="${basedir}/out/" /> </target> <!--所有的动作完成 --> <target name="all" depends="clean"> </target></project>
相信用过ant的人都能看懂这代码,这是自己写的简单了点。
主要设置两项参数:
project name=”WordCount” (这个时工程名可以改自己喜欢的名字)
main-class(主类,记得加上包名)
jsch-0.1.53 jar包的作用就是sftp上传到linux服务器利用hadoop命令运行这段。
如果main函数有参数,可以在
command="source /etc/profile;spark-submit ~/sparkJarsDir/${jarFileName} "
这一行添加main 参数。
注意点:
1、我的ant文件是放在src目录下某个包下的,这样只编译本包下的文件,如果放在根目录下则要修改源文件的src文件夹,这里要注意一下。
2、 这一项是你所编写的程序所使用到的jar包,不必把liarbry里的jar完全添加,只添加用到的即可(只能手动写进去)
<!-- class path settings --> <path id="build.path.spark"> <pathelement location="${build.dir}" /> <pathelement location="${scala.home}/lib/scala-library.jar" /> <pathelement location="${spark.home}/jars/hadoop-common-2.7.3.jar"/> <pathelement location="${spark.home}/jars/hadoop-hdfs-2.7.3.jar"/> <pathelement location="${spark.home}/jars/jackson-annotations-2.6.5.jar"/> <pathelement location="${spark.home}/jars/jackson-core-2.6.5.jar"/> <pathelement location="${spark.home}/jars/spark-core_2.11-2.0.2.jar"/> </path>
15、这里是使用scala快速编译器编译程序,添加的是最基础的scala 编译用到的libarbry正如你所看到的一样是对scalac, fsc, sbaz … tasks 等工具的定义导入
<!-- define scalac, fsc, sbaz ... tasks --> <target name="scala.tasks"> <echo message="初始化..."/> <taskdef resource="scala/tools/ant/antlib.xml"> <classpath> <pathelement location="${scala.home}/lib/scala-reflect.jar" /> <pathelement location="${scala.home}/lib/scala-library.jar" /> <pathelement location="${scala.home}/lib/scala-compiler.jar" /> </classpath> </taskdef> </target>
16、最后确定这里配置的服务器参数是否正确
<!-- sftp上传到linux服务器利用hadoop命令运行 --> <target name="scp_sshexec" depends="package_jar"> <echo message="sftp上传到linux服务器利用hadoop命令运行包" /> <scp file="${basedir}/out/${jarFileName}" todir="master:zhfk@192.168.161.135:~/sparkJarsDir" trust="true"> </scp> <sshexec host="192.168.161.135" username="master" password="zhfk" command="source /etc/profile;spark-submit ~/sparkJarsDir/${jarFileName} " trust="true" > </sshexec> </target>
17、添加到ant控制板中(可以从菜单中调出),按运行按钮,提交程序。
点击ant控制板中的运行按钮一个进行工程的编译,构建,打包,上传,并在集群下运行,这些功能已经全部在ant.xml文件中定义。
以下是部分运行结果:
"C:\Program Files\Java\jdk1.8.0_111\bin\java" -Xmx128m -Xss2m "-Dant.home=D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant" "-Dant.library.dir=D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib" -Dfile.encoding=UTF-8 -classpath "D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-antlr.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-apache-bcel.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-apache-bsf.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-apache-log4j.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-apache-oro.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-apache-regexp.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-apache-resolver.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-apache-xalan2.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-commons-logging.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-commons-net.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-jai.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-javamail.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-jdepend.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-jmf.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-jsch.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-junit.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-junit4.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-launcher.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-netrexx.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-swing.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant-testutil.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\ant.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\ant\lib\jsch-0.1.54.jar;C:\Program Files\Java\jdk1.8.0_111\lib\tools.jar;D:\Program Files\Java\IntelliJ IDEA Community Edition 2016.3.2\lib\idea_rt.jar" com.intellij.rt.ant.execution.AntMain2 -logger com.intellij.rt.ant.execution.IdeaAntLogger2 -inputhandler com.intellij.rt.ant.execution.IdeaInputHandler -buildfile D:\IDEA_project\spark_2016.12.28\src\wordcount\z_wordcount.xmlz_wordcount.xmlpropertypropertypathscala.tasksecho初始化...taskdefcompileecho编译。。。mkdirCreated dir: D:\IDEA_project\spark_2016.12.28\src\wordcount\out\WordCountfscCompiling 1 source file to D:\IDEA_project\spark_2016.12.28\src\wordcount\out\WordCount......package_jarecho将工程打包jarBuilding jar: D:\IDEA_project\spark_2016.12.28\src\wordcount\out\WordCount.jarscp_sshexecechosftp上传到linux服务器利用hadoop命令运行包scpConnecting to 192.168.161.135:22done.sshexecConnecting to 192.168.161.135:22cmd : source /etc/profile;spark-submit ~/sparkJarsDir/WordCount.jar 17/01/11 15:58:24 INFO spark.SparkContext: Running Spark version 2.0.217/01/11 15:58:27 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable17/01/11 15:58:28 INFO spark.SecurityManager: Changing view acls to: master17/01/11 15:58:28 INFO spark.SecurityManager: Changing modify acls to: master...(authorship,,2)(Snappy,1)(JVM,1)(license/LICENSE.caliper.txt,1)(constant-size,1)(apply,7)(indemnity,,1)(IMPLIED,,7)(owner],1)......cleanecho清理工作目录deleteDeleting directory D:\IDEA_project\spark_2016.12.28\src\wordcount\outallAnt build completed with 240 warnings in 2m 23s at 2017/1/11 16:04
本文都是基于最简单的配置,没有优化任何东西,不管怎么样,这套流程可以实现windows主机向linux集群提交程序,并运行,还可以查看运行日志,这样直接在windows下操作感觉省事多了。
- 在windows下通过的IntelliJ IDEA通过Ant构建工具远程提交Spark应用程序
- HDP2.5.0 + Spark1.6.2 通过IDEA(Win64)远程提交spark jobs On YARN
- 在IntelliJ IDEA下开发Spark应用的配置
- AliceBot在Idea中通过maven构建
- 通过Intellij IDEA对tomcat进行远程调试
- IntelliJ IDEA下的Spark程序开发
- 在 Windows 系统下安装 IntelliJ IDEA 的方法
- 在 Windows 系统下安装 IntelliJ IDEA 的方法
- Spark2.x学习笔记:6、在Windows平台下搭建Spark开发环境(Intellij IDEA)
- 在 Intellij IDEA 提交代码到远程 Github 仓库的方法
- Windows下IntelliJ IDEA中调试Spark Standalone
- Windows下IntelliJ IDEA中调试Spark Standalone
- IntelliJ IDEA Windows下Spark开发环境部署
- Windows下使用IntelliJ IDEA搭建Spark环境
- 用idea在Windows下构建spark2.2.0的环境
- 在IntelliJ IDEA中通过svn导入maven项目
- 在windows上通过Spark访问HBase
- windows通过VisualVM远程监控linux下的tomcat
- 阿里巴巴字体库使用方法
- spring framework 各版本源码下载地址
- oc-Foundation_04_NSDictionary_NSMutableDictionary
- 实现一个简易的Python版CountDownLatch
- 【IO】java IO 总结
- 在windows下通过的IntelliJ IDEA通过Ant构建工具远程提交Spark应用程序
- Centos常用快捷操作
- Form表单之radio单选框操作
- 分块数组
- vue Render中slots的使用
- nginx开启目录浏览下载功能(autoindex)
- 35. Search Insert Position
- Java基础(1)
- redis集群和kafka集群作为消息队列比较