Так что ответ на самом деле заключается в том, что то, что вы замечаете, зависит от конкретной работы. В зависимости от задания карты/редукторы будут записывать более или менее байты в локальный файл по сравнению с hdf.
В вашем картонном футляре у вас есть аналогичный объем данных, который был прочитан как с локальных, так и с HDFS-местоположений, там нет проблем. Ваш код Mapper просто нуждается в том, чтобы читать о том же объеме данных локально, как он читает с HDFS. В большинстве случаев Mappers используются для анализа объема данных, большего, чем его оперативная память, поэтому неудивительно, что он, возможно, записывает данные, полученные с HDFS, на локальный диск. Количество байтов, считанных с HDFS и локальных, не всегда будет выглядеть так, как будто они суммируются с местным размером записи (чего у них нет даже в вашем случае).
Ниже приведен пример использования TeraSort с 100 ГБ данных, 1 млрд пар ключ/значение.
File System Counters
FILE: Number of bytes read=219712810984
FILE: Number of bytes written=312072614456
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=100000061008
HDFS: Number of bytes written=100000000000
HDFS: Number of read operations=2976
HDFS: Number of large read operations=0
Замечания. Количество байтов, считанных и записанных с HDFS, составляет почти ровно 100G. Это связано с тем, что необходимо сортировать 100G, и необходимо отсортировать окончательные отсортированные файлы. Также обратите внимание, что ему нужно сделать много локальных операций чтения/записи для хранения и сортировки данных, 2x и 3x - количество данных, которое оно читает!
В заключение, если вы просто не хотите работать, не заботясь о результате. Количество записанных байтов HDFS не должно быть 0, а ваше значение равно HDFS_BYTES_WRITTEN 0
i ve justed вставил счетчики фазы карты. Я разбираюсь в знаниях о байтах файла. Я думаю, что это количество байтов, считанных локальной файловой системой. но почему это почти то же самое, что и hdfs-байты, прочитанные в каждом задании, которое я запускаю? –
Поскольку Hadoop пытается оптимизировать локальные чтения, он распределяет ваш код туда, где находятся данные. Вот почему ваши HDFS-чтения являются локальными чтениями. –