spark submit在类路径中添加多个JAR
我试图运行一个spark程序,其中我有多个jar文件,如果我只有一个jar,我就无法运行。我想添加位于同一位置的两个jar文件。我尝试了下面的方法,但它显示了一个依赖项错误spark submit在类路径中添加多个JAR,submit,apache-spark,classpath,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-cdh5.3.0.jar 如何添加同一目录中的另一个jar文件 我
spark-submit \
--class "max" maxjar.jar Book1.csv test \
--driver-class-path /usr/lib/spark/assembly/lib/hive-common-0.13.1-cdh5.3.0.jar
如何添加同一目录中的另一个jar文件
我想添加
/usr/lib/spark/assembly/lib/hive serde.jar
只需使用--jars
参数。Spark将与执行者共享这些JAR(逗号分隔)。为所有其他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
在conf/spark-defaults.conf中添加时,可以使用*将所有JAR导入文件夹
spark.driver.extraClassPath /fullpath/*
spark.executor.extraClassPath /fullpath/*
我试图从使用
spark submit
执行的python代码连接到mysql
我使用的是HDP沙盒,它使用的是Ambari。尝试了很多选项,如--jars
,--driver class path
等,但都没有成功
解决方案
在/usr/local/miniconda/lib/python2.7/site packages/pyspark/jars/
到目前为止,我还不确定这是一个解决方案还是一个快速破解,但因为我正在研究POC,所以它对我来说很有用。在Spark 2.3中,您只需设置--jars选项。文件路径应通过ie
file://
例如:file:////home/hadoop/spark/externaljsrs/*
或file:////home/hadoop/spark/externaljars/abc.jar,file:////home/hadoop/spark/externaljars/def.jar
对于--驱动程序类路径
选项,您可以使用:
作为delimeter传递多个jar。
下面是使用sparkshell
命令的示例,但我想同样的方法也适用于sparksubmit
spark-shell --driver-class-path /path/to/example.jar:/path/to/another.jar
Spark版本:2.2.0您可以使用--jars$(echo/Path/To/Your/jars/*.jar | tr'',')来包含整个jar文件夹。
所以
spark提交——class com.yourClass\
--jars$(echo/Path/To/Your/jars/*.jar | tr'',)\
…如果您使用的是属性文件,则可以在此处添加以下行:
spark.jars=jars/your_jar1.jar,...
假设
<your root from where you run spark-submit>
|
|-jars
|-your_jar1.jar
|
|-罐子
|-你的_jar1.jar
传递--jars
,jar文件路径用分隔,
发送到spark提交
供参考:
--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
要以编程方式设置JAR,请设置以下配置:
spark.warn.dist.jars
带有逗号分隔的jar列表
例如:
从pyspark.sql导入SparkSession
火花=火花会话\
建筑商先生\
.appName(“Spark配置示例”)\
.config(“spark.warn.dist.jars”,“,”)\
.getOrCreate()
Welcome@avinash,在下一篇帖子中,我建议您看看spark提交[restofyouroptions]--conf“spark.driver.extraClassPath=myjarfile.jar”
多个jar文件:“spark.driver.extraClassPath=/path/myjarfile1.jar:/path/myjarfile2.jar”
@zahra对我不起作用,“没有合适的驱动程序”发现错误。此问题是由于JVM在设置“extraClassPath”配置之前已启动。。有什么方法可以在JVM启动之前设置它吗?我尝试了逗号分隔的spark submit--class“max”maxjar.jar Book1.csv test/usr/lib/spark/assembly/lib/hive-common-0.13.1-cdh5.3.0.jar,hive-serde.jar。但这两个罐子都看不懂。我得到了这个错误org/apache/hadoop/hive/conf/hiveconfig的意思是,像这样使用:spark submit--master_url--jars jar1,jar2--class classname application_jar实际上我想在我的类路径中添加多个jar。我没有权限在我的区域设置文件中复制jar,所以我只是通过类路径访问jars我也尝试过,但是它不起作用,Scink只考虑了第一个jar,第二个将它看作JAR JAR,因此,它抛出一个异常,说明用-Cype指定的类不是你确定的吗?我得到“16/10/20 19:56:43错误SparkContext:Jar未在文件:/root/.ivy2/jars/*.Jar中找到”相对路径也有效!我的设置是“spark.driver.extraClassPath lib/*”,其中lib是spark home下的一个目录,所有第三方jar都在那里。尽管在更大的编辑中删除这些内容更有意义。这是我在谷歌搜索时发现的第一个问题,仅供参考。在AWS EMR with Spark 2.x中,jars文件夹位于/usr/lib/Spark/jars/
中。AWS有一个关于如何做到这一点的建议。我如何在windows中做到这一点?因为windows上的path包含冒号,例如D:\path一个以逗号分隔的包列表帮助了我。。在spark文件夹的bin文件夹中创建spark-defaults.conf文件。在spark-defaults.conf类型“spark.jars.packages org.apache.spark:spark-streaming-kafka-0-10_2.12:3.0.2,org.apache.spark:spark-avro_2.12:3.0.2”中,如您所见,我得到了第一个包“streaming kafka”和第二个包“spark avro”。。您所要做的就是通过使用逗号分隔符指定包来添加所需的包。
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()