Maven打包Java版的spark程序到jar包,本地Windows测试,上传到集群中运行

作者:翁松秀


Maven打包Java版的spark程序到jar包,本地Windows测试,上传到集群中运行


学习spark的路漫漫啊~前面搭建好了本地环境,用eclipse跑了几个spark自带的程序,现在想用maven将程序打包成jar包,然后在本地测试,再上传到服务器集群中提交。
Windows本地搭建Spark开发环境

路漫漫其修远兮,吾将上下而求索。

Step1:Maven打包Jar包

windows本地测试版JavaWordCount代码:

package code.demo.spark;
import scala.Tuple2;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
public final class JavaWordCount {
	private static final Pattern SPACE = Pattern.compile(" ");
	public static void main(String[] args) throws Exception {
	
		//将hadoop路径映射为本地的hadoop路径
		
		System.setProperty("hadoop.home.dir", "F:\\home\\hadoop");
		SparkConf sparkConf = new SparkConf().setAppName("JavaWordCount").setMaster("local");
		JavaSparkContext ctx = new JavaSparkContext(sparkConf);
		
		//从本地磁盘中读取待统计的文件
		
		JavaRDD<String> lines = ctx.textFile("F:/home/spark/README.md");
		JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
			private static final long serialVersionUID = 1L;
			
			@Override
			public Iterable<String> call(String s) {
				return Arrays.asList(SPACE.split(s));
			}
		});
		JavaPairRDD<String, Integer> ones = words.mapToPair(new PairFunction<String, String, Integer>() {

			private static final long serialVersionUID = 1L;

			@Override
			public Tuple2<String, Integer> call(String s) {
				return new Tuple2<String, Integer>(s, 1);
			}
		});
		JavaPairRDD<String, Integer> counts = ones.reduceByKey(new Function2<Integer, Integer, Integer>() {
			private static final long serialVersionUID = 1L;

			@Override
			public Integer call(Integer i1, Integer i2) {
				return i1 + i2;
			}
		});

		List<Tuple2<String, Integer>> output = counts.collect();
		for (Tuple2<?, ?> tuple : output) {
			System.out.println(tuple._1() + ": " + tuple._2());
		}
		ctx.stop();
		ctx.close();
	}
}

win + R 打开运行窗口输入cmd打开命令行窗口,切换到程序所在目录,我的目录是:

E:\code\JavaWorkspace\SparkDemo

编译程序

mvn compile

这里写图片描述
打包程序

mvn package

这里写图片描述
如果程序没有特殊情况,比如缺胳膊少腿,打包完后回看到“BUILD SUCCESS”,说明打包成功,这时在maven工程的target文件夹中就可以看到打包好的jar包。
这里写图片描述

Step2:本地测试spark程序

打开命令行窗口进入spark安装目录的bin目录底下,我的spark安装路径是

F:\home\spark-1.6.3-bin-hadoop2.6

为了提交方便,我把打包好的jar包放到了F盘的根目录

F:\ExampleSpark-1.0-SNAPSHOT.jar

然后执行命令

spark-submit --class code.demo.spark.JavaWordCount --master local F:\\ExampleSpark-1.0-SNAPSHOT.jar

这里写图片描述

Step3:Jar包上传到集群

准备工作:因为WordCount程序需要读取文件,为了方便起见,所以我们将程序中要统计的文件word.txt上传到HDFS
命令格式:hadoop fs -put 本地路径 HDFS路径
命令如下:

hadoop fs -put /home/hmaster/word.txt hdfs://hadoop-mn01:9000/user/hmaster/word.txt

查看是否上传成功:

hadoop fs -ls hdfs://hadoop-mn01:9000/user/hmaster

如果看到word.txt说明成功,没有则失败。上传失败的原因可能hdfs上面路径不存在,比如说hmaster文件夹不存在,在hdfs的user目录下创建hmaster文件夹:

hadoop fs -mkdir /user/hmaster

集群版代码:直接从HDFS读取要统计单词的文件word.txt


package code.demo.spark;

import scala.Tuple2;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;

public final class JavaWordCount {
	private static final Pattern SPACE = Pattern.compile(" ");
	public static void main(String[] args) throws Exception {
		SparkConf sparkConf = new SparkConf().setAppName("JavaWordCount");
		JavaSparkContext ctx = new JavaSparkContext(sparkConf);
		
		//从hdfs中读取word.txt进行单词统计
		
		JavaRDD<String> lines = ctx.textFile("hdfs://hadoop-mn01:9000/user/hmaster/word.txt");
		JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
			private static final long serialVersionUID = 1L;
			@Override
			public Iterable<String> call(String s) {
				return Arrays.asList(SPACE.split(s));
			}
		});
		JavaPairRDD<String, Integer> ones = words.mapToPair(new PairFunction<String, String, Integer>() {
			private static final long serialVersionUID = 1L;
			@Override
			public Tuple2<String, Integer> call(String s) {
				return new Tuple2<String, Integer>(s, 1);
			}
		});
		JavaPairRDD<String, Integer> counts = ones.reduceByKey(new Function2<Integer, Integer, Integer>() {
			private static final long serialVersionUID = 1L;
			@Override
			public Integer call(Integer i1, Integer i2) {
				return i1 + i2;
			}
		});
		List<Tuple2<String, Integer>> output = counts.collect();
		for (Tuple2<?, ?> tuple : output) {
			System.out.println(tuple._1() + ": " + tuple._2());
		}
		ctx.stop();
		ctx.close();
	}
}

从本地windows上传jar包到linux服务器的集群里,我用的是WinSCP,除了WinSCP还有其他的方法,不一一例举。
这里写图片描述

Step4:集群上提交Jar包

打开spark主节点服务器的终端,进入spark的安装目录,执行提交命令:

.bin/spark-submit --class code.demo.spark.JavaWordCount --master spark://hadoop-mn01:7077 /home/hmaster/WordCount.jar

命令解释:
.bin/spark-submit :提交命令,提交应用程序
–class code.demo.spark.JavaWordCount:应用程序的主类
–master spark://hadoop-mn01:7077 :运行的master,跟本地测试local不一样
/home/hmaster/WordCount.jar:jar包所在路径
提交之后程序运行完后就能看到统计的结果:
这里写图片描述
Hello WordCount!

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
### 回答1: 1. 首先,需要在IDE创建一个Maven项目,并添加Spark依赖。 2. 在项目创建一个Main类,并编写Spark程序。 3. 在IDE打包项目,生一个jar包。 4. 将生jar包传到Spark集群。 5. 在Spark集群运行以下命令: ``` spark-submit --class com.example.Main --master yarn --deploy-mode cluster /path/to/jar ``` 其,com.example.Main是Main类的完整路径,/path/to/jarjar包的路径。 6. 等待程序运行,查看输出结果。 ### 回答2: 将ideajava项目打包一个可执行的jar包,可以方便地在spark集群运行。实现步骤如下: 1.在idea,选项目右击,点击“Open Module Setting”打开模块设置。 2.进入模块设置界面,点击左侧菜单的“Artifacts”,然后点击“+”号添加一个新的Artifact。 3.选择“Jar”类型,填写Artifact的名称和输出路径。 4.定义Artifact所需要打包的内容,如项目使用的外部库、资源文件和自身编写的类等。在“Output Layout”界面进行规划和配置。 5.将Artifact设置为“Build on make”,以便在每次编译时自动打包。 6.完Artifact设置后,点击“OK”保存配置,然后再次右键点击项目,选择“Build Artifact” -> 要打包的Artifact名字 -> “Build”。 7.功完打包后,可以在指定输出路径找到生jar包。 8.在spark集群调用该jar包,使用“spark-submit”命令提交任务,并指定jar包路径和主函数类名。例如: $ spark-submit --class com.example.Main --master spark://master:7077 myproject.jar 有了打包好的jar包,可以方便地在不同的机器上运行spark任务,而且能够有效地减少开发者的工作量和提高程序的可维护性和重用性。 ### 回答3: 在将 IDEA 项目打包JAR 文件并在 Spark运行之前,我们需要先了解一些基本概念和步骤。 首先需要明确的是,Spark是一个分布式计算框架,它的运行需要一个集群环境,而 JAR 文件则是一种可执行程序文件,是用来包含所有依赖的文件和代码。 因此,在将 IDEA 项目打包JAR 文件之前,需要确保你已经搭建好了 Spark 集群环境,并且在项目引入了必要的 Spark 依赖。 接下来,我们可以按照以下步骤将 IDEA 项目打包JAR 文件: 1. 在 IDEA 选择项目 → 打包打包JAR 文件。 2. 在弹出的窗口选择所需的设置,包括打包的模块、存放路径、依赖项等等。此外,还需要指定启动类(即包含 main 方法的类)。 3. 点击“打包”按钮,即可生 JAR 文件。 4. 将生JAR 文件上传到 Spark 集群的某个节点(比如 master 节点),同时确保所有依赖包都已正确安装。 最后,我们可以通过以下命令在 Spark运行 JAR 文件: ``` spark-submit --class <main-class> --master <master-url> <path-to-jar> [args] ``` 其,<main-class> 表示启动类的完整类名,<master-url> 表示 Spark 集群的主节点 URL,<path-to-jar> 表示 JAR 文件在节点上的路径,[args] 表示可选的运行参数。 总之,将 IDEA 项目打包JAR 文件并在 Spark运行,需要确保正确搭建集群环境和引入必要的依赖,以及熟悉打包运行命令的使用方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翁松秀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值