使用--archives选项在spark上提交上传zip文件

时间:2017-01-06 03:16:45

标签: scala apache-spark zip yarn

我有一个带有一些模型文件的目录,由于某种原因,我的应用程序必须在本地文件系统中访问这些模型文件。

当然我知道--files的{​​{1}}选项可以将文件上传到每个执行程序的工作目录,它确实有效。

但是,我想保留文件的目录结构,以便我提出spark-submit选项,这就是说

--archives

但是当我实际使用它来上传YARN-only: ...... --archives ARCHIVES Comma separated list of archives to be extracted into the working directory of each executor. ...... 时,我发现纱线只是把它放在那里而没有提取,就像它对models.zip所做的那样。我误解了--files或误用了这个选项吗?

1 个答案:

答案 0 :(得分:22)

自己找到答案。

YARN确实提取了存档,但添加了一个与存档名称相同的额外文件夹。为清楚起见,如果我将models/model1models/models2放入models.zip,那么我必须models.zip/models/model1models.zip/models/model2访问我的模型。

此外,我们可以使用#syntax。

使这更美观

--files和--archives选项支持使用与Hadoop类似的#指定文件名。例如,您可以指定:--files localtest.txt#appSees.txt,这会将您在本地命名为localtest.txt的文件上传到HDFS,但这将通过名称appSees.txt链接,您的应用程序应使用命名为appSees.txt,以便在YARN上运行时引用它。

编辑:

这个答案在spark 2.0.0上测试过,我不确定其他版本的行为。