Apache Spark:CentOS7下的提交和执行一个官方的jar项目包
Posted 你是小KS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache Spark:CentOS7下的提交和执行一个官方的jar项目包相关的知识,希望对你有一定的参考价值。
1.声明
当前内容主要为学习和使用Apache Spark,当前内容来源Spark官方文档
当前内容主要为:
- 使用官方的基本demo统计README.md文件的a\\b的数量
- Spark的启动和关闭,访问webui界面
- 将官方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项目包的主要内容,如果未能解决你的问题,请参考以下文章
如何在Spark提交中使用s3a和Apache spark 2.2(hadoop 2.8)?
Apache Spark s3a 提交者 - 线程堆栈 - 内存不足问题
《Apache Spark源码剖析》学习笔记之Spark作业提交