SpringBoot + Spark on Yan踩坑记

终极目标 采用SpringBoot集成SparkStreaming+Kafka+Redis+HDFS等组件,打包成jar(下文将之简称为“应用”),运行在Spark on Yan环境,实现离线+实时分布式计算。 本文中采用Spark on Yan Client模式发布应用。 参考文献:https://www.cnblogs.com/langfanyun/p/8040136.html ...
摘要由CSDN通过智能技术生成
  • 终极目标
    采用SpringBoot集成SparkStreaming+Kafka+Redis+HDFS等组件,打包成jar(下文将之简称为“应用”),运行在Spark on Yan环境,实现离线+实时分布式计算。
    本文中采用Spark on Yan Client模式发布应用。
    参考文献:https://www.cnblogs.com/langfanyun/p/8040136.html
     
  • 第一坑:启动方式与local模式迥异
    local模式(setMaster("local[2]"))下,SpringBoot集成SparkStreaming的app与其他web应用无差异,直接java -jar xxx.jar即可启动。
    Spark on Yan环境下, 必须使用spark-submit等命令,由Spark-Yarn-Client托管应用的jar,否则,应用的jar中缺少向Yarn资源管理器申请资源的模块,无法正常启动。
    【对策】
    1)应用的pom中引入spark-yarn依赖

    <dependency>

        <groupId>org.apache.spark</groupId>

        <artifactId>spark-yarn_${scala.tools.version}</artifactId>

        <version>${spark.core.version}</version>

    </dependency>

    其中scala.tools.version为scala版本,spark.core.version为spark版本

     

    2)sparkConf设置yarn相关配置

    val conf = new SparkConf().setMaster("yarn-client").setAppName(sparkAppName)

    3)启动命令

    /bin/spark-submit --conf spark.yarn.jars="local:/opt/xxx/lib/spark/jars/*,local:/opt/xxx/lib/spark/hive/*,hdfs://xxx:8020/user/mypath/my-service/lib/*" --properties-file /home/mypath/spark.conf --driver-java-options "-Dorg.springframework.boot.logging.LoggingSystem=none -Dspring.profiles.active=test -Dspark.yarn.dist.files=/home/mypath/yarn-site.xml" --class org.springframework.boot.loader.JarLauncher --master yarn --deploy-mode client my-service-1.0.0-SNAPSHOT.jar

    各目录的说明:“/opt/xxx/lib/spark”部分为示例机器安装Spark的目录,根据实际情况修改即可。"hdfs://xxx:8020/user/mypath/my-service/lib"部分为示例机器hdfs上存储应用依赖的库文件的目录,根据实际情况修改即可。“/home/mypath/”部分为示例机器上存放spark配置文件的目录,根据实际情况修改即可。

    各参数的说明:“spark.yarn.jars”用于指定executor容器运行时依赖的jar的目录,特别是“hdfs://xxx:8020/user/mypath/my-service/lib/*”非常关键,后面将会讲到相关的各种坑。“--properties-file”指定spark自定义配置文件,可绕开许多坑,后面也会讲到。“--driver-java-options”用于指定应用的运行环境参数,绕坑专业户,且听下文分解。“–class”必须指定springboot的main所在class,否则就是坑。

     

  • 第二坑:logback和log4j冲突
    spark-submit内部使用log4j作为日志模块,SpringBoot默认采用logback作为日志模块,默认情况下将出现以下各种异常。

    java.lang.ClassCastException: org.apache.logging.log4j.simple.SimpleLoggerContext cannot be cast to org.apache.logging.log4j.core.LoggerContext

    ClassCastException: org.slf4j.impl.Log4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext

    LoggerFactory is not a Logback LoggerContext but Logback...

    【对策】
    1)pom中绕开所有logback

    <exclusions>

        <exclusion>

            <groupId>ch.qos.logback</groupId>

           <artifactId>logback-classic</artifactId>

        </exclusion>

    </exclusions>

    2)springboot停止尝试加载任何logger

    具体办法是在启动命令中增加java参数org.springframework.boot.logging.LoggingSystem,指定为none即可。

    /bin/spark-submit ... --driver-java-options "-Dorg.springframework.boot.logging.LoggingSystem=none ..." ... my-service-1.0.0-SNAPSHOT.jar

  • 第三坑:GSON版本冲突
    Spark自带的GSON版本可能与SpringBoot依赖的版本冲突,引起如下异常:

    Failed to instantiate [com.google.gson.GsonBuilder

    【对策】
    将Spark自带的GSON库重命名

  • 第四坑:Hadoop版本冲突
    集群环境的Hadoop版本可能与应用依赖的版本冲突,引起如下异常&#

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
Spring Boot是一个轻量级的Java开发框架,可以简化Java应用程序的开发和部署过程,并提供了一套开箱即用的配置和功能。Spark是一个开源的大数据处理框架,可以用于快速、易于使用的大规模数据处理,如电影推荐系统。JSP是Java Server Pages的缩写,是一种用于在Web应用程序中生成动态网页的技术。 结合Spring Boot和Spark,可以轻松构建一个基于Web的电影推荐系统。首先,使用Spring Boot搭建一个Web应用程序,通过控制器将用户的请求路由到相应的处理方法。然后,使用Spark框架处理电影推荐的算法和逻辑。通过Spark提供的大数据处理能力,可以从庞大的电影数据集中提取用户的行为数据,进行数据分析和挖掘,从而生成个性化的电影推荐列表。 在电影推荐系统中,可以使用JSP作为前端视图模板,根据用户的请求和Spark提供的推荐结果生成动态网页。通过JSP的标签和脚本语言,可以动态地展示电影信息、用户评分和推荐列表。同时,可以使用JSP提供的表单和交互元素与用户进行交互,例如用户可以搜索电影、查看电影详情、评分电影等。 总结来说,利用Spring Boot搭建Web应用程序,结合Spark框架进行电影推荐算法和逻辑的处理,并使用JSP作为前端视图模板,可以构建一个功能强大、易于使用的电影推荐系统。这个系统可以根据用户的个人喜好和行为数据,生成个性化的电影推荐列表,为用户提供更好的电影观影体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值