我最近遇到了一些非常奇怪的数据损坏问题。基本上我所做的是:
- 使用“scp”将一些大数据(50个文件,每个大约8GB)从一台服务器传输到hpcc(高性能计算)
- 处理输入文件的每一行,然后将这些修改的行追加/写入输出文件。我通过“qsub -t 1-1000 xxx.sh”在 hpcc 上执行此操作,即同时抛出所有 1000 个工作。此外,这 1000 个作业平均每个作业使用 4GB 内存。
我的脚本的基本格式是:
f=open(file)
for line in f:
#process lines
或者
f=open(file).readlines()
#process lines
然而,奇怪的是:有时,我可以在我的数据的某些部分看到数据损坏。
首先,我只是发现我的一些“输入”数据已损坏(不是全部);那么我只是怀疑这是否是“scp”的问题。我问了一些电脑专家,也在这里发帖,但似乎“scp”扭曲数据的可能性很小。而我只是执行“scp”将我的数据再次传输到 hpcc;并且这次的输入数据就ok了。很奇怪,对吧?所以这促使我思考:输入数据是否有可能被用于运行内存/CPU 使用密集型程序而中断?
如果输入数据被破坏,输出也被破坏是很自然的。好的,然后我再次将输入数据传输到 hpcc,并检查它们是否都处于良好状态,然后运行程序(应该指出:一起运行 1000 个作业),输出文件......其中大部分是好的; 但是非常令人惊讶的是,只有一个文件的某些部分已损坏!所以我只是再次为这个特定文件单独运行程序,然后获得良好的输出而没有任何损坏!好迷茫……看了这么多怪事,我唯一的结论是:可能同时运行多个内存密集型作业会损坏数据?(但我以前也做过很多这样的工作,而且看起来还可以)
通过数据损坏,我的意思是:
像这样的东西:
CTTGTTACCCAGTTCCAAAG9583gfg1131CCGGATGCTGAATGGCACGTTTACAATCCTTTAGCTAGACACAAAAGTTCTCCAAGTCCCCACCAGATTAGCTAGACACAGAGGGCTGGTTGGTGCATCT0/1
gfgggfgggggggggggggg9583gfg1131CCGGAfffffffaedeffdfffeffff`fffffffffcafffeedffbfbb[aUdb\``ce]aafeeee\_dcdcWe[eeffd\ebaM_cYKU]\a\Wcc0/1
CTTGTTACCCAGTTCCAAAG9667gfg1137CCGGATCTTAAAACCATGCTGAGGGTTACAAA1AGAAAGTTAACGGGATGCTGATGTGGACTGTGCAAATCGTTAACATACTGAAAACCTCT0/1
gfgggfgggggggggggggg9667gfg1137CCGGAeeeeeeeaeeb`ed`dadddeebeeedY_dSeeecee_eaeaeeeeeZeedceadeeXbd`RcJdcbc^c^e`cQ]a_]Z_Z^ZZT^0/1
然而它应该是这样的:
@HWI-ST150_0140:6:2204:16666:85719#0/1
TGGGCTAAAAGGATAAGGGAGGGTGAAGAGAGGATCTGGGTGAACACACAAGAGGCTTAAAGCATTTTATCAAATCCCAATTCTGTTTACTAGCTGTGTGA
+HWI-ST150_0140:6:2204:16666:85719#0/1
gggggggggggggggggfgggggZgeffffgggeeggegg^ggegeggggaeededecegffbYdeedffgggdedffc_ffcffeedeffccdffafdfe
@HWI-ST150_0140:6:2204:16743:85724#0/1
GCCCCCAGCACAAAGCCTGAGCTCAGGGGTCTAGGAGTAGGATGGGTGGTCTCAGATTCCCCATGACCCTGGAGCTCAGAACCAATTCTTTGCTTTTCTGT
+HWI-ST150_0140:6:2204:16743:85724#0/1
ffgggggggfgeggfefggeegfggggggeffefeegcgggeeeeebddZggeeeaeed[ffe^eTaedddc^Oacccccggge\edde_abcaMcccbaf
@HWI-ST150_0140:6:2204:16627:85726#0/1
CCCCCATAGTAGATGGGCTGGGAGCAGTAGGGCCACATGTAGGGACACTCAGTCAGATCTATGTAGCTGGGGCTCAAACTGAAATAAAGAATACAGTGGTA