Я пытался запустить задание hadoop, чтобы выполнить слово shingling, и все мои узлы вскоре перешли в неработоспособное состояние, так как хранилище израсходовано.
Вот моя часть отображения:
shingle = 5
for line in sys.stdin:
# remove leading and trailing whitespace
line = line.strip()
for i in range(0, len(line)-shingle+1):
print ('%s\t%s' % (line[i:i+shingle], 1))
Насколько я понимаю, «print» будет генерировать временный файл на каждом узле, который занимает пространство строба.Если взять в качестве примера txt-файл:
cat README.txt |./shingle_mapper.py >> temp.txt
, я вижу размер исходного и временного файла:
-rw-r - r-- 1 корневой корень 136613 ноября 02:46 README.txt
-rw-r - r-- 1 корневой корень 9744 14 ноября 01:43 temp.txt
Размер временного файла в 7 раз большевходной файл, поэтому я думаю, что это причина того, что каждый мой узел израсходовал все хранилище.
Мой вопрос: правильно ли я понимаю временный файл?Если да, то есть ли лучший способ уменьшить размер временных файлов (для меня добавление дополнительного хранилища не вариант)?