How to stop fire from going out without netherrack

Try this command:

/gamerule doFireTick false

This will disable all fire from going out, and will also disable fire spreading, but if the fire on the hopper is the only fire, then this is the way.

To turn fire tick back on, do the same command but change false to true.


Update to 1.13: the syntax and functioning of commands has changed (twice). It is now possible to combine all into one Repeat Always active command block:

execute unless block X Y Z fire run setblock X Y Z fire

where X, Y and Z are the X, Y and Z coordinates of the fire block, respectively

Breakup:

execute unless                  # unless (if ... is not)              
    block                       # the block at 
    X Y Z                       # the coordinates [X,Y,Z]            
    fire                        # is fire
    run setblock                # place a block
        X Y Z                   # at the coordinates [X,Y,Z]  
        fire                    # of fire

Resets the fire within 1/20th of a second after burnout, and is lag-friendly*. The command block can be anywhere. Here is a screenshot:

simple

* as lag friendly as 1.13 can be