使用 spark-submit on yarn 的 --archives 选项上传 zip 文件

Upload zip file using --archives option of spark-submit on yarn

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

我当然知道 --files 选项 spark-submit 可以将文件上传到每个执行程序的工作目录并且它确实有效。

但是,我想保留文件的目录结构,所以我提出了 --archives 选项,即

YARN-only:
......
--archives ARCHIVES         Comma separated list of archives to be extracted into the working directory of each executor.
......

但是当我实际使用它上传 models.zip 时,我发现 yarn 只是把它放在那里而不提取,就像它对 --files 所做的那样。我是否误解了 to be extracted 或误用了此选项?

自己找到了答案。

YARN 确实提取了存档,但添加了一个与存档同名的额外文件夹。明确地说,如果我将 models/model1models/models2 放在 models.zip 中,那么我必须通过 models.zip/models/model1models.zip/models/model2.[=15= 访问我的模型]

此外,我们可以使用#语法使它更漂亮。

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

编辑:

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