2017-03-21 2 views
0

*.tar.gzファイルをAPPLICATIONレベルの可視性の下で糸ノードに配布しようとしています。ディレクトリ以下の私のHadoopノードで糸ノードに非jarファイルを配布する方法は?

は、ノードマネージャによって生成される

/tmp/hadoop-vikram/nm-local-dir/usercache/vikram/appcache/application_1490062699498_0005/container_1490062699498_0005_01_000003/ 

私は

/tmp/hadoop-vikram/nm-local-dir/usercache/vikram/appcache/application_1490062699498_0005/filecache/10/test.tar.gz 

の下で期待されるファイルを参照してくださいしかし、私は、アプリケーションコードにtest.tar.gzへのパスを取得したいと思います。

私は私はあなたがコンテナの場所に頼って正しいことをやっているとは思わない

URL input = getClass().getClassLoader().getResource("jar-file-name"); 
+0

¿このタールをnfsに保存してみませんか? – jedijs

+0

@jedijs私はYarnによって実行されるファイル配布に力を入れたいです – user3401493

答えて

0

次を使用してjarファイルのパスを見つけることができます。マイナーコレクションの場合は、distributed cacheを使用して、すべてのタスクノードでリソースを利用できるようにすることをお勧めします。ファイルを自動的にすべてのコンテナノードにアップロードし、すべてのマッパー、つまりレデューサーで利用できるようにします。

ファイルが十分大きければ、実際のタスクが実行されるすべてのノードにデータがコピーされるため、これは大きなスペースヒットになるはずです。これを改善するために、可用性を向上させるために、より大きな複製係数(たとえば、クラスタ内のノード数に依存)を使用してファイルをファイルシステムに直接配置することができます。それであなたのタスクでは、それを直接ダウンロードすることができます。これは、分散キャッシュアプ​​ローチと比較してスペースを大幅に節約しますが、コストは非ローカル読み取りの帯域幅になります。最適なレプリケーション数を見つけるためにこれを使って遊ぶことができます。

+0

返信のためにAlexに感謝します。私のファイルサイズは大きくなく、むしろ数100kbsです。 LocalResource実装を使用して、すでにコンテナノードにファイルを配布しています。しかし、何とかこのファイルが欠落しているコンテナのいくつかに。 – user3401493

+0

@ user3401493おそらくあなたは何かが不足しているでしょう。これは正しい方法ですが、私はあなたが直接コンテナにアクセスするのではなく、LocalResourceの問題の理由を調べてみることをアドバイスします – Alex

関連する問題