提交Apache Spark作业时在spark.jars中使用通配符

时间:2018-05-07 18:27:09

标签: apache-spark

我有一套JAR,我想让我的Spark作业可以存储在HDFS上。

Spark 2.3的文档说明spark.jars是其参数:

spark.jars: Comma-separated list of jars to include on the driver and executor classpaths. Globs are allowed.

然而,将spark.jars设置为hdfs:///path/to/my/libs/*.jar会失败:驱动程序启动正常,一个阶段启动,但随后任务死亡:

WARN TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, xxxx, executor 1): java.io.FileNotFoundException: File hdfs:/path/to/my/libs/*.jar does not exist. at org.apache.hadoop.hdfs.DistributedFileSystem.listStatusInternal(DistributedFileSystem.java:901) at org.apache.spark.util.Utils$.fetchHcfsFile(Utils.scala:724) at org.apache.spark.util.Utils$.doFetchFile(Utils.scala:692) at org.apache.spark.util.Utils$.fetchFile(Utils.scala:472) at org.apache.spark.executor.Executor$$anonfun$org$apache$spark$executor$Executor$$updateDependencies$5.apply(Executor.scala:755) ...

即,它似乎在执行器上运行时没有展开glob。

明确地将spark.jars设置为hdfs:///path/to/my/libs/libA.jar,hdfs:///path/to/my/libs/libB.jar可以正常工作。

如何在spark.jars

中使用文档所示的glob

1 个答案:

答案 0 :(得分:0)

我正在从本地文件系统运行所有spark批处理和流应用程序。我不确定为什么需要将它们存储在hdfs中。

但是,如果您更喜欢使用本地文件系统来保存jar,则可以使用通配符,如下所示:-

Results.Text = Directory
    .GetFiles(path, "*.txt")
    .Select(File.ReadAllText)
    .FirstOrDefault(fileText => fileText.Contains(AssetT.Text)) ?? Results.Text;

希望这会有所帮助。