scala - 在没有 sbt 的情况下运行 Spark sbt 项目?

标签 scala sbt apache-spark

我有一个可以从 sbt 控制台运行的 Spark 项目。但是,当我尝试从命令行运行它时,我得到线程“主”java.lang.NoClassDefFoundError 中的异常:org/apache/spark/SparkContext。这是预料之中的,因为 Spark 库在 build.sbt 中列为provided

如何配置才能从命令行运行 JAR,而无需使用 sbt 控制台?

最佳答案

要独立运行 Spark,您需要构建一个 Spark 程序集。 在 spark 根目录上运行 sbt/sbt assembly。这将创建:assembly/target/scala-2.10/spark-assembly-1.0.0-SNAPSHOT-hadoop1.0.4.jar

然后你用依赖项构建你的工作 jar(使用 sbt assembly 或 maven-shade-plugin)

您可以使用生成的二进制文件从命令行运行您的 spark 作业:

ADD_JARS=job-jar-with-dependencies.jar SPARK_LOCAL_IP=<IP> java -cp spark-assembly-1.0.0-SNAPSHOT-hadoop1.0.4.jar:job-jar-with-dependencies.jar com.example.jobs.SparkJob

注意:如果您需要其他 HDFS 版本,则需要在构建程序集之前执行其他步骤。参见 About Hadoop Versions

关于scala - 在没有 sbt 的情况下运行 Spark sbt 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23687235/

相关文章:

java - ClassLoader getResourceAsStream 未加载同一目录中的某些文件

java - Play Framework 2.1.2 国际化不适用于芬兰语字符

scala - 创建 `collection.mutable.SortedSet` -- `map` 方法中的歧义

scala - 从 Spark DataFrame 中的单个列派生多个列

java - 来自 Janino 和 Commons-Compiler 的 Spark java.lang.NoSuchMethodError

hadoop - 对 SparkSQL 中数组列的每个元素执行 UDF(需要另一个 spark 作业)

scala - 在功能上合并多个 map

sbt - 为什么 SBT 在运行外部进程时会抛出错误

scala - 为什么我的 'SparkSession'下面没有 'org.apache.spark.sql'

apache-spark - Spark + Druid Tranquility - 库版本冲突