web-dev-qa-db-ja.com

糸にspark-submitの--archivesオプションを使用してZipファイルをアップロードする

いくつかのモデルファイルを含むディレクトリがあり、何らかの理由でアプリケーションがローカルファイルシステム内のこれらのモデルファイルにアクセスする必要があります。

もちろん、--filesspark-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を誤解したり、このオプションを誤用したりしましたか?

9
Mo Tao

自分で答えを見つけました。

YARNはアーカイブを抽出しますが、アーカイブと同じ名前のフォルダーを追加します。明確にするために、models/model1models/models2models.Zipに入れると、models.Zip/models/model1models.Zip/models/model2でモデルにアクセスする必要があります。

さらに、#構文を使用してこれをより美しくすることができます。

-filesおよび--archivesオプションは、Hadoopと同様の#を使用したファイル名の指定をサポートします。たとえば、次のように指定できます。--files localtest.txt#appSees.txtおよびこれにより、ローカルでlocaltest.txtという名前のファイルがHDFSにアップロードされますが、これはappSees.txtという名前でリンクされます。アプリケーションは、YARNで実行するときに、appSees.txtという名前を使用して参照する必要があります。

編集:

この回答はspark 2.0.0でテストされましたが、他のバージョンでの動作はわかりません。

24
Mo Tao