火花可以爆炸一罐罐子

时间:2017-09-07 15:58:45

标签: apache-spark

我的火花作业如下所示:

    spark-submit --jar test1.jar,test2.jar \
    --class org.mytest.Students \
    --num-executors ${executors} \
    --master yarn \
    --deploy-mode cluster \
    --queue ${mapreduce.job.queuename} \
    --driver-memory ${driverMemory} \
    --conf spark.executor.memory=${sparkExecutorMemory} \
    --conf spark.rdd.compress=true \
    --conf "spark.executor.extraJavaOptions=-XX:+UseG1GC -
       XX:MaxGCPauseMillis=100 
   ${SPARK_JAR} "${INPUT}" "${OUTPUT_PATH}" 

是否可以传递包含test1.jar和test2.jar的单个jar。像--jars mainTest.jar(包含test1.jar和test2.jar) 我的问题基本上可以引发一罐罐子。我使用的是1.3版本。

2 个答案:

答案 0 :(得分:3)

  

问题:火花可以爆炸一罐罐子吗?

...是

正如T. Gaweda建议的那样,我们可以用maven程序集插件实现.... 想把其他选择放在这里......

(特别有用,因为它合并特定文件的内容而不是覆盖它们。当资源文件在jars中具有相同的名称并且插件尝试打包所有资源文件时,这是必需的。)

  

此插件提供了将工件打包的功能   uber-jar,包括它的依赖关系和阴影 - 即重命名 -   一些依赖项的包

     

目标概述         Shade插件只有一个目标:

     

shade:shade绑定到包阶段并用于创建   阴影罐。

  • 选项2

SBT Way if you are using sbt

来源:creating-uber-jar-for-spark-project-using-sbt-assembly

  

sbt-assembly是一个sbt插件,用于创建sbt项目的胖JAR   包含所有依赖项。

     

在project / plugin.sbt

中添加sbt-assembly插件
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.9.1")
    Specify sbt-assembly.git as a dependency in project/project/build.scala


import sbt._

object Plugins extends Build {
  lazy val root = Project("root", file(".")) dependsOn(
    uri("git://github.com/sbt/sbt-assembly.git#0.9.1")
  )
}

build.sbt文件中添加以下内容

import AssemblyKeys._ // put this at the top of the file,leave the next line blank

assemblySettings

使用完整键配置程序集插件。有关详细信息refer

 target                        assembly-jar-name             test
 assembly-option               main-class                   
 full-classpath dependency-classpath          assembly-excluded-files  
 assembly-excluded-jars

如果多个文件共享相同的相对路径,则默认策略是验证所有候选项具有相同的内容,否则出错。可以使用程序集合并策略为Spark项目配置此行为,如下所示。

mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
  {
    case PathList("javax", "servlet", xs @ _*) => MergeStrategy.last
    case PathList("org", "apache", xs @ _*) => MergeStrategy.last
    case PathList("com", "esotericsoftware", xs @ _*) => MergeStrategy.last
    case "about.html" => MergeStrategy.rename
    case x => old(x)
  }
}

从根文件夹运行

sbt/sbt assembly

程序集插件然后将类文件和所有依赖项打包到一个JAR文件中

答案 1 :(得分:2)

您可以简单地将这些罐子合并到一个带阴影的Jar中。请阅读此问题:How can I create an executable JAR with dependencies using Maven?

您将在一个Jar中拥有所有课程。嵌套的Jars没有问题。