通过SparkConf以编程方式设置spark.executor.extraClassPath选项设置

时间:2018-07-11 20:35:05

标签: apache-spark sparkcore

我的项目jar与EMR上的jar冲突,因此要解决此问题 我已经通过引导脚本将所有高级jar复制到节点的自定义位置。我已验证jars已复制到所有执行程序节点上。

使用spark-submit可以正常工作,我的code引用了所有节点的自定义文件夹中的新jar。

/usr/bin/spark-submit --conf="spark.driver.extraClassPath=/usr/customJars/*" --conf="spark.executor.extraClassPath=/usr/customJars/*"  

同一件事,我想通过更新sparkconf对象以编程方式在代码中实现。

sparkConf.set("spark.driver.extraClassPath", "/usr/customJars/*");
sparkConf.set("spark.executor.extraClassPath", "/usr/customJars/*"); 

当我想以编程方式实现时,它不起作用。我的code没有在自定义位置引用更新的jar。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

大多数属性无法在运行时的Spark中更改。

您可以查看SparkConf的文档:SparkConf

  

一旦将SparkConf传递给SparkContext构造函数,则值   被克隆,无法更改。这是一个Spark限制。

在测试新的属性更改之前,您需要确保停止并启动Spark Session。

作为文档中的另一条评论:Spark Configuration

对于import tensorflow as tf with tf.Graph().as_default(), tf.Session() as sess: a = tf.placeholder(tf.float32, [None, None]) b = tf.placeholder(tf.float32, [None, None, None]) a_exp = tf.expand_dims(tf.expand_dims(a, 1), 1) dist = tf.reduce_mean(tf.norm(b - a_exp, axis=3), axis=2) print(sess.run(dist, feed_dict={a: [[1, 2, 3], [4, 5, 6]], b: [[[ 4, 5, 6], [ 7, 8, 9]], [[10, 11, 12], [13, 14, 15]]]})) # [[ 7.7942286 18.186533 ] # [ 2.598076 12.990381 ]]

  

额外的类路径条目,以附加到执行者的类路径。这个   主要是为了向后兼容旧版本的   火花。用户通常不需要设置此选项。

您可以使用spark.executor.extraClassPath来影响驱动程序和执行程序:

  

以逗号分隔的jar列表,​​包括在驱动程序和执行程序上   类路径。允许使用globs。

确保执行程序中可以使用您的jar。