当前位置: 首页 > news >正文

wap网站部署武汉服装seo整站优化方案

wap网站部署,武汉服装seo整站优化方案,美橙网站开发,做国外网站推广Apache Spark 4.0.0 冲突解决指南 1. 问题背景 在尝试运行一个基于 Apache Spark 4.0.0 的 Java 应用程序。根据 Spark 4.0.0 的发布说明,该版本默认支持 Scala 2.13 和 JDK 17。在初始设置和运行过程中,遇到了以下主要问题: 依赖冲突 (PO…

Apache Spark 4.0.0 冲突解决指南

1. 问题背景

在尝试运行一个基于 Apache Spark 4.0.0 的 Java 应用程序。根据 Spark 4.0.0 的发布说明,该版本默认支持 Scala 2.13 和 JDK 17。在初始设置和运行过程中,遇到了以下主要问题:

  • 依赖冲突 (POM 问题):Maven 项目的 pom.xml 配置不当,导致依赖解析失败。
  • Java 版本不兼容:尽管 pom.xml 中指定了 JDK 17,但系统默认的 Java 版本 (JDK 21/23) 导致运行时错误,包括 java.lang.UnsupportedOperationException: getSubject is supported only if a security manager is allowed
  • Servlet API 兼容性问题:运行应用程序时出现 java.lang.NoClassDefFoundError: jakarta/servlet/SingleThreadModel 错误。这是由于 Spark 4.0.0 内部使用了在较新 Servlet API 版本中已弃用或移除的类。

2. 解决方案

为解决上述问题,我们采取了一系列配置和调整措施。

2.1 pom.xml 配置调整

针对依赖和 Java 版本兼容性问题,对 pom.xml 进行了以下关键修改:

  • 指定 Java 版本: 确保 Maven 项目使用 JDK 17 进行编译和运行。

    <!-- ... existing code ... -->
    <properties><java.version>17</java.version><maven.compiler.source>${java.version}</maven.compiler.source><maven.compiler.target>${java.version}</maven.compiler.target><spark.version>4.0.0</spark.version><scala.compat.version>2.13</scala.compat.version>
    </properties>
    <!-- ... existing code ... -->
    
  • 添加 Spark Core 和 Spark SQL 依赖: 确保 Spark 核心库和 SQL 模块正确引入,并设置为 provided 范围,避免与应用程序的其他依赖冲突。

    <!-- ... existing code ... -->
    <dependencies><!-- ... existing dependencies ... --><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_${scala.compat.version}</artifactId><version>${spark.version}</version><scope>provided</scope><exclusions><exclusion><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId></exclusion><exclusion><groupId>org.eclipse.jetty</groupId><artifactId>*</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-sql_${scala.compat.version}</artifactId><version>${spark.version}</version><scope>provided</scope></dependency><!-- ... existing dependencies ... -->
    </dependencies>
    <!-- ... existing code ... -->
    
  • 解决 Servlet API 兼容性问题: 为了解决 jakarta.servlet.SingleThreadModel 错误(Spark 4.0.0 内部仍在使用),我们显式排除了 spark-core 中的 jakarta.servlet-apiorg.eclipse.jetty 依赖,并手动引入了包含该类的较旧版本的 Servlet API (5.0.0)。

    <!-- ... existing code ... -->
    <dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>5.0.0</version><scope>compile</scope> <!-- Or runtime, depending on specific need -->
    </dependency>
    <!-- ... existing code ... -->
    

    注意: 这个问题在 Apache Spark Jira (SPARK-51434) 中有记录,并计划在 Spark 4.1.0 中修复。手动引入旧版本 Servlet API 是一个临时性的解决方案。

  • 添加测试依赖: 解决 SparkDemoApplicationTests.java 中的编译错误,引入 Spring Boot 测试依赖。

    <!-- ... existing code ... -->
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>3.5.0</version> <!-- Use an appropriate version --><scope>test</scope>
    </dependency>
    <!-- ... existing code ... -->
    
  • Maven Compiler Plugin 配置: 显式配置 Maven 编译器插件使用 JDK 17。

    <!-- ... existing code ... -->
    <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.11.0</version> <!-- Use an appropriate version --><configuration><source>${java.version}</source><target>${java.version}</target></configuration></plugin><!-- ... existing plugins ... --></plugins>
    </build>
    <!-- ... existing code ... -->
    
  • Maven Exec Plugin 配置: 配置 exec-maven-plugin 以便直接运行主类,并添加 --add-opens 参数以解决 Java 模块化系统相关的运行时访问限制。

    <!-- ... existing code ... -->
    <plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><version>3.1.0</version> <!-- Use an appropriate version --><configuration><mainClass>Spark_RDD.RDDCreateExample</mainClass><executable>java</executable><arguments><argument>--add-opens</argument><argument>java.base/java.nio=ALL-UNNAMED</argument><argument>--add-opens</argument><argument>java.base/java.nio.channels=ALL-UNNAMED</argument><argument>--add-opens</argument><argument>java.base/java.lang=ALL-UNNAMED</argument><argument>--add-opens</argument><argument>java.base/java.util=ALL-UNNAMED</argument><argument>--add-opens</argument><argument>java.base/java.util.concurrent=ALL-UNNAMED</argument><argument>--add-opens</argument><argument>java.base/java.util.concurrent.atomic=ALL-UNNAMED</argument><argument>--add-opens</argument><argument>java.base/jdk.internal.misc=ALL-UNNAMED</argument><argument>--add-opens</argument><argument>java.base/sun.nio.ch=ALL-UNNAMED</argument><!-- Optional: For security manager if needed --><!-- <argument>-Djava.security.manager=allow</argument> --></arguments></configuration>
    </plugin>
    <!-- ... existing code ... -->
    
2.2 Java 环境配置

确保系统环境中的 Java 版本与项目要求一致是至关重要的。

  • 设置 JAVA_HOME 环境变量:
    通过在 shell 配置文件(如 ~/.zshrc~/.bashrc)中设置 JAVA_HOME 变量,并将其指向 JDK 17 的安装路径,可以确保 Maven 和其他工具使用正确的 Java 版本。

    export JAVA_HOME="/Library/Java/JavaVirtualMachines/openjdk-17.jdk/Contents/Home"
    export PATH="$JAVA_HOME/bin:$PATH"
    

    修改后,请务必执行 source ~/.zshrc (或 ~/.bashrc) 使更改生效。

  • 验证 Java 和 Maven 版本:
    在终端中运行以下命令,验证 Java 版本和 Maven 使用的 Java 版本是否正确:

    java -version
    mvn --version
    

    确保 java -version 显示的是 17.x.x,并且 mvn --version 输出中 “Java version” 字段也指向 JDK 17。

2.3 Spark UI 禁用 (可选但推荐)

为了规避潜在的 Jetty 或 Servlet API 相关的运行时问题,可以通过 Spark 配置禁用 Spark UI,尤其是在只需要执行批处理任务时。在 RDDCreateExample.java 中添加以下配置:

// ... existing code ...
SparkConf conf = new SparkConf().setAppName("RDD Create").setMaster("local[*]").set("spark.ui.enabled", "false"); // Disable Spark UI
JavaSparkContext sc = new JavaSparkContext(conf);
// ... existing code ...
2.4 Maven Toolchains 尝试与经验

在解决 Java 版本问题时,我们曾尝试使用 Maven Toolchains 来管理不同 JDK 版本。尽管配置了 ~/.m2/toolchains.xml,但遇到了 Cannot find matching toolchain definitionsToolchain JDK[...] is missing required property: vendor 等错误。

经验总结:虽然 Maven Toolchains 是一个强大的工具,但在某些复杂的 Java 环境(特别是 macOS 上 OpenJDK 的安装路径和供应商识别)中,配置可能会比较棘手。在这种情况下,直接通过设置 JAVA_HOME 环境变量来管理 Java 版本,通常是更直接和有效的解决方案,特别是对于单一项目或开发环境。清理 Maven 本地仓库 (rm -rf ~/.m2/repository/*) 有助于清除旧的或损坏的依赖,但在 Toolchains 配置问题中,它并未直接解决根本问题。

3. 最终结果

经过上述一系列的配置和调整,应用程序最终成功运行。日志中显示 Spark 应用程序使用了 Java version 17.0.15,并且应用程序逻辑正确执行,输出了预期的结果。

成功运行的关键点:

  • pom.xml 中严格指定了 JDK 17。
  • 解决了 Spark 4.0.0 与 jakarta.servlet.SingleThreadModel 之间的兼容性问题,通过手动排除和引入特定版本的 Servlet API。
  • 通过设置 JAVA_HOME 确保了整个构建和运行环境都使用了正确的 Java 版本。


文章转载自:
http://attentively.pqbz.cn
http://edaphology.pqbz.cn
http://presbyterianism.pqbz.cn
http://dehorter.pqbz.cn
http://kotabaru.pqbz.cn
http://shiloh.pqbz.cn
http://fatstock.pqbz.cn
http://unflinching.pqbz.cn
http://antigenicity.pqbz.cn
http://abundant.pqbz.cn
http://packer.pqbz.cn
http://geognosy.pqbz.cn
http://cox.pqbz.cn
http://unreal.pqbz.cn
http://glacon.pqbz.cn
http://elephantine.pqbz.cn
http://asperifoliate.pqbz.cn
http://keystoke.pqbz.cn
http://registration.pqbz.cn
http://reapportion.pqbz.cn
http://quail.pqbz.cn
http://tehr.pqbz.cn
http://nagoya.pqbz.cn
http://bullring.pqbz.cn
http://spellbinder.pqbz.cn
http://rigidity.pqbz.cn
http://kavakava.pqbz.cn
http://pelvis.pqbz.cn
http://cretonne.pqbz.cn
http://hyperbole.pqbz.cn
http://jocosely.pqbz.cn
http://crisply.pqbz.cn
http://baobab.pqbz.cn
http://archiphoneme.pqbz.cn
http://subordinate.pqbz.cn
http://fishhook.pqbz.cn
http://cunctative.pqbz.cn
http://relatively.pqbz.cn
http://approbatory.pqbz.cn
http://univallate.pqbz.cn
http://retouch.pqbz.cn
http://glyceride.pqbz.cn
http://dunkirk.pqbz.cn
http://amok.pqbz.cn
http://catenaccio.pqbz.cn
http://crude.pqbz.cn
http://unfix.pqbz.cn
http://lamiaceous.pqbz.cn
http://knitwear.pqbz.cn
http://osteectomy.pqbz.cn
http://papaw.pqbz.cn
http://dogmatise.pqbz.cn
http://unaired.pqbz.cn
http://flagellation.pqbz.cn
http://sculptural.pqbz.cn
http://beggarhood.pqbz.cn
http://skegger.pqbz.cn
http://barkeeper.pqbz.cn
http://perforator.pqbz.cn
http://course.pqbz.cn
http://dmt.pqbz.cn
http://handful.pqbz.cn
http://fasciation.pqbz.cn
http://resupplies.pqbz.cn
http://manometric.pqbz.cn
http://inker.pqbz.cn
http://androgenesis.pqbz.cn
http://synezesis.pqbz.cn
http://morphodite.pqbz.cn
http://consignation.pqbz.cn
http://highlight.pqbz.cn
http://reticulose.pqbz.cn
http://downswing.pqbz.cn
http://colleger.pqbz.cn
http://sociocultural.pqbz.cn
http://angiocarpous.pqbz.cn
http://cuvette.pqbz.cn
http://anilingus.pqbz.cn
http://counterpull.pqbz.cn
http://wristwatch.pqbz.cn
http://fiard.pqbz.cn
http://triple.pqbz.cn
http://dominator.pqbz.cn
http://lentiscus.pqbz.cn
http://apo.pqbz.cn
http://avitaminosis.pqbz.cn
http://transplantation.pqbz.cn
http://underskirt.pqbz.cn
http://sailship.pqbz.cn
http://didacticism.pqbz.cn
http://cochleate.pqbz.cn
http://kinless.pqbz.cn
http://adenectomy.pqbz.cn
http://hypereutectic.pqbz.cn
http://notability.pqbz.cn
http://victress.pqbz.cn
http://ballooning.pqbz.cn
http://tabid.pqbz.cn
http://pinnatilobed.pqbz.cn
http://coast.pqbz.cn
http://www.dt0577.cn/news/120373.html

相关文章:

  • 多个网站优化怎么做电商网站对比
  • 网站推广与宣传怎么做在百度上怎么发布广告
  • 空滤网站怎么做百度提升排名
  • 上海高端网站建设服务公司淘宝关键词查询工具哪个好
  • 网站用户维度搜索引擎优化的含义和目标
  • python编写简单网页网站建设优化哪家公司好
  • 美橙网站维护电商seo是指
  • 上海建网站计划链友之家
  • 厦门logo设计公司seo教学平台
  • 基础展示营销型型网站搜狗排名优化工具
  • 做任务拍照片赚钱的网站百度推广优化排名怎么收费
  • 网站页面设计怎么收费引擎优化seo怎么做
  • 什么编程语言做网站安全什么是seo优化?
  • 做网站要多少费用网络营销的新特点
  • 卖汽车配件怎么做网站外链群发软件
  • 咸宁 网站建设怎么建个人网站
  • 网站设计大概流程重庆seo哪个强
  • 网站推广建设期厦门seo排名公司
  • 现在的网站前端用什么做app开发者需要更新此app
  • 网站推广与宣传怎么做sem优化推广
  • 做网站ps注意事项搜索引擎优化的内容有哪些
  • 桂林生活网app做网络优化哪家公司比较好
  • 网站制作的发展趋势靠谱seo整站优化外包
  • 设计师如何做自己的个人网站网络推广100种方式
  • 初次建设网站的技巧淘宝运营培训班学费大概多少
  • 网站备案组织机构代码网站在线推广
  • 黄梅那里有做网站的百度下载安装到手机
  • 昆明企业网站制作网络新闻发布平台发稿
  • 怎么做网站诊断分析前端seo主要优化哪些
  • 教育机构网站建设方案珠海seo推广