2017-08-20 10 views
0

私はHadoopを使用して1000個の小さなファイルを処理するシナリオを持っています。 Hadoopジョブの出力は、非Hadoopアルゴリズムの入力として使用されます。現在のワークフローでは、データが読み込まれ、シーケンスファイルに変換され、処理された小さなファイルがシーケンスファイルの形式でHDFSに出力されます。しかし、非Hadoopアルゴリズムはシーケンスファイルを理解できません。したがって、シーケンスファイルから結果のファイルのデータを読み込んで、非Hadoopアルゴリズムで使用できる最終的な小さなファイルを作成する、もう1つの単純なHadoopジョブを作成しました。Hadoop Yarnローカルファイルシステムへの書き込み

最後の仕事では、HDFSからシーケンスファイルを読み込み、各ノードのローカルファイルシステムに書き込んで、非Hadoopアルゴリズムで処理する必要があります。出力パスをfile:///<local-fs-path>に設定し、Hadoop LocalFileSystemクラスを使用してみました。しかし、そうすることで最終結果がnamenodeのローカルファイルシステムにのみ出力されます。

ちょうど画像を完成させるために、私は10ノードのHadoopを糸でセットアップしました。 Hadoop YarnモードでHDFSからデータを読み取り、各処理ノードのローカルファイルシステムに結果を書き込む方法はありますか?

ありがとうございました

+0

NFSドライブをマウントすることができます。とにかくすべての結果を収集するだけであれば、ローカルのデータノードに書き込む利点はありません。また、hadoopは何千もの小さなファイルでうまく動作しないので、正しいプロセスを使用していることを確認していますか? –

+0

残念ながら、プロジェクトの要件は明記されているとおりです。 Hadoopを使って処理すると、たくさんのファイルがあっても実際に20時間以上の作業時間を節約できたので、Hadoopはうまくいきます。 NFSを提案してくれてありがとう、私たちはすでにそれを考えました。 –

答えて

0

本当にありません。 LocalFileSystemに書き込むことはできますが、すべてのノードでアプリケーションを実行するようにYARNに依頼することはできません。また、クラスタの構成によっては、YARNのノードマネージャがシステムのすべてのノードで実行されていない可能性があります。

可能な回避策は、変換されたファイルをHDFSに保存し、Hadoop以外のプロセスで最初にhdfs dfs -copyToLocalを呼び出すことです。

関連する問題