Lando Norris claimed victory in the Hungarian Grand Prix, surviving massive late pressure from McLaren team mate Oscar Piastri in the closing stages.