(不要建议 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 ....
代码非常简单,但现在,我正在处理一个在一个节点上速度非常慢的大文件。我有一个大约 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 多个节点!我手动执行此操作非常乏味。
我想知道如何轻松地将这些文件分发到其他节点并进行解析并将结果移回?
我对基本的 SHELL、JAVA、Python 解决方案持开放态度。提前非常感谢,如果您需要更多解释,请告诉我。
请注意,我确实有一个名为 /bigShare/ 的文件夹,它可以在每个节点上进行评估,并且内容是同步的并保持不变。我不知道架构师是如何实现的(NFS ..?我不知道如何检查)但我可以将我的 input_file 和 python 脚本放在那里,所以剩下的就是如何轻松登录到这些节点并执行命令。顺便说一句,我在红帽。