(論理的に同じように聞こえても、Hadoop や map reduce ソリューションを提案しないでください)
私は大きなファイルを持っています - 70GB の生の html ファイルで、必要な情報を取得するために解析を行う必要があります。
標準 I/O を使用する前に、10GB ファイルを正常に削除しました。
cat input_file | python parse.py > output_file
そして、私の python スクリプトでは、標準入力からすべての html (行ごとの各 html) を読み取り、結果を標準出力に書き戻します。
from bs4 import BeautifulSoup
import sys
for line in sys.stdin:
print ....
コードは非常に単純ですが、現在、1 つのノードで非常に遅い大きなファイルを扱っています。約 20 ノードのクラスターがあります。そして、どうすればこの作品を簡単に配布できるのだろうかと考えています。
私がこれまでに行ったこと:
split -l 5000 input_file.all input_file_ # I have 60K lines in total in that 70G file
大きなファイルがいくつかの小さなファイルに分割されました。
input_file_aa
input_file_ab
input_file_ac
...
次に、それらのそれぞれで問題なく作業できます。
cat input_file_aa | python parser.py > output_file_aa
私がやろうとしているのは、おそらくinput_fileを各ノードにscpし、解析を行ってから結果をscpすることですが、10以上のノードがあります! 私はそれを手動で行うのはとても面倒です。
これらのファイルを他のノードに簡単に配布し、解析して結果を元に戻すにはどうすればよいでしょうか?
私は基本的なシェル、JAVA、Python ソリューションを受け入れています。事前に感謝します。さらに説明が必要な場合はお知らせください。
すべてのノードで評価できる /bigShare/ というフォルダーがあり、コンテンツは同期され、同じままであることに注意してください。アーキテクトがそれをどのように実装したかはわかりませんが (NFS ..? 確認方法がわかりません)、input_file と python スクリプトをそこに置くことができたので、残りはそれらのノードに簡単にログインしてコマンドを実行する方法です。ところで、私は Red Hat を使用しています。