zoukankan      html  css  js  c++  java
  • Spark任务提交jar包依赖解决方案

    通常我们将spark任务编写后打包成jar包,使用spark-submit进行提交,因为spark是分布式任务,如果运行机器上没有对应的依赖jar文件就会报ClassNotFound的错误。
    下面有三个解决方法:

    方法一:spark-submit –jars
    根据spark官网,在提交任务的时候指定–jars,用逗号分开。这样做的缺点是每次都要指定jar包,如果jar包少的话可以这么做,但是如果多的话会很麻烦。

    spark-submit --master yarn-client --jars ***.jar,***.jar(你的jar包,用逗号分隔) mysparksubmit.jar

    如果你使用了sbt的话,并且在build.sbt中配置好了依赖并下载完成,那么你可以直接去用户home目录下的.ivy/cache/中拷贝你需要的jar包

    方法二:extraClassPath

    提交时在spark-default中设定参数,将所有需要的jar包考到一个文件里,然后在参数中指定该目录就可以了,较上一个方便很多:

    spark.executor.extraClassPath=/home/hadoop/wzq_workspace/lib/*
    spark.driver.extraClassPath=/home/hadoop/wzq_workspace/lib/*

    需要注意的是,你要在所有可能运行spark任务的机器上保证该目录存在,并且将jar包考到所有机器上。这样做的好处是提交代码的时候不用再写一长串jar了,缺点是要把所有的jar包都拷一遍。

    方法三:sbt-assembly
    如果你还是觉得第二种麻烦,这种方法是将所有依赖的jar包包括你写的代码全部打包在一起(fat-jar)。在项目根目录输入sbt,键入plugins,发现assembly并没有默认安装,因此我们要为sbt安装sbt-assembly插件。
    在你的项目目录中project/plugins.sbt中添加

    addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.13.0")
    
    resolvers += Resolver.url("bintray-sbt-plugins", url("http://dl.bintray.com/sbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)

    然后我们再根目录键入sbt,然后使用plugins查看plugins,如果看到有sbtassembly.AssemblePlugin,说明你的插件就安成功了: 
    这里写图片描述 
    还要设置下冲突解决,然后再在sbt交互命令行下使用assembly就可以了。这种方法打包后会使得jar包很大。

  • 相关阅读:
    Java 基础
    Java 数据类型
    Spring 拦截器实现事物
    SSH 配置日记
    Hibernate 知识提高
    Jsp、Servlet
    leetcode 97. Interleaving String
    leetcode 750. Number Of Corner Rectangles
    leetcode 748. Shortest Completing Word
    leetcode 746. Min Cost Climbing Stairs
  • 原文地址:https://www.cnblogs.com/itboys/p/12124646.html
Copyright © 2011-2022 走看看