我有一个带有一些模型文件的目录,由于某种原因,我的应用程序必须在本地文件系统中访问这些模型文件。
当然我知道--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
或误用了这个选项吗?
答案 0 :(得分:22)
自己找到答案。
YARN确实提取了存档,但添加了一个与存档名称相同的额外文件夹。为清楚起见,如果我将models/model1
和models/models2
放入models.zip
,那么我必须models.zip/models/model1
和models.zip/models/model2
访问我的模型。
此外,我们可以使用#syntax。
使这更美观--files和--archives选项支持使用与Hadoop类似的#指定文件名。例如,您可以指定:--files localtest.txt#appSees.txt,这会将您在本地命名为localtest.txt的文件上传到HDFS,但这将通过名称appSees.txt链接,您的应用程序应使用命名为appSees.txt,以便在YARN上运行时引用它。
编辑:
这个答案在spark 2.0.0上测试过,我不确定其他版本的行为。