Я выполняю задание уменьшения карты, которое требует небольшого ввода (~ 3 МБ, список целых чисел размера z),
с разреженным матричным кешем размером n x m и в основном выводит z разреженных векторов размерности (n x 1). Вывод здесь довольно большой (~ 2 ТБ). Я использую 20 узлов m1.small в Amazon EC2 с хранилищем S3 в качестве входных и выходных данных.
Однако я получаю IOException: на устройстве не осталось места.
Кажется, что в логах Hadoop записано s3 байта, но файлы не создаются.
Когда я использовал меньший ввод (меньший z), вывод был там правильно после завершения работы.
Таким образом, я считаю, что он заканчивается во временном хранилище.
Есть ли способ проверить, где находится это временное хранилище?
Также забавно то, что в журнале говорится, что все байты записаны в s3, но я не вижу файлов и не знаю, куда записываются эти байты.
Спасибо за вашу помощь.
Пример кода (также пытались разбить на карту и сократить работу с той же ошибкой)
public void map(LongWritable key, Text value,
Mapper<LongWritable, Text, LongWritable, VectorWritable>.Context context)
throws IOException, InterruptedException
{
// Assume the input is id \t number
String[] input = value.toString().split("\t");
int idx = Integer.parseInt(input[0]) - 1;
// Some operations to do, but basically outputting a vector
// Collect the output
context.write(new LongWritable(idx), new VectorWritable(matrix.getColumn(idx)));
};