2012-01-28 15 views
1

ファイルをhadoop hdfs parallelに転送するコードを書いています。だから私はfilesystem.copyFromLocalFileを呼び出す多くのスレッドがあります。についてhadoopファイルシステムtransferFromLocalFile

私はファイルシステムを開くコストが小さいとは思わないので、プロジェクトでは1つのファイルシステムしか開いていません。だから私は同時に多くのスレッドが同時に呼び出しているときに問題があるかもしれません。しかしこれまでのところ、問題なく正常に動作します。

誰でもこのコピー方法に関する情報を教えてください。 非常にありがとうございます&素晴らしい週末があります。

答えて

0

copyFromLocalFile()についてさらに多くの情報を教えていただけますか?

あなたのケースでは、スレッドは同じリソースを共有していると思います。 FileSystemのインスタンスは1つしかないので、各オブジェクトはおそらくこのオブジェクトを時分割で共有します。

+0

コードには同期がありません。だから時間がない。どんな数のスレッドを実行しても問題ありません。コピーするだけでなく、内部状態を保存しなければならないため、これが機能します。 –

+0

私は実際には、このcopyFromLocalFile()がスレッドセーフであるかどうかを知りたいだけですか?または、ファイルシステムは、ファイル転送のために多くのスレッドを開始します。 –

1

私は考慮すべき次の設計ポイントを参照してください:
a)プロセスのボトルネックはどこにありますか?私は2-3の並列コピー操作でローカルディスクまたは1GBのイーサネットがボトルネックになると思います。マルチスレッドアプリケーションの形式で実行することも、いくつかのプロセスを実行することもできます。いずれにせよ、私はあなたに高いレベルの並列性が必要とは思わない。 b)エラー処理。一方のスレッドが失敗してもプロセス全体が停止してはならず、同時にファイルが失われてはいけません。そのような場合に私が通常やっているのは、最悪の場合にファイルを2回コピーできるということに同意することです。それがOKならば、システムは単純な "コピーして削除"シナリオで動作することができます。 c)クラスタノードの1つからコピーする場合 - コピー先のホストに1つのレプリカが保存されるため、HDFSはアンバランスになります。あなたは常にバランスを取る必要があります。

関連する問題