我的项目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。
有什么建议吗?
答案 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。