Apache Spark:CentOS7下的提交和执行一个官方的jar项目包

Posted 你是小KS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache Spark:CentOS7下的提交和执行一个官方的jar项目包相关的知识,希望对你有一定的参考价值。

1.声明

当前内容主要为学习和使用Apache Spark,当前内容来源Spark官方文档

当前内容主要为:

  1. 使用官方的基本demo统计README.md文件的a\\b的数量
  2. Spark的启动和关闭,访问webui界面
  3. 将官方demo通过maven方式打成jar包,并上传至CentOS7中,提交给Spark执行

当前版本:spark-2.4.6-bin-hadoop2.7(为了后面的与Hadoop做集群操作保留版本)

2.下载解压启动Spark

1.首先在官方上找到对应的版本(版本自己按照Hadoop的版本来找)

2.解压:tar -xvif XXXX

3.启动Spark(单机版本的)

./sbin/start-master.sh

在这里插入图片描述

如果开放了8080端口的可以通过webUI界面访问
在这里插入图片描述
此时Spark是已经启动的状态的!

3.开始复制官方的demo打包

官方demo地址:Java的Demo

1. 选择的是java程序的那段

/**
 * 
 * @author hy
 * @createTime 2021-05-16 14:36:12
 * @description 当前内容主要为学习Spark,这个需要通过打包方式发布到spark上面,然后使用./bin/spark-submit XXX.jar方式进行执行操作
 *
 */
public class App {
	public static void main(String[] args) {

		String logFile = "/home/hy/spark-2.4.6-bin-hadoop2.7/README.md"; // Should be some file on your system
		SparkSession spark = SparkSession.builder().appName("Simple Application").getOrCreate();
		Dataset<String> logData = spark.read().textFile(logFile).cache();
		long numAs = logData.filter(new FilterFunction<String>() {

			@Override
			public boolean call(String value) throws Exception {
				// TODO Auto-generated method stub
				return value.contains("a");
			}
		}).count();
		/* long numAs = logData.filter(s -> s.contains("a")); */
		/* long numBs = logData.filter(s -> s.contains("b")).count(); */
		long numBs = logData.filter(new FilterFunction<String>() {

			@Override
			public boolean call(String value) throws Exception {
				// TODO Auto-generated method stub
				return value.contains("b");
			}
		}).count();
		

		System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);

		spark.stop();
	}
}

这里需要注意的地方为:
long numAs = logData.filter(s -> s.contains("a"));和long numBs = logData.filter(s -> s.contains("b")).count();

这个本地不能编译!(所以本人替换了)

2.配置pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>SparkTest</groupId>
	<artifactId>SparkTest</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>SparkTest</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
		<dependency>
			<groupId>org.apache.spark</groupId>
			<artifactId>spark-core_2.12</artifactId>
			<version>2.4.6</version>
			 <scope>provided</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
		<dependency>
			<groupId>org.apache.spark</groupId>
			<artifactId>spark-sql_2.12</artifactId>
			<version>2.4.6</version>
			 <scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>org.apache.iotdb</groupId>
			<artifactId>spark-iotdb-connector</artifactId>
			<version>0.11.1</version>
			 <scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<version>1.2.1</version>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<configuration>
							<transformers>
								<transformer
									implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
									<mainClass>com.hy.spark.test.App</mainClass>
								</transformer>
							</transformers>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

注意:不要将<scope>provided</scope>注释掉,否则在执行的时候出现错误:Exception in thread "main" java.lang.SecurityException: Invalid signature fi

在这里插入图片描述

该错误的原因是,你导入了其他的库,可能与Spark的运行的库出现了冲突(或者出现了交叉,java虚拟机不能导入多个相同的lib)

3.开始打包为jar
在这里插入图片描述

执行完毕后:
在这里插入图片描述

4.上传到Spark中并执行

将前面的SparkTest-0.0.1-SNAPSHOT.jar(打包完成就几KB)这个上传到Spark的工作空间中
在这里插入图片描述
开始提交执行任务

./bin/spark-submit SparkTest-0.0.1-SNAPSHOT.jar

执行的结果:
在这里插入图片描述
在这里插入图片描述

由于输出的东西太多,所以需要很仔细的查看,才会找到执行结果

执行成功!

5.关闭Spark(单机版)

./sbin/stop-master.sh

在这里插入图片描述

以上是关于Apache Spark:CentOS7下的提交和执行一个官方的jar项目包的主要内容,如果未能解决你的问题,请参考以下文章

无法将 Apache Spark 应用程序提交到容器化集群

如何在Spark提交中使用s3a和Apache spark 2.2(hadoop 2.8)?

Apache Spark s3a 提交者 - 线程堆栈 - 内存不足问题

《Apache Spark源码剖析》学习笔记之Spark作业提交

关于IDEA开发环境下的Kafka+Spark Streaming的classpath配置方式

使用 Apache Spark 提交 Python 应用程序