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包很大。

  • 相关阅读:
    Web项目java.lang.OutOfMemoryError: PermGen space异常解决
    上传预览,图片展示大小的控制
    Eclipse常用插件安装_PropertiesEditor
    JDK的安装配置
    Eclipse与Tomcat的集成(无插件)
    Jsp&Servlet实现读取本地图片并展示
    DB2日期及时间的使用
    图片的另一种展现—将后台图片编码直接展现为图片
    Eclipse Task的使用
    Eclipse引入BASE64Encoder的问题
  • 原文地址:https://www.cnblogs.com/itboys/p/12124646.html
Copyright © 2011-2022 走看看