Spill buffer data means writing the buffer data (from in-memory cache) to the local physical disk to emptied the buffer when it reaches the 80% occupied. If this spilling is not done in proper time, the data in buffer may be overwritten by upcoming mapper output. Amount of memory available for this is set by mapreduce.task.io.sort.mb.
The spill buffer data happens at least once when the mapper finishes all its task, because the output of the mapper should be sorted and saved to the disk for reducer to read and process to generate the final output. The final output then is written back to HDFS.