spark submit在classpath中添加多个jar

时间:2015-03-17 12:29:07

标签: submit apache-spark classpath

我正在尝试运行一个spark程序,其中我有多个jar文件,如果我只有一个jar我无法运行。我想添加位于相同位置的jar文件。我已尝试过以下但它显示了依赖性错误

spark-submit \
  --class "max" maxjar.jar Book1.csv test \
  --driver-class-path /usr/lib/spark/assembly/lib/hive-common-0.13.1-cdh​5.3.0.jar

如何添加另一个位于同一目录中的jar文件?

我想添加/usr/lib/spark/assembly/lib/hive-serde.jar

10 个答案:

答案 0 :(得分:28)

只需使用--jars参数即可。 Spark将与执行程序共享这些jar(以逗号分隔)。

答案 1 :(得分:26)

指定所有其他jar的完整路径。

./bin/spark-submit --class "SparkTest" --master local[*] --jars /fullpath/first.jar,/fullpath/second.jar /fullpath/your-program.jar

或者通过添加以下行来在conf / spark-defaults.conf中添加jar:

spark.driver.extraClassPath /fullpath/firs.jar:/fullpath/second.jar
spark.executor.extraClassPath /fullpath/firs.jar:/fullpath/second.jar

答案 2 :(得分:12)

在conf / spark-defaults.conf中添加时,可以使用*将所有jar导入到文件夹中。

spark.driver.extraClassPath /fullpath/*
spark.executor.extraClassPath /fullpath/*

答案 3 :(得分:3)

我试图从使用spark-submit执行的python代码连接到mysql。

我使用的是使用Ambari的HDP沙箱。尝试了许多选项,例如--jars--driver-class-path等,但都没有。

解决方案

/usr/local/miniconda/lib/python2.7/site-packages/pyspark/jars/

中复制jar

截至目前,我不确定这是一个解决方案还是一个快速入侵,但由于我正在研究POC,所以它对我有用。

答案 4 :(得分:2)

在Spark 2.3中,您只需设置--jars选项即可。文件路径应该以方案为前缀,即Try like this private void button2_Click(object sender, EventArgs e) { if(comboSelectServer.SelectedItem.ToString()== "SERV1") { MessageBox.Show("SERV1"); } else if(comboSelectServer.SelectedItem.ToString()== "SERV2") { MessageBox.Show("SERV2"); } else if(comboSelectServer.SelectedItem.ToString()== "SERV3") { MessageBox.Show("SERV3"); } } 例如:file:///<absolute path to the jars>file:////home/hadoop/spark/externaljsrs/*

答案 5 :(得分:2)

--jars文件(由jar分隔到,的路径传递到spark-submit

供参考:

--driver-class-path is used to mention "extra" jars to add to the "driver" of the spark job

--driver-library-path is used to "change" the default library path for the jars needed for the spark driver

--driver-class-path will only push the jars to the driver machine. If you want to send the jars to "executors", you need to use --jars

并以编程方式设置罐子,请设置以下配置: spark.yarn.dist.jars以及以逗号分隔的罐子列表。

例如:

from pyspark.sql import SparkSession

spark = SparkSession \
        .builder \
        .appName("Spark config example") \
        .config("spark.yarn.dist.jars", "<path-to-jar/test1.jar>,<path-to-jar/test2.jar>") \
        .getOrCreate()

答案 6 :(得分:1)

您可以使用--jars $(echo /Path/To/Your/Jars/*.jar | tr''',')包含整个Jars文件夹。 所以, spark-submit-com.yourClass类\              --jars $(echo /Path/To/Your/Jars/*.jar | tr''',')\              ...

答案 7 :(得分:0)

对我来说--jars选项总是有效,但它太冗长了。要保存一些输入,您可以将所有jar放在一个名为'myJars'的目录中,然后使用此命令提交:

spark-submit --master local[*] --jars "/path/to/myJars/*.jar"    --class <ClassName> <application_jar_name>.jar arg1 arg2

答案 8 :(得分:0)

对于--driver-class-path选项,您可以使用:作为分隔符来传递多个jar。 以下是使用spark-shell命令的示例,但我想同样适用于spark-submit

    spark-shell --driver-class-path /path/to/example.jar:/path/to/another.jar

火花版本:2.2.0

答案 9 :(得分:0)

如果您使用的是属性文件,则可以在其中添加以下行:

spark.jars=jars/your_jar1.jar,...

假设

<your root from where you run spark-submit>
  |
  |-jars
      |-your_jar1.jar