教你看scala版本和spark版本是否兼容,以及需要下载的Maven包与JDK版本之间是否兼容,如何在pom.xml中写相关组件的配置等,用作IDEA中spark项目开发,并用Maven管理相关依赖

大数据专业的同学有没有在初次学习Spark大数据分析的时候,老是搞不清楚Scala版本与Spark的哪个版本兼容,该分别使用哪一个版本呢?还有,假如你是用的是Maven管理依赖的话,是不是不知道该下载哪个Maven安装包呢?这些问题这篇文章帮你解答!!!

1、首先我们来看如何看Scala版本与Spark版本是否兼容

我们打开下面这个网址:

Maven Repository: Search/Browse/Explore

打开如下图所示,这个网址用于查所需要的依赖如何在IDEA中的pom.xml中写,我们也可用来查看Scala版本与Spark版本是否兼容,我们在如图的搜索框中输入spark并回车搜索

得到如下结果,我们点开Spark-core这个,就可以看到如何在pom.xml中写Spark-core的配置了,如果需要你也可以看到Spark SQL、Spark Streaming等都有,可以自行查看

 进去后下滑会看到相关的Spark版本和Scala版本信息,我们以Spark3.4.1版本举例,它兼容的Scala版本是Scala2.12.x和Scala2.13.x版本,这里就解决了如何知道Spark版本与Scala版本是否兼容的问题

这里简单介绍一下如何查看自己安装的Scala版本,首先win+R然后输入cmd并回车

然后输入scala -version并回车,可以看到我的是2.12.18版本(属于上面表中的2.12),至于如何安装Scala并配置好环境变量可以去看我往期文章http://【用IDEA开发基于Spark3.4.1和Scala2.12.18的Spark项目的sbt方式配置,超详细哦 - 优快云 App】https://blog.youkuaiyun.com/weizhigongzi/article/details/144381627?sharetype=blog&shareId=144381627&sharerefer=APP&sharesource=weizhigongzi&sharefrom=link

我们点击表中2.12的字样就可以跳转到如何写配置的界面,我们可以看到Spark3.4.1版本且用的是Scala2.12.x版本的Spark-core在pom.xml中应该如下写配置,其它组件的也是同样的查看方法

2、下面我们该介绍如何选择依赖管理工具Maven的版本了

我们打开Maven安装包的下载网址​​​​​​https://maven.apache.org/download.cgi 

 

从上面的两张图中我们可以看到这时的最新版本为3.9.9版本,而它的要求里面也明确写了要JDK8及以上才行,而第二张图中的3.8.x版本要求则是JDK1.7及以上,这里说一下,当下载Maven安装包时,主要需要考虑的是Maven与你的JDK版本是否兼容,但还需要注意Maven版本与你的IDEA版本的兼容问题。Maven本身是一个项目管理工具,用于构建和管理Java项目,它的运行依赖于JDK。因此,确保Maven支持的JDK版本与你安装的JDK版本匹配是至关重要的,你不需要考虑Maven版本是否与你的Spark版本或Scala版本是否兼容。还有就是为啥上面的两个版本中一个是JDK8,一个是JDK1.7,如下,也就是说JDK8也可以叫做JDK1.8,而JDK1.7也可以叫做JDK7。

  • 在Java 8(JDK8)及以前的版本中,版本号使用“1.x”的形式,如Java 1.4、Java 1.5、Java 1.6、Java 1.7。这种表示方法中,主版本号是1,后面跟着小数点和一个次版本号。
  • 从Java 9开始,Oracle改变了版本号的表示方式,去掉了小数点,直接使用整数表示主版本号,如Java 9、Java 10、Java 11等。

 如何查看自己的JDK版本呢,win+R输入cmd并回车,然后再输入java -version查看JDK版本,可以看到我的是JDK1.8(也就是JDK8),是一个比较旧的版本了

常用的IDEA版本与Maven版本的兼容对照如下:

  • 1.IDEA 2024 兼容maven 3.9.6及之前的所用版本
  • 2.IDEA 2023 兼容maven 3.9.5及之前的所用版本
  • 3.IDEA 2022 兼容maven 3.8.5及之前的所用版本
  • 4.IDEA 2021 兼容maven 3.8.1及之前的所用版本
  • 5.IDEA 2020 兼容Maven 3.6.3及之前所有版本
  • 6.IDEA 2018 兼容Maven3.6.1及之前所有版本

我个人比较推荐使用3.5.4或者3.6.3版本,这两个版本都是我常用的两个版本且对大多数的IDEA版本都有很好的兼容性

至此,教程完毕!!! 

当然可以!以下是 **完全基于你当前环境版本要求**(Scala 2.12.11, Spark 3.1.1, Hadoop 3.2.4, JDK 8)重新整理的、**可直接使用且能正常运行的 `pom.xml` 文件**。 --- ### ✅ 修复目标 - ✅ 保留所有原始依赖版本不变 - ✅ 解决 `NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder` - ✅ 消除 SLF4J 多绑定冲突 - ✅ 添加日志实现(`reload4j`) - ✅ 正确打为可执行 fat jar - ✅ 支持本地运行 Spark + Hive - ✅ 避免 Guava、log4j 等常见依赖冲突 --- ### ✅ 修改后的完整 `pom.xml` ```xml <?xml version="1.0" encoding="UTF-8"?> <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>org.example</groupId> <artifactId>scala_tutorial</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <scala.version>2.12.11</scala.version> <spark.version>3.1.1</spark.version> <hadoop.version>3.2.4</hadoop.version> <main.class>MySQLToHiveIncremental2</main.class> <!-- 替换为你主类的全名 --> </properties> <dependencies> <!-- MySQL Connector --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> <!-- Scala Library --> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>${scala.version}</version> </dependency> <!-- Spark Core --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.12</artifactId> <version>${spark.version}</version> <exclusions> <!-- 排除旧版 log4j slf4j-log4j12,避免冲突 --> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <!-- 统一 Guava 版本 --> <exclusion> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> </exclusions> </dependency> <!-- Spark SQL --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.12</artifactId> <version>${spark.version}</version> <exclusions> <!-- 防止引入多余的日志绑定 --> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-reload4j</artifactId> </exclusion> </exclusions> </dependency> <!-- Spark Hive Support --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-hive_2.12</artifactId> <version>${spark.version}</version> </dependency> <!-- Hadoop Client --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>${hadoop.version}</version> <exclusions> <!-- 排除 hadoop 自带的 log4j guava --> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-reload4j</artifactId> </exclusion> <exclusion> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> </exclusions> </dependency> <!-- ✅ 必须添加:SLF4J 日志实现(使用 reload4j) --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.35</version> </dependency> <dependency> <groupId>ch.qos.reload4j</groupId> <artifactId>reload4j</artifactId> <version>1.2.18.3</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-reload4j</artifactId> <version>1.7.35</version> </dependency> <!-- ✅ 统一 Guava 版本,避免 NoSuchMethodError --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>27.0-jre</version> </dependency> </dependencies> <build> <sourceDirectory>src/main/scala</sourceDirectory> <testSourceDirectory>src/test/scala</testSourceDirectory> <plugins> <!-- Scala Compiler Plugin --> <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>4.8.1</version> <executions> <execution> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> </execution> </executions> <configuration> <scalaVersion>${scala.version}</scalaVersion> </configuration> </plugin> <!-- Maven Compiler Plugin --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>8</source> <target>8</target> </configuration> </plugin> <!-- Maven Assembly Plugin: 打成可执行 fat jar --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>${main.class}</mainClass> </manifest> </archive> <finalName>scala_tutorial</finalName> <appendAssemblyId>false</appendAssemblyId> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project> ``` --- ### ✅ 使用说明 #### 1. 创建日志配置文件 在 `src/main/resources/log4j.properties` 中创建: ```properties log4j.rootLogger=INFO, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.target=System.err log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %-5p %c{1}: %m%n # 减少第三方库的日志噪音 log4j.logger.org.eclipse.jetty=WARN log4j.logger.org.apache.hadoop=WARN log4j.logger.org.sparkproject.jetty=WARN ``` #### 2. 编译打 ```bash mvn clean package ``` 输出:`target/scala_tutorial.jar` #### 3. 运行程序 确保你的主类中有 `.master("local[*]")`: ```scala val spark = SparkSession.builder() .appName("MySQL to Hive") .master("local[*]") // 必须设置 .enableHiveSupport() .getOrCreate() ``` 然后运行: ```bash java -cp target/scala_tutorial.jar MySQLToHiveIncremental2 ``` 或使用 `spark-submit`(推荐生产): ```bash spark-submit --class MySQLToHiveIncremental2 target/scala_tutorial.jar ``` --- ### ✅ 成功标志 你会看到: ``` INFO SparkContext: Running Spark version 3.1.1 INFO SparkUI: Started at http://xxx:4040 ... ``` 并且不再有 `NoClassDefFoundError` 或 `Multiple bindings` 警告。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

長琹

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

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

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

打赏作者

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

抵扣说明:

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

余额充值