いくつかのモデルファイルを含むディレクトリがあり、何らかの理由でアプリケーションがローカルファイルシステム内のこれらのモデルファイルにアクセスする必要があります。
もちろん、--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
をアップロードすると、--files
で行ったように、糸が抽出せずにそこに配置されていることがわかりました。 to be extracted
を誤解したり、このオプションを誤用したりしましたか?
自分で答えを見つけました。
YARNはアーカイブを抽出しますが、アーカイブと同じ名前のフォルダーを追加します。明確にするために、models/model1
とmodels/models2
をmodels.Zip
に入れると、models.Zip/models/model1
とmodels.Zip/models/model2
でモデルにアクセスする必要があります。
さらに、#構文を使用してこれをより美しくすることができます。
-filesおよび--archivesオプションは、Hadoopと同様の#を使用したファイル名の指定をサポートします。たとえば、次のように指定できます。--files localtest.txt#appSees.txtおよびこれにより、ローカルでlocaltest.txtという名前のファイルがHDFSにアップロードされますが、これはappSees.txtという名前でリンクされます。アプリケーションは、YARNで実行するときに、appSees.txtという名前を使用して参照する必要があります。
編集:
この回答はspark 2.0.0でテストされましたが、他のバージョンでの動作はわかりません。